From c4e068b568ff662f49ed191c5c3188ea7b6138b2 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 5 Apr 2024 23:22:24 +0800 Subject: [PATCH] chore: merge nitro changes (#586) Co-authored-by: Goran Vladika Co-authored-by: Raul Jordan --- .github/workflows/go.yml | 10 +- .gitignore | 4 +- assertions/BUILD.bazel | 3 + assertions/manager_test.go | 91 +- assertions/poster_test.go | 13 +- assertions/sync_test.go | 7 - .../sol-implementation/BUILD.bazel | 2 + .../assertion_chain_test.go | 61 +- .../edge_challenge_manager_test.go | 50 +- contracts/LICENSE.md | 116 + contracts/deploy/BridgeCreator.js | 10 + contracts/deploy/BridgeStubCreator.js | 10 + contracts/deploy/HashProofHelper.js | 13 + contracts/deploy/InboxStubCreator.js | 21 + contracts/deploy/OneStepProofEntryCreator.js | 23 + contracts/deploy/OneStepProver0Creator.js | 13 + .../deploy/OneStepProverHostIoCreator.js | 13 + contracts/deploy/OneStepProverMathCreator.js | 13 + .../deploy/OneStepProverMemoryCreator.js | 13 + contracts/deploy/SequencerInbox.js | 13 + contracts/deploy/SequencerInboxStubCreator.js | 32 + contracts/deploy/ValueArrayTesterCreator.js | 13 + contracts/foundry.toml | 13 +- contracts/package.json | 50 +- contracts/remappings.txt | 3 +- contracts/script/upgrade/deploy4844.ts | 107 + contracts/scripts/boldUpgradeFunctions.ts | 13 +- contracts/scripts/config.ts.example | 33 + contracts/scripts/createERC20Rollup.ts | 41 + contracts/scripts/createEthRollup.ts | 13 + contracts/scripts/deployment.ts | 39 + contracts/scripts/deploymentUtils.ts | 191 + contracts/scripts/genNetwork.ts | 17 + contracts/scripts/rollupCreation.ts | 167 + contracts/scripts/testSetup.ts | 132 + .../AssertionStakingPool.sol | 2 +- .../AssertionStakingPoolCreator.sol | 2 +- .../StakingPoolErrors.sol | 2 +- contracts/src/bridge/AbsBridge.sol | 308 + contracts/src/bridge/AbsInbox.sol | 356 + contracts/src/bridge/AbsOutbox.sol | 326 + contracts/src/bridge/Bridge.sol | 264 +- contracts/src/bridge/ERC20Bridge.sol | 91 + contracts/src/bridge/ERC20Inbox.sol | 144 + contracts/src/bridge/ERC20Outbox.sol | 30 + contracts/src/bridge/GasRefunder.sol | 257 + contracts/src/bridge/IBridge.sol | 41 +- .../src/bridge/IDelayedMessageProvider.sol | 2 +- contracts/src/bridge/IERC20Bridge.sol | 37 + contracts/src/bridge/IERC20Inbox.sol | 75 + contracts/src/bridge/IEthBridge.sol | 26 + contracts/src/bridge/IInbox.sol | 68 +- contracts/src/bridge/IInboxBase.sol | 86 + contracts/src/bridge/IOutbox.sol | 12 +- contracts/src/bridge/IOwnable.sol | 2 +- contracts/src/bridge/ISequencerInbox.sol | 93 +- contracts/src/bridge/Inbox.sol | 291 +- contracts/src/bridge/Messages.sol | 2 +- contracts/src/bridge/Outbox.sol | 282 +- contracts/src/bridge/SequencerInbox.sol | 593 +- .../src/challenge/IOldChallengeManager.sol | 2 +- .../challenge/IOldChallengeResultReceiver.sol | 2 +- contracts/src/challenge/OldChallengeLib.sol | 2 +- .../src/challenge/OldChallengeManager.sol | 2 +- .../src/libraries/AddressAliasHelper.sol | 2 +- .../src/libraries/AdminFallbackProxy.sol | 2 +- contracts/src/libraries/ArbitrumChecker.sol | 2 +- contracts/src/libraries/Constants.sol | 2 +- .../src/libraries/CryptographyPrimitives.sol | 2 +- contracts/src/libraries/DelegateCallAware.sol | 2 +- .../libraries/DoubleLogicUUPSUpgradeable.sol | 2 +- contracts/src/libraries/Error.sol | 48 +- contracts/src/libraries/GasRefundEnabled.sol | 52 + contracts/src/libraries/IGasRefunder.sol | 30 +- contracts/src/libraries/IReader4844.sol | 13 + contracts/src/libraries/MerkleLib.sol | 2 +- contracts/src/libraries/MessageTypes.sol | 2 +- contracts/src/mocks/BridgeStub.sol | 37 +- contracts/src/mocks/BridgeUnproxied.sol | 2 +- contracts/src/mocks/ExecutionManager.sol | 2 +- contracts/src/mocks/InboxStub.sol | 37 +- contracts/src/mocks/MockResultReceiver.sol | 59 - contracts/src/mocks/MockRollupEventInbox.sol | 6 +- contracts/src/mocks/ProxyAdminForBinding.sol | 9 + contracts/src/mocks/SequencerInboxStub.sol | 22 +- contracts/src/mocks/Simple.sol | 49 +- contracts/src/mocks/SimpleProxy.sol | 2 +- contracts/src/mocks/TestWETH9.sol | 2 +- contracts/src/mocks/UpgradeExecutorMock.sol | 82 + .../src/node-interface/NodeInterface.sol | 18 +- .../src/node-interface/NodeInterfaceDebug.sol | 2 +- contracts/src/osp/HashProofHelper.sol | 2 +- contracts/src/osp/IOneStepProofEntry.sol | 2 +- contracts/src/osp/IOneStepProver.sol | 2 +- contracts/src/osp/OneStepProofEntry.sol | 2 +- contracts/src/osp/OneStepProver0.sol | 2 +- contracts/src/osp/OneStepProverHostIo.sol | 109 +- contracts/src/osp/OneStepProverMath.sol | 2 +- contracts/src/osp/OneStepProverMemory.sol | 2 +- contracts/src/precompiles/ArbAddressTable.sol | 2 +- contracts/src/precompiles/ArbAggregator.sol | 2 +- contracts/src/precompiles/ArbBLS.sol | 2 +- contracts/src/precompiles/ArbDebug.sol | 9 +- .../src/precompiles/ArbFunctionTable.sol | 2 +- contracts/src/precompiles/ArbGasInfo.sol | 22 +- contracts/src/precompiles/ArbInfo.sol | 2 +- contracts/src/precompiles/ArbOwner.sol | 8 +- contracts/src/precompiles/ArbOwnerPublic.sol | 13 +- contracts/src/precompiles/ArbRetryableTx.sol | 2 +- contracts/src/precompiles/ArbStatistics.sol | 2 +- contracts/src/precompiles/ArbSys.sol | 4 +- contracts/src/precompiles/ArbosTest.sol | 2 +- contracts/src/rollup/AbsRollupEventInbox.sol | 71 + contracts/src/rollup/Assertion.sol | 2 +- contracts/src/rollup/AssertionState.sol | 2 +- contracts/src/rollup/BOLDUpgradeAction.sol | 24 +- contracts/src/rollup/BridgeCreator.sol | 151 +- contracts/src/rollup/Config.sol | 6 +- contracts/src/rollup/DeployHelper.sol | 149 + .../src/rollup/ERC20RollupEventInbox.sol | 26 + contracts/src/rollup/IRollupAdmin.sol | 2 +- contracts/src/rollup/IRollupCore.sol | 6 +- contracts/src/rollup/IRollupEventInbox.sol | 2 +- contracts/src/rollup/IRollupLogic.sol | 2 +- contracts/src/rollup/RollupAdminLogic.sol | 4 +- contracts/src/rollup/RollupCore.sol | 4 +- contracts/src/rollup/RollupCreator.sol | 266 +- contracts/src/rollup/RollupEventInbox.sol | 64 +- contracts/src/rollup/RollupLib.sol | 4 +- contracts/src/rollup/RollupProxy.sol | 2 +- contracts/src/rollup/RollupUserLogic.sol | 2 +- contracts/src/rollup/ValidatorUtils.sol | 246 +- contracts/src/rollup/ValidatorWallet.sol | 9 +- .../src/rollup/ValidatorWalletCreator.sol | 2 +- contracts/src/state/Deserialize.sol | 2 +- contracts/src/state/GlobalState.sol | 2 +- contracts/src/state/Instructions.sol | 2 +- contracts/src/state/Machine.sol | 2 +- contracts/src/state/MerkleProof.sol | 2 +- contracts/src/state/Module.sol | 2 +- contracts/src/state/ModuleMemory.sol | 2 +- contracts/src/state/ModuleMemoryCompact.sol | 2 +- contracts/src/state/PcArray.sol | 2 +- contracts/src/state/StackFrame.sol | 2 +- contracts/src/state/Value.sol | 2 +- contracts/src/state/ValueArray.sol | 2 +- contracts/src/state/ValueStack.sol | 2 +- contracts/src/test-helpers/BridgeTester.sol | 11 +- .../CryptographyPrimitivesTester.sol | 2 +- contracts/src/test-helpers/EthVault.sol | 20 + .../InterfaceCompatibilityTester.sol | 2 +- contracts/src/test-helpers/MessageTester.sol | 2 +- .../test-helpers/OutboxWithoutOptTester.sol | 4 +- contracts/src/test-helpers/RollupMock.sol | 8 +- contracts/src/test-helpers/TestToken.sol | 16 + .../src/test-helpers/ValueArrayTester.sol | 2 +- contracts/test/Rollup.t.sol | 107 +- contracts/test/contract/batchData.json | 3 + .../sequencerInboxForceInclude.spec.ts | 147 +- contracts/test/contract/toolkit4844.ts | 136 + .../test/contract/validatorWallet.spec.ts | 4 +- contracts/test/e2e/erc20rollup.ts | 405 + contracts/test/foundry/AbsBridge.t.sol | 522 + contracts/test/foundry/AbsInbox.t.sol | 411 + contracts/test/foundry/AbsOutbox.t.sol | 28 + contracts/test/foundry/Bridge.t.sol | 317 + contracts/test/foundry/BridgeCreator.t.sol | 255 + contracts/test/foundry/ERC20Bridge.t.sol | 404 + contracts/test/foundry/ERC20Inbox.t.sol | 661 + contracts/test/foundry/ERC20Outbox.t.sol | 180 + contracts/test/foundry/Inbox.t.sol | 637 + contracts/test/foundry/Outbox.t.sol | 117 + contracts/test/foundry/SequencerInbox.t.sol | 614 + contracts/test/foundry/util/TestUtil.sol | 33 + contracts/test/signatures/Bridge | 25 + contracts/test/signatures/BridgeCreator | 10 + contracts/test/signatures/DeployHelper | 16 + contracts/test/signatures/ERC20Bridge | 26 + contracts/test/signatures/ERC20Inbox | 22 + contracts/test/signatures/ERC20Outbox | 23 + .../test/signatures/EdgeChallengeManager | 33 + contracts/test/signatures/Inbox | 30 + contracts/test/signatures/Outbox | 22 + contracts/test/signatures/RollupAdminLogic | 67 + contracts/test/signatures/RollupCore | 41 + contracts/test/signatures/RollupCreator | 15 + contracts/test/signatures/RollupUserLogic | 57 + contracts/test/signatures/SequencerInbox | 39 + contracts/test/signatures/test-sigs.bash | 17 + .../stakingPool/AssertionStakingPool.t.sol | 61 +- contracts/test/storage/Bridge | 15 + contracts/test/storage/Bridge.dot | 27 - contracts/test/storage/ERC20Bridge | 16 + contracts/test/storage/ERC20Inbox | 12 + contracts/test/storage/ERC20Outbox | 8 + contracts/test/storage/EdgeChallengeManager | 15 + .../test/storage/EdgeChallengeManager.dot | 15 - contracts/test/storage/Inbox | 12 + contracts/test/storage/Inbox.dot | 15 - contracts/test/storage/Outbox | 8 + contracts/test/storage/Outbox.dot | 12 - contracts/test/storage/RollupAdminLogic | 32 + contracts/test/storage/RollupAdminLogic.dot | 24 - contracts/test/storage/RollupCore | 32 + contracts/test/storage/RollupCore.dot | 24 - contracts/test/storage/RollupUserLogic | 32 + contracts/test/storage/RollupUserLogic.dot | 24 - contracts/test/storage/SequencerInbox | 14 + contracts/test/storage/SequencerInbox.dot | 15 - contracts/test/storage/test.bash | 9 +- contracts/yarn.lock | 2677 ++- contracts/yul/Reader4844.yul | 39 + .../assertionStakingPoolgen.go | 4 +- solgen/go/bridgegen/bridgegen.go | 19863 ++++++++++++++-- solgen/go/challengeV2gen/challengeV2gen.go | 2 +- solgen/go/challengegen/challengegen.go | 4 +- solgen/go/librariesgen/librariesgen.go | 223 +- solgen/go/mocksgen/mocksgen.go | 4258 +++- .../go/node_interfacegen/node_interfacegen.go | 78 +- solgen/go/ospgen/ospgen.go | 14 +- solgen/go/precompilesgen/precompilesgen.go | 320 +- solgen/go/rollupgen/rollupgen.go | 5228 ++-- solgen/go/stategen/stategen.go | 26 +- solgen/go/test_helpersgen/test_helpersgen.go | 1238 +- solgen/go/yulgen/BUILD.bazel | 16 + solgen/go/yulgen/yulgen.go | 203 + solgen/main.go | 49 +- testing/endtoend/BUILD.bazel | 2 + testing/endtoend/backend/anvil_local.go | 54 +- testing/endtoend/backend/backend.go | 2 +- testing/endtoend/backend/simulated.go | 4 +- testing/endtoend/e2e_test.go | 77 +- testing/setup/BUILD.bazel | 2 + testing/setup/rollup_stack.go | 213 +- 234 files changed, 39559 insertions(+), 7470 deletions(-) create mode 100644 contracts/LICENSE.md create mode 100644 contracts/deploy/BridgeCreator.js create mode 100644 contracts/deploy/BridgeStubCreator.js create mode 100644 contracts/deploy/HashProofHelper.js create mode 100644 contracts/deploy/InboxStubCreator.js create mode 100644 contracts/deploy/OneStepProofEntryCreator.js create mode 100644 contracts/deploy/OneStepProver0Creator.js create mode 100644 contracts/deploy/OneStepProverHostIoCreator.js create mode 100644 contracts/deploy/OneStepProverMathCreator.js create mode 100644 contracts/deploy/OneStepProverMemoryCreator.js create mode 100644 contracts/deploy/SequencerInbox.js create mode 100644 contracts/deploy/SequencerInboxStubCreator.js create mode 100644 contracts/deploy/ValueArrayTesterCreator.js create mode 100644 contracts/script/upgrade/deploy4844.ts create mode 100644 contracts/scripts/config.ts.example create mode 100644 contracts/scripts/createERC20Rollup.ts create mode 100644 contracts/scripts/createEthRollup.ts create mode 100644 contracts/scripts/deployment.ts create mode 100644 contracts/scripts/deploymentUtils.ts create mode 100644 contracts/scripts/genNetwork.ts create mode 100644 contracts/scripts/rollupCreation.ts create mode 100644 contracts/scripts/testSetup.ts create mode 100644 contracts/src/bridge/AbsBridge.sol create mode 100644 contracts/src/bridge/AbsInbox.sol create mode 100644 contracts/src/bridge/AbsOutbox.sol create mode 100644 contracts/src/bridge/ERC20Bridge.sol create mode 100644 contracts/src/bridge/ERC20Inbox.sol create mode 100644 contracts/src/bridge/ERC20Outbox.sol create mode 100644 contracts/src/bridge/GasRefunder.sol create mode 100644 contracts/src/bridge/IERC20Bridge.sol create mode 100644 contracts/src/bridge/IERC20Inbox.sol create mode 100644 contracts/src/bridge/IEthBridge.sol create mode 100644 contracts/src/bridge/IInboxBase.sol create mode 100644 contracts/src/libraries/GasRefundEnabled.sol create mode 100644 contracts/src/libraries/IReader4844.sol delete mode 100644 contracts/src/mocks/MockResultReceiver.sol create mode 100644 contracts/src/mocks/ProxyAdminForBinding.sol create mode 100644 contracts/src/mocks/UpgradeExecutorMock.sol create mode 100644 contracts/src/rollup/AbsRollupEventInbox.sol create mode 100644 contracts/src/rollup/DeployHelper.sol create mode 100644 contracts/src/rollup/ERC20RollupEventInbox.sol create mode 100644 contracts/src/test-helpers/EthVault.sol create mode 100644 contracts/src/test-helpers/TestToken.sol create mode 100644 contracts/test/contract/batchData.json create mode 100644 contracts/test/contract/toolkit4844.ts create mode 100644 contracts/test/e2e/erc20rollup.ts create mode 100644 contracts/test/foundry/AbsBridge.t.sol create mode 100644 contracts/test/foundry/AbsInbox.t.sol create mode 100644 contracts/test/foundry/AbsOutbox.t.sol create mode 100644 contracts/test/foundry/Bridge.t.sol create mode 100644 contracts/test/foundry/BridgeCreator.t.sol create mode 100644 contracts/test/foundry/ERC20Bridge.t.sol create mode 100644 contracts/test/foundry/ERC20Inbox.t.sol create mode 100644 contracts/test/foundry/ERC20Outbox.t.sol create mode 100644 contracts/test/foundry/Inbox.t.sol create mode 100644 contracts/test/foundry/Outbox.t.sol create mode 100644 contracts/test/foundry/SequencerInbox.t.sol create mode 100644 contracts/test/foundry/util/TestUtil.sol create mode 100644 contracts/test/signatures/Bridge create mode 100644 contracts/test/signatures/BridgeCreator create mode 100644 contracts/test/signatures/DeployHelper create mode 100644 contracts/test/signatures/ERC20Bridge create mode 100644 contracts/test/signatures/ERC20Inbox create mode 100644 contracts/test/signatures/ERC20Outbox create mode 100644 contracts/test/signatures/EdgeChallengeManager create mode 100644 contracts/test/signatures/Inbox create mode 100644 contracts/test/signatures/Outbox create mode 100644 contracts/test/signatures/RollupAdminLogic create mode 100644 contracts/test/signatures/RollupCore create mode 100644 contracts/test/signatures/RollupCreator create mode 100644 contracts/test/signatures/RollupUserLogic create mode 100644 contracts/test/signatures/SequencerInbox create mode 100755 contracts/test/signatures/test-sigs.bash create mode 100644 contracts/test/storage/Bridge delete mode 100644 contracts/test/storage/Bridge.dot create mode 100644 contracts/test/storage/ERC20Bridge create mode 100644 contracts/test/storage/ERC20Inbox create mode 100644 contracts/test/storage/ERC20Outbox create mode 100644 contracts/test/storage/EdgeChallengeManager delete mode 100644 contracts/test/storage/EdgeChallengeManager.dot create mode 100644 contracts/test/storage/Inbox delete mode 100644 contracts/test/storage/Inbox.dot create mode 100644 contracts/test/storage/Outbox delete mode 100644 contracts/test/storage/Outbox.dot create mode 100644 contracts/test/storage/RollupAdminLogic delete mode 100644 contracts/test/storage/RollupAdminLogic.dot create mode 100644 contracts/test/storage/RollupCore delete mode 100644 contracts/test/storage/RollupCore.dot create mode 100644 contracts/test/storage/RollupUserLogic delete mode 100644 contracts/test/storage/RollupUserLogic.dot create mode 100644 contracts/test/storage/SequencerInbox delete mode 100644 contracts/test/storage/SequencerInbox.dot create mode 100644 contracts/yul/Reader4844.yul create mode 100644 solgen/go/yulgen/BUILD.bazel create mode 100644 solgen/go/yulgen/yulgen.go diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index db97b4915..a3f1d6cda 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -165,6 +165,9 @@ jobs: - name: Install packages run: yarn + - name: Build + run: yarn build:all + - name: Run foundry tests run: forge test @@ -217,6 +220,11 @@ jobs: with: no-simple: false + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + - name: Setup node/yarn uses: actions/setup-node@v3 with: @@ -228,7 +236,7 @@ jobs: run: yarn - name: Compile contracts - run: yarn build + run: yarn build:all - name: Copy .env run: | diff --git a/.gitignore b/.gitignore index ab0b0921a..a40f74bad 100644 --- a/.gitignore +++ b/.gitignore @@ -25,9 +25,11 @@ contracts/cache contracts/out contracts/formatter.sh contracts/build -contracts/test/storage/*-old.dot +contracts/test/storage/*-old +contracts/test/signatures/*-old contracts/coverage contracts/lcov.info +contracts/forge-cache/ .DS_Store .env \ No newline at end of file diff --git a/assertions/BUILD.bazel b/assertions/BUILD.bazel index 1660aa784..d726e99bd 100644 --- a/assertions/BUILD.bazel +++ b/assertions/BUILD.bazel @@ -46,13 +46,16 @@ go_test( "//challenge-manager", "//challenge-manager/types", "//containers/threadsafe", + "//solgen/go/bridgegen", "//solgen/go/mocksgen", "//solgen/go/rollupgen", "//testing", "//testing/mocks/state-provider", "//testing/setup:setup_lib", "//util", + "@com_github_ethereum_go_ethereum//accounts/abi", "@com_github_ethereum_go_ethereum//accounts/abi/bind", + "@com_github_ethereum_go_ethereum//accounts/abi/bind/backends", "@com_github_ethereum_go_ethereum//common", "@com_github_stretchr_testify//require", ], diff --git a/assertions/manager_test.go b/assertions/manager_test.go index 7505de0fc..b8e87604e 100644 --- a/assertions/manager_test.go +++ b/assertions/manager_test.go @@ -6,6 +6,7 @@ package assertions_test import ( "context" "math/big" + "strings" "testing" "time" @@ -13,20 +14,23 @@ import ( protocol "github.com/OffchainLabs/bold/chain-abstraction" challengemanager "github.com/OffchainLabs/bold/challenge-manager" "github.com/OffchainLabs/bold/challenge-manager/types" + "github.com/OffchainLabs/bold/solgen/go/bridgegen" "github.com/OffchainLabs/bold/solgen/go/mocksgen" - "github.com/OffchainLabs/bold/solgen/go/rollupgen" challenge_testing "github.com/OffchainLabs/bold/testing" statemanager "github.com/OffchainLabs/bold/testing/mocks/state-provider" "github.com/OffchainLabs/bold/testing/setup" "github.com/OffchainLabs/bold/util" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" ) func TestSkipsProcessingAssertionFromEvilFork(t *testing.T) { setup, err := setup.ChainsWithEdgeChallengeManager( - setup.WithMockBridge(), setup.WithMockOneStepProver(), + setup.WithMockBridge(), setup.WithChallengeTestingOpts( challenge_testing.WithLayerZeroHeights(&protocol.LayerZeroHeights{ BlockChallengeHeight: 64, @@ -40,12 +44,6 @@ func TestSkipsProcessingAssertionFromEvilFork(t *testing.T) { bridgeBindings, err := mocksgen.NewBridgeStub(setup.Addrs.Bridge, setup.Backend) require.NoError(t, err) - rollupAdminBindings, err := rollupgen.NewRollupAdminLogic(setup.Addrs.Rollup, setup.Backend) - require.NoError(t, err) - _, err = rollupAdminBindings.SetMinimumAssertionPeriod(setup.Accounts[0].TxOpts, big.NewInt(1)) - require.NoError(t, err) - setup.Backend.Commit() - msgCount, err := bridgeBindings.SequencerMessageCount(util.GetSafeCallOpts(&bind.CallOpts{})) require.NoError(t, err) require.Equal(t, uint64(1), msgCount.Uint64()) @@ -133,9 +131,19 @@ func TestSkipsProcessingAssertionFromEvilFork(t *testing.T) { // We have bob post an assertion at batch 2. dataHash := [32]byte{1} - _, err = bridgeBindings.EnqueueSequencerMessage(setup.Accounts[0].TxOpts, dataHash, big.NewInt(1), big.NewInt(1), big.NewInt(2)) - require.NoError(t, err) - setup.Backend.Commit() + enqueueSequencerMessageAsExecutor( + t, + setup.Accounts[0].TxOpts, + setup.Addrs.UpgradeExecutor, + setup.Backend, + setup.Addrs.Bridge, + seqMessage{ + dataHash: dataHash, + afterDelayedMessagesRead: big.NewInt(1), + prevMessageCount: big.NewInt(1), + newMessageCount: big.NewInt(2), + }, + ) genesisState, err := bobStateManager.ExecutionStateAfterPreviousState(ctx, 0, nil, 1<<26) require.NoError(t, err) @@ -165,7 +173,6 @@ func TestComplexAssertionForkScenario(t *testing.T) { // and then we have another validator that disagrees with 4, so Charlie // should open a 4' that branches off 3. setup, err := setup.ChainsWithEdgeChallengeManager( - setup.WithMockBridge(), setup.WithMockOneStepProver(), setup.WithChallengeTestingOpts( challenge_testing.WithLayerZeroHeights(&protocol.LayerZeroHeights{ @@ -180,12 +187,6 @@ func TestComplexAssertionForkScenario(t *testing.T) { bridgeBindings, err := mocksgen.NewBridgeStub(setup.Addrs.Bridge, setup.Backend) require.NoError(t, err) - rollupAdminBindings, err := rollupgen.NewRollupAdminLogic(setup.Addrs.Rollup, setup.Backend) - require.NoError(t, err) - _, err = rollupAdminBindings.SetMinimumAssertionPeriod(setup.Accounts[0].TxOpts, big.NewInt(1)) - require.NoError(t, err) - setup.Backend.Commit() - msgCount, err := bridgeBindings.SequencerMessageCount(util.GetSafeCallOpts(&bind.CallOpts{})) require.NoError(t, err) require.Equal(t, uint64(1), msgCount.Uint64()) @@ -246,9 +247,19 @@ func TestComplexAssertionForkScenario(t *testing.T) { count := int64(1) for batch := 2; batch <= 4; batch++ { dataHash := [32]byte{1} - _, err = bridgeBindings.EnqueueSequencerMessage(setup.Accounts[0].TxOpts, dataHash, big.NewInt(1), big.NewInt(count), big.NewInt(count+1)) - require.NoError(t, err) - setup.Backend.Commit() + enqueueSequencerMessageAsExecutor( + t, + setup.Accounts[0].TxOpts, + setup.Addrs.UpgradeExecutor, + setup.Backend, + setup.Addrs.Bridge, + seqMessage{ + dataHash: dataHash, + afterDelayedMessagesRead: big.NewInt(1), + prevMessageCount: big.NewInt(count), + newMessageCount: big.NewInt(count + 1), + }, + ) count += 1 prevInfo, err2 := aliceChain.ReadAssertionCreationInfo(ctx, aliceAssertion.Id()) @@ -329,3 +340,41 @@ func TestComplexAssertionForkScenario(t *testing.T) { // But blockhash should not match. require.NotEqual(t, charliePostState.GlobalState.BlockHash, alicePostState.GlobalState.BlockHash) } + +type seqMessage struct { + dataHash common.Hash + afterDelayedMessagesRead *big.Int + prevMessageCount *big.Int + newMessageCount *big.Int +} + +func enqueueSequencerMessageAsExecutor( + t *testing.T, + opts *bind.TransactOpts, + executor common.Address, + backend *backends.SimulatedBackend, + bridge common.Address, + msg seqMessage, +) { + execBindings, err := mocksgen.NewUpgradeExecutorMock(executor, backend) + require.NoError(t, err) + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.AbsBridgeABI)) + require.NoError(t, err) + data, err := seqInboxABI.Pack( + "setSequencerInbox", + executor, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, data) + require.NoError(t, err) + backend.Commit() + + data, err = seqInboxABI.Pack( + "enqueueSequencerMessage", + msg.dataHash, msg.afterDelayedMessagesRead, msg.prevMessageCount, msg.newMessageCount, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, data) + require.NoError(t, err) + backend.Commit() +} diff --git a/assertions/poster_test.go b/assertions/poster_test.go index 624f45ed4..cbc544022 100644 --- a/assertions/poster_test.go +++ b/assertions/poster_test.go @@ -5,7 +5,6 @@ package assertions_test import ( "context" - "math/big" "testing" "time" @@ -14,7 +13,6 @@ import ( challengemanager "github.com/OffchainLabs/bold/challenge-manager" "github.com/OffchainLabs/bold/challenge-manager/types" "github.com/OffchainLabs/bold/solgen/go/mocksgen" - "github.com/OffchainLabs/bold/solgen/go/rollupgen" challenge_testing "github.com/OffchainLabs/bold/testing" statemanager "github.com/OffchainLabs/bold/testing/mocks/state-provider" "github.com/OffchainLabs/bold/testing/setup" @@ -24,8 +22,9 @@ import ( ) func TestPostAssertion(t *testing.T) { + ctx := context.Background() setup, err := setup.ChainsWithEdgeChallengeManager( - setup.WithMockBridge(), + // setup.WithMockBridge(), setup.WithMockOneStepProver(), setup.WithChallengeTestingOpts( challenge_testing.WithLayerZeroHeights(&protocol.LayerZeroHeights{ @@ -40,20 +39,12 @@ func TestPostAssertion(t *testing.T) { bridgeBindings, err := mocksgen.NewBridgeStub(setup.Addrs.Bridge, setup.Backend) require.NoError(t, err) - rollupAdminBindings, err := rollupgen.NewRollupAdminLogic(setup.Addrs.Rollup, setup.Backend) - require.NoError(t, err) - _, err = rollupAdminBindings.SetMinimumAssertionPeriod(setup.Accounts[0].TxOpts, big.NewInt(1)) - require.NoError(t, err) - setup.Backend.Commit() - msgCount, err := bridgeBindings.SequencerMessageCount(util.GetSafeCallOpts(&bind.CallOpts{})) require.NoError(t, err) require.Equal(t, uint64(1), msgCount.Uint64()) aliceChain := setup.Chains[0] - ctx := context.Background() - stateManagerOpts := setup.StateManagerOpts stateManagerOpts = append( stateManagerOpts, diff --git a/assertions/sync_test.go b/assertions/sync_test.go index c2b9f2398..1ee309e09 100644 --- a/assertions/sync_test.go +++ b/assertions/sync_test.go @@ -32,7 +32,6 @@ func Test_extractAssertionFromEvent(t *testing.T) { }) setup, err := setup.ChainsWithEdgeChallengeManager( - setup.WithMockBridge(), setup.WithMockOneStepProver(), setup.WithChallengeTestingOpts( challenge_testing.WithLayerZeroHeights(&protocol.LayerZeroHeights{ @@ -47,12 +46,6 @@ func Test_extractAssertionFromEvent(t *testing.T) { bridgeBindings, err := mocksgen.NewBridgeStub(setup.Addrs.Bridge, setup.Backend) require.NoError(t, err) - rollupAdminBindings, err := rollupgen.NewRollupAdminLogic(setup.Addrs.Rollup, setup.Backend) - require.NoError(t, err) - _, err = rollupAdminBindings.SetMinimumAssertionPeriod(setup.Accounts[0].TxOpts, big.NewInt(1)) - require.NoError(t, err) - setup.Backend.Commit() - msgCount, err := bridgeBindings.SequencerMessageCount(util.GetSafeCallOpts(&bind.CallOpts{})) require.NoError(t, err) require.Equal(t, uint64(1), msgCount.Uint64()) diff --git a/chain-abstraction/sol-implementation/BUILD.bazel b/chain-abstraction/sol-implementation/BUILD.bazel index d9e4741f7..ea1ce53f3 100644 --- a/chain-abstraction/sol-implementation/BUILD.bazel +++ b/chain-abstraction/sol-implementation/BUILD.bazel @@ -53,6 +53,7 @@ go_test( "//chain-abstraction:protocol", "//containers/option", "//layer2-state-provider", + "//solgen/go/bridgegen", "//solgen/go/mocksgen", "//solgen/go/rollupgen", "//state-commitments/history", @@ -61,6 +62,7 @@ go_test( "//testing/setup:setup_lib", "//util", "@com_github_ethereum_go_ethereum//:go-ethereum", + "@com_github_ethereum_go_ethereum//accounts/abi", "@com_github_ethereum_go_ethereum//accounts/abi/bind", "@com_github_ethereum_go_ethereum//accounts/abi/bind/backends", "@com_github_ethereum_go_ethereum//common", diff --git a/chain-abstraction/sol-implementation/assertion_chain_test.go b/chain-abstraction/sol-implementation/assertion_chain_test.go index 22f51a46f..8afed6669 100644 --- a/chain-abstraction/sol-implementation/assertion_chain_test.go +++ b/chain-abstraction/sol-implementation/assertion_chain_test.go @@ -6,18 +6,21 @@ package solimpl_test import ( "context" "math/big" + "strings" "testing" protocol "github.com/OffchainLabs/bold/chain-abstraction" solimpl "github.com/OffchainLabs/bold/chain-abstraction/sol-implementation" "github.com/OffchainLabs/bold/containers/option" l2stateprovider "github.com/OffchainLabs/bold/layer2-state-provider" + "github.com/OffchainLabs/bold/solgen/go/bridgegen" "github.com/OffchainLabs/bold/solgen/go/mocksgen" "github.com/OffchainLabs/bold/solgen/go/rollupgen" challenge_testing "github.com/OffchainLabs/bold/testing" "github.com/OffchainLabs/bold/testing/setup" "github.com/OffchainLabs/bold/util" "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" @@ -82,7 +85,7 @@ func TestNewStakeOnNewAssertion(t *testing.T) { func TestStakeOnNewAssertion(t *testing.T) { ctx := context.Background() - cfg, err := setup.ChainsWithEdgeChallengeManager(setup.WithMockBridge()) + cfg, err := setup.ChainsWithEdgeChallengeManager() require.NoError(t, err) chain := cfg.Chains[0] backend := cfg.Backend @@ -122,16 +125,18 @@ func TestStakeOnNewAssertion(t *testing.T) { MachineStatus: protocol.MachineStatusFinished, } - account := cfg.Accounts[1] - numNewMessages := uint64(1) - submitBatch( + enqueueSequencerMessageAsExecutor( t, - ctx, - account.TxOpts, - cfg.Addrs.Bridge, + cfg.Accounts[0].TxOpts, + cfg.Addrs.UpgradeExecutor, cfg.Backend, - common.BytesToHash([]byte("foo")), // Datahash, can be junk data. - numNewMessages, // Total number of messages to include in the batch. + cfg.Addrs.Bridge, + seqMessage{ + dataHash: common.BytesToHash([]byte("foo")), + afterDelayedMessagesRead: big.NewInt(1), + prevMessageCount: big.NewInt(1), + newMessageCount: big.NewInt(2), + }, ) for i := uint64(0); i < 100; i++ { @@ -149,6 +154,44 @@ func TestStakeOnNewAssertion(t *testing.T) { require.Equal(t, postState, gotPostState) } +type seqMessage struct { + dataHash common.Hash + afterDelayedMessagesRead *big.Int + prevMessageCount *big.Int + newMessageCount *big.Int +} + +func enqueueSequencerMessageAsExecutor( + t *testing.T, + opts *bind.TransactOpts, + executor common.Address, + backend *backends.SimulatedBackend, + bridge common.Address, + msg seqMessage, +) { + execBindings, err := mocksgen.NewUpgradeExecutorMock(executor, backend) + require.NoError(t, err) + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.AbsBridgeABI)) + require.NoError(t, err) + data, err := seqInboxABI.Pack( + "setSequencerInbox", + executor, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, data) + require.NoError(t, err) + backend.Commit() + + data, err = seqInboxABI.Pack( + "enqueueSequencerMessage", + msg.dataHash, msg.afterDelayedMessagesRead, msg.prevMessageCount, msg.newMessageCount, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, data) + require.NoError(t, err) + backend.Commit() +} + func TestAssertionUnrivaledBlocks(t *testing.T) { ctx := context.Background() cfg, err := setup.ChainsWithEdgeChallengeManager() diff --git a/chain-abstraction/sol-implementation/edge_challenge_manager_test.go b/chain-abstraction/sol-implementation/edge_challenge_manager_test.go index c6a85a537..65c924bce 100644 --- a/chain-abstraction/sol-implementation/edge_challenge_manager_test.go +++ b/chain-abstraction/sol-implementation/edge_challenge_manager_test.go @@ -5,20 +5,23 @@ package solimpl_test import ( "context" + "strings" "testing" protocol "github.com/OffchainLabs/bold/chain-abstraction" "github.com/OffchainLabs/bold/containers/option" l2stateprovider "github.com/OffchainLabs/bold/layer2-state-provider" + "github.com/OffchainLabs/bold/solgen/go/mocksgen" "github.com/OffchainLabs/bold/solgen/go/rollupgen" commitments "github.com/OffchainLabs/bold/state-commitments/history" challenge_testing "github.com/OffchainLabs/bold/testing" stateprovider "github.com/OffchainLabs/bold/testing/mocks/state-provider" "github.com/OffchainLabs/bold/testing/setup" "github.com/OffchainLabs/bold/util" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/require" ) @@ -578,6 +581,28 @@ func TestEdgeChallengeManager_ConfirmByTime_MoreComplexScenario(t *testing.T) { }) } +func upgradeWasmModuleRoot( + t *testing.T, + opts *bind.TransactOpts, + executor common.Address, + backend *backends.SimulatedBackend, + rollup common.Address, + wasmModuleRoot common.Hash, +) { + execBindings, err := mocksgen.NewUpgradeExecutorMock(executor, backend) + require.NoError(t, err) + abiItem, err := abi.JSON(strings.NewReader(rollupgen.RollupAdminLogicABI)) + require.NoError(t, err) + data, err := abiItem.Pack( + "setWasmModuleRoot", + wasmModuleRoot, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, rollup, data) + require.NoError(t, err) + backend.Commit() +} + func TestUpgradingConfigMidChallenge(t *testing.T) { ctx := context.Background() scenario := setupOneStepProofScenario(t) @@ -591,21 +616,14 @@ func TestUpgradingConfigMidChallenge(t *testing.T) { require.NoError(t, err) newWasmModuleRoot := common.BytesToHash([]byte("nyannyannyan")) - tx, err := adminLogic.SetWasmModuleRoot(adminAccount, newWasmModuleRoot) - require.NoError(t, err) - err = challenge_testing.WaitForTx(ctx, backend, tx) - require.NoError(t, err) - receipt, err := backend.TransactionReceipt(ctx, tx.Hash()) - require.NoError(t, err) - require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status) - - tx, err = adminLogic.SetConfirmPeriodBlocks(adminAccount, uint64(329094)) - require.NoError(t, err) - err = challenge_testing.WaitForTx(ctx, backend, tx) - require.NoError(t, err) - receipt, err = backend.TransactionReceipt(ctx, tx.Hash()) - require.NoError(t, err) - require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status) + upgradeWasmModuleRoot( + t, + adminAccount, + scenario.topLevelFork.Addrs.UpgradeExecutor, + backend, + rollupAddr, + newWasmModuleRoot, + ) // We confirm the edge by one-step-proof. honestEdge := scenario.smallStepHonestEdge diff --git a/contracts/LICENSE.md b/contracts/LICENSE.md new file mode 100644 index 000000000..a4e5a7f61 --- /dev/null +++ b/contracts/LICENSE.md @@ -0,0 +1,116 @@ +Business Source License 1.1 + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +"Business Source License" is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Parameters + +Licensor: Offchain Labs + +Licensed Work: Arbitrum Nitro Contracts + The Licensed Work is (c) 2021-2024 Offchain Labs + +Additional Use Grant: You may use the Licensed Work in a production environment solely + to provide a point of interface to permit end users or applications + utilizing the Covered Arbitrum Chains to interact and query the + state of a Covered Arbitrum Chain, including without limitation + validating the correctness of the posted chain state, or to deploy + and operate (x) a blockchain that settles to a Covered Arbitrum Chain + or (y) a blockchain in accordance with, and subject to, the [Arbitrum + Expansion Program Term of Use](https://docs.arbitrum.foundation/assets/files/Arbitrum%20Expansion%20Program%20Jan182024-4f08b0c2cb476a55dc153380fa3e64b0.pdf). For purposes of this + Additional Use Grant, the "Covered Arbitrum Chains" are + (a) Arbitrum One (chainid:42161), Arbitrum Nova (chainid:42170), + rbitrum Rinkeby testnet/Rinkarby (chainid:421611),Arbitrum Nitro + Goerli testnet (chainid:421613), and Arbitrum Sepolia Testnet + (chainid:421614); (b) any future blockchains authorized to be + designated as Covered Arbitrum Chains by the decentralized autonomous + organization governing the Arbitrum network; and (c) any “Layer 3” + Arbitrum-based blockchain that is built on and settles to another + Covered Arbitrum Chain. + + + +Change Date: Dec 31, 2028 + +Change License: Apache License Version 2.0 + +----------------------------------------------------------------------------- + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark "Business Source License", +as long as you comply with the Covenants of Licensor below. + +----------------------------------------------------------------------------- + +Covenants of Licensor + +In consideration of the right to use this License’s text and the "Business +Source License" name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where "compatible" means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text "None". + +3. To specify a Change Date. + +4. Not to modify this License in any other way. + +----------------------------------------------------------------------------- + +Notice + +The Business Source License (this document, or the "License") is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. diff --git a/contracts/deploy/BridgeCreator.js b/contracts/deploy/BridgeCreator.js new file mode 100644 index 000000000..e2d548d80 --- /dev/null +++ b/contracts/deploy/BridgeCreator.js @@ -0,0 +1,10 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('Bridge', { from: deployer, args: [] }) +} + +module.exports.tags = ['Bridge'] +module.exports.dependencies = [] diff --git a/contracts/deploy/BridgeStubCreator.js b/contracts/deploy/BridgeStubCreator.js new file mode 100644 index 000000000..9fe34dde4 --- /dev/null +++ b/contracts/deploy/BridgeStubCreator.js @@ -0,0 +1,10 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('BridgeStub', { from: deployer, args: [] }) +} + +module.exports.tags = ['BridgeStub', 'test'] +module.exports.dependencies = [] diff --git a/contracts/deploy/HashProofHelper.js b/contracts/deploy/HashProofHelper.js new file mode 100644 index 000000000..e027eb62f --- /dev/null +++ b/contracts/deploy/HashProofHelper.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('HashProofHelper', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['HashProofHelper', 'test', 'live'] +module.exports.dependencies = [] diff --git a/contracts/deploy/InboxStubCreator.js b/contracts/deploy/InboxStubCreator.js new file mode 100644 index 000000000..b3a1f6616 --- /dev/null +++ b/contracts/deploy/InboxStubCreator.js @@ -0,0 +1,21 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + const inboxDeployResult = await deploy('InboxStub', { + from: deployer, + args: [], + }) + + const bridge = await ethers.getContract('BridgeStub') + const inbox = await ethers.getContract('InboxStub') + + if (inboxDeployResult.newlyDeployed) { + await bridge.setDelayedInbox(inbox.address, true) + await inbox.initialize(bridge.address, ethers.constants.AddressZero) + } +} + +module.exports.tags = ['InboxStub', 'test'] +module.exports.dependencies = ['BridgeStub'] diff --git a/contracts/deploy/OneStepProofEntryCreator.js b/contracts/deploy/OneStepProofEntryCreator.js new file mode 100644 index 000000000..baef8fef4 --- /dev/null +++ b/contracts/deploy/OneStepProofEntryCreator.js @@ -0,0 +1,23 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('OneStepProofEntry', { + from: deployer, + args: [ + (await deployments.get('OneStepProver0')).address, + (await deployments.get('OneStepProverMemory')).address, + (await deployments.get('OneStepProverMath')).address, + (await deployments.get('OneStepProverHostIo')).address, + ], + }) +} + +module.exports.tags = ['OneStepProofEntry'] +module.exports.dependencies = [ + 'OneStepProver0', + 'OneStepProverMemory', + 'OneStepProverMath', + 'OneStepProverHostIo', +] diff --git a/contracts/deploy/OneStepProver0Creator.js b/contracts/deploy/OneStepProver0Creator.js new file mode 100644 index 000000000..da1206d9f --- /dev/null +++ b/contracts/deploy/OneStepProver0Creator.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('OneStepProver0', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['OneStepProver0', 'live', 'test'] +module.exports.dependencies = [] diff --git a/contracts/deploy/OneStepProverHostIoCreator.js b/contracts/deploy/OneStepProverHostIoCreator.js new file mode 100644 index 000000000..b734af2a2 --- /dev/null +++ b/contracts/deploy/OneStepProverHostIoCreator.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('OneStepProverHostIo', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['OneStepProverHostIo'] +module.exports.dependencies = [] diff --git a/contracts/deploy/OneStepProverMathCreator.js b/contracts/deploy/OneStepProverMathCreator.js new file mode 100644 index 000000000..d2aa9788f --- /dev/null +++ b/contracts/deploy/OneStepProverMathCreator.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('OneStepProverMath', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['OneStepProverMath', 'live', 'test'] +module.exports.dependencies = [] diff --git a/contracts/deploy/OneStepProverMemoryCreator.js b/contracts/deploy/OneStepProverMemoryCreator.js new file mode 100644 index 000000000..51ec1f151 --- /dev/null +++ b/contracts/deploy/OneStepProverMemoryCreator.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('OneStepProverMemory', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['OneStepProverMemory', 'live', 'test'] +module.exports.dependencies = [] diff --git a/contracts/deploy/SequencerInbox.js b/contracts/deploy/SequencerInbox.js new file mode 100644 index 000000000..d90135a9c --- /dev/null +++ b/contracts/deploy/SequencerInbox.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + const blobBasefeeReader = await ethers.getContract('BlobBasefeeReader') + const dataHashReader = await ethers.getContract('DataHashReader') + + await deploy('SequencerInbox', { from: deployer, args: [117964] }) +} + +module.exports.tags = ['SequencerInbox'] +module.exports.dependencies = [] diff --git a/contracts/deploy/SequencerInboxStubCreator.js b/contracts/deploy/SequencerInboxStubCreator.js new file mode 100644 index 000000000..e61a227ca --- /dev/null +++ b/contracts/deploy/SequencerInboxStubCreator.js @@ -0,0 +1,32 @@ +import { Toolkit4844 } from '../test/contract/toolkit4844' + +module.exports = async hre => { + const { deployments, getSigners, getNamedAccounts, ethers } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + const bridge = await ethers.getContract('BridgeStub') + const reader4844 = await Toolkit4844.deployReader4844( + await ethers.getSigner(deployer) + ) + const maxTime = { + delayBlocks: 10000, + futureBlocks: 10000, + delaySeconds: 10000, + futureSeconds: 10000, + } + await deploy('SequencerInboxStub', { + from: deployer, + args: [ + bridge.address, + deployer, + maxTime, + 117964, + reader4844.address, + false, + ], + }) +} + +module.exports.tags = ['SequencerInboxStub', 'test'] +module.exports.dependencies = ['BridgeStub'] diff --git a/contracts/deploy/ValueArrayTesterCreator.js b/contracts/deploy/ValueArrayTesterCreator.js new file mode 100644 index 000000000..f229af0c3 --- /dev/null +++ b/contracts/deploy/ValueArrayTesterCreator.js @@ -0,0 +1,13 @@ +module.exports = async hre => { + const { deployments, getNamedAccounts } = hre + const { deploy } = deployments + const { deployer } = await getNamedAccounts() + + await deploy('ValueArrayTester', { + from: deployer, + args: [], + }) +} + +module.exports.tags = ['ValueArrayTester', 'test'] +module.exports.dependencies = [] diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 68b35c498..f776a61e8 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -1,8 +1,17 @@ [profile.default] src = 'src' out = 'out' -libs = ['lib'] -solc = '0.8.17' +libs = ['node_modules', 'lib'] +cache_path = 'forge-cache/sol' optimizer = true optimizer_runs = 2000 +via_ir = false +solc_version = '0.8.17' + +[profile.yul] +src = 'yul' +out = 'out/yul' +libs = ['node_modules', 'lib'] +cache_path = 'forge-cache/yul' + # See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/contracts/package.json b/contracts/package.json index 48c588d73..ebe66e32b 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -1,25 +1,30 @@ { - "name": "@arbitrum/nitro-contracts", - "version": "1.0.0", - "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", + "name": "@arbitrum/bold-contracts", + "version": "0.0.1", + "description": "Layer 2 precompiles and rollup for Arbitrum Nitro with BOLD", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", "repository": { "type": "git", - "url": "git+https://github.com/offchainlabs/nitro.git", - "directory": "contracts" + "url": "git+https://github.com/offchainlabs/bold.git" }, "files": [ "src/", - "scripts/build.bash", - "hardhat.prod-config.js" + "build/contracts/src", + "build/contracts/@openzeppelin", + "out/yul/Reader4844.yul/Reader4844.json" ], "bugs": { - "url": "https://github.com/offchainlabs/nitro/issues" + "url": "https://github.com/offchainlabs/bold/issues" }, "scripts": { + "prepublishOnly": "hardhat clean && forge clean && hardhat compile && yarn build:forge:yul", "coverage": "forge coverage --report lcov --ir-minimum && lcov --remove lcov.info 'node_modules/*' 'test/*' 'script/*' 'src/test-helpers/*' 'challenge/*' --ignore-errors unused -o lcov.info && genhtml lcov.info --branch-coverage --output-dir coverage", - "build": "./scripts/build.bash", + "build:all": "yarn build && yarn build:forge", + "build": "hardhat compile", + "build:forge:sol": "forge build --skip *.yul", + "build:forge:yul": "FOUNDRY_PROFILE=yul forge build --skip *.sol", + "build:forge": "yarn build:forge:sol && yarn build:forge:yul", "contract:size": "STRICT=true hardhat size-contracts", "lint:test": "eslint ./test", "solhint": "solhint -f table src/**/*.sol", @@ -27,25 +32,35 @@ "format": "prettier './**/*.{js,json,md,ts,yml,sol}' --write && yarn run lint:test --fix", "build:0.6": "INTERFACE_TESTER_SOLC_VERSION=0.6.9 yarn run build", "build:0.7": "INTERFACE_TESTER_SOLC_VERSION=0.7.0 yarn run build", + "test": "DISABLE_GAS_REPORTER=true hardhat --network hardhat test test/contract/*.spec.ts", + "test:4844": "DISABLE_GAS_REPORTER=true hardhat --network hardhat test test/contract/*.spec.4844.ts", "test:compatibility": "yarn run build:0.6 && yarn run build:0.7", "test:storage": "./test/storage/test.bash", + "test:signatures": "./test/signatures/test-sigs.bash", + "test:e2e": "hardhat test test/e2e/*.ts", "postinstall": "patch-package", + "deploy-factory": "hardhat run scripts/deployment.ts", + "deploy-eth-rollup": "hardhat run scripts/createEthRollup.ts", + "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts", "script:bold-prepare": "hardhat run ./scripts/prepareBoldUpgrade.ts", "script:bold-populate-lookup": "hardhat run ./scripts/populateLookup.ts", "script:bold-local-execute": "hardhat run ./scripts/testLocalExecuteBoldUpgrade.ts", "script:bold-verify": "hardhat run ./scripts/testVerifyBoldUpgrade.ts" }, "dependencies": { + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.7.3", "@openzeppelin/contracts-upgradeable": "4.7.3", - "dotenv": "^16.3.1", - "hardhat": "^2.6.6" + "patch-package": "^6.4.7" }, "private": false, "devDependencies": { + "@arbitrum/sdk": "^3.1.3", + "@ethersproject/providers": "^5.7.2", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.1", + "@tovarishfin/hardhat-yul": "^3.0.5", "@typechain/ethers-v5": "^10.0.0", "@typechain/hardhat": "^6.0.0", "@types/chai": "^4.3.0", @@ -55,28 +70,27 @@ "@typescript-eslint/eslint-plugin-tslint": "^5.27.1", "@typescript-eslint/parser": "^5.14.0", "chai": "^4.3.4", + "dotenv": "^16.3.1", "eslint": "^8.23.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mocha": "^9.0.0", "eslint-plugin-prettier": "^4.0.0", "ethereum-waffle": "^3.4.0", "ethers": "^5.5.2", + "hardhat": "^2.17.2", + "hardhat-deploy": "^0.11.37", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-ignore-warnings": "^0.2.9", "hardhat-contract-sizer": "^2.10.0", - "hardhat-deploy": "^0.11.4", - "hardhat-gas-reporter": "^1.0.8", - "patch-package": "^6.4.7", "postinstall-postinstall": "^2.1.0", "prettier": "^2.5.1", "prettier-plugin-solidity": "^1.0.0-beta.19", "solhint": "^3.3.7", "solhint-plugin-prettier": "^0.0.5", - "solidity-coverage": "^0.7.20", + "solidity-coverage": "^0.8.4", "ts-node": "^10.4.0", "tslint": "^6.1.3", "typechain": "^8.0.0", "typescript": "^4.5.4" - }, - "optionalDependencies": { - "sol2uml": "2.2.0" } } diff --git a/contracts/remappings.txt b/contracts/remappings.txt index e40a28884..970afbe7b 100644 --- a/contracts/remappings.txt +++ b/contracts/remappings.txt @@ -1,2 +1,3 @@ @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ -@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ \ No newline at end of file +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +@offchainlabs/upgrade-executor/=node_modules/@offchainlabs/upgrade-executor/ \ No newline at end of file diff --git a/contracts/script/upgrade/deploy4844.ts b/contracts/script/upgrade/deploy4844.ts new file mode 100644 index 000000000..986636e59 --- /dev/null +++ b/contracts/script/upgrade/deploy4844.ts @@ -0,0 +1,107 @@ +import { ethers } from 'hardhat' +import { ContractFactory, Contract, Overrides } from 'ethers' +import '@nomiclabs/hardhat-ethers' +import { IReader4844__factory } from '../../build/types' +import { bytecode as Reader4844Bytecode } from '../../out/yul/Reader4844.yul/Reader4844.json' +import { deployContract, verifyContract } from '../deploymentUtils' +import { maxDataSize, isUsingFeeToken } from '../config' + +async function main() { + const [signer] = await ethers.getSigners() + const overrides: Overrides = { + maxFeePerGas: ethers.utils.parseUnits('30', 'gwei'), + maxPriorityFeePerGas: ethers.utils.parseUnits('0.001', 'gwei'), + } + + const contractFactory = new ContractFactory( + IReader4844__factory.abi, + Reader4844Bytecode, + signer + ) + const reader4844 = await contractFactory.deploy(overrides) + await reader4844.deployed() + console.log(`Reader4844 deployed at ${reader4844.address}`) + + // skip verification on deployment + const sequencerInbox = await deployContract( + 'SequencerInbox', + signer, + [maxDataSize, reader4844.address, isUsingFeeToken], + false, + overrides + ) + // SequencerInbox logic do not need to be initialized + const prover0 = await deployContract( + 'OneStepProver0', + signer, + [], + false, + overrides + ) + const proverMem = await deployContract( + 'OneStepProverMemory', + signer, + [], + false, + overrides + ) + const proverMath = await deployContract( + 'OneStepProverMath', + signer, + [], + false, + overrides + ) + const proverHostIo = await deployContract( + 'OneStepProverHostIo', + signer, + [], + false, + overrides + ) + const osp: Contract = await deployContract( + 'OneStepProofEntry', + signer, + [ + prover0.address, + proverMem.address, + proverMath.address, + proverHostIo.address, + ], + false, + overrides + ) + const challengeManager = await deployContract( + 'ChallengeManager', + signer, + [], + false, + overrides + ) + // ChallengeManager logic do not need to be initialized + + // verify + await verifyContract('SequencerInbox', sequencerInbox.address, [ + maxDataSize, + reader4844.address, + isUsingFeeToken, + ]) + await verifyContract('OneStepProver0', prover0.address, []) + await verifyContract('OneStepProverMemory', proverMem.address, []) + await verifyContract('OneStepProverMath', proverMath.address, []) + await verifyContract('OneStepProverHostIo', proverHostIo.address, []) + await verifyContract('OneStepProofEntry', osp.address, [ + prover0.address, + proverMem.address, + proverMath.address, + proverHostIo.address, + ]) + await verifyContract('ChallengeManager', challengeManager.address, []) +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/contracts/scripts/boldUpgradeFunctions.ts b/contracts/scripts/boldUpgradeFunctions.ts index d61c014f2..648425bb3 100644 --- a/contracts/scripts/boldUpgradeFunctions.ts +++ b/contracts/scripts/boldUpgradeFunctions.ts @@ -15,7 +15,9 @@ import { RollupUserLogic__factory, SequencerInbox__factory, StateHashPreImageLookup__factory, + IReader4844__factory, } from '../build/types' +import { bytecode as Reader4844Bytecode } from '../out/yul/Reader4844.yul/Reader4844.json' import { DeployedContracts, Config } from './common' import { AssertionStateStruct } from '../build/types/src/challengeV2/IAssertionChain' // taken from https://github.com/OffchainLabs/nitro-contracts/blob/210e5b3bc96a513d276deaba90399130a60131d5/src/rollup/RollupUserLogic.sol @@ -37,8 +39,17 @@ export const deployDependencies = async ( console.log(`Bridge implementation deployed at: ${bridge.address}`) } + const contractFactory = new ContractFactory( + IReader4844__factory.abi, + Reader4844Bytecode, + signer + ) + const reader4844 = await contractFactory.deploy() + await reader4844.deployed() + console.log(`Reader4844 deployed at ${reader4844.address}`) + const seqInboxFac = new SequencerInbox__factory(signer) - const seqInbox = await seqInboxFac.deploy(maxDataSize) + const seqInbox = await seqInboxFac.deploy(maxDataSize, reader4844.address, false) if (log) { console.log( `Sequencer inbox implementation deployed at: ${seqInbox.address}` diff --git a/contracts/scripts/config.ts.example b/contracts/scripts/config.ts.example new file mode 100644 index 000000000..cf5d8704c --- /dev/null +++ b/contracts/scripts/config.ts.example @@ -0,0 +1,33 @@ +import { ethers } from 'ethers' + +// 90% of Geth's 128KB tx size limit, leaving ~13KB for proving +// This need to be adjusted for Orbit chains +export const maxDataSize = 117964 + +export const config = { + rollupConfig: { + confirmPeriodBlocks: ethers.BigNumber.from('45818'), + extraChallengeTimeBlocks: ethers.BigNumber.from('200'), + stakeToken: ethers.constants.AddressZero, + baseStake: ethers.utils.parseEther('1'), + wasmModuleRoot: + '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', + owner: '0x1234123412341234123412341234123412341234', + loserStakeEscrow: ethers.constants.AddressZero, + chainId: ethers.BigNumber.from('13331370'), + chainConfig: + '{"chainId":13331370,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":true,"eip150Block":0,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":0,"berlinBlock":0,"londonBlock":0,"clique":{"period":0,"epoch":0},"arbitrum":{"EnableArbOS":true,"AllowDebugPrecompiles":false,"DataAvailabilityCommittee":false,"InitialArbOSVersion":10,"InitialChainOwner":"0x1234123412341234123412341234123412341234","GenesisBlockNum":0}}', + genesisBlockNum: ethers.BigNumber.from('0'), + sequencerInboxMaxTimeVariation: { + delayBlocks: ethers.BigNumber.from('5760'), + futureBlocks: ethers.BigNumber.from('12'), + delaySeconds: ethers.BigNumber.from('86400'), + futureSeconds: ethers.BigNumber.from('3600'), + }, + }, + validators: [ + '0x1234123412341234123412341234123412341234', + '0x1234512345123451234512345123451234512345', + ], + batchPoster: '0x1234123412341234123412341234123412341234', +} diff --git a/contracts/scripts/createERC20Rollup.ts b/contracts/scripts/createERC20Rollup.ts new file mode 100644 index 000000000..604fa17e4 --- /dev/null +++ b/contracts/scripts/createERC20Rollup.ts @@ -0,0 +1,41 @@ +import { ethers } from 'hardhat' +import '@nomiclabs/hardhat-ethers' +import { Signer } from 'ethers' +import { createRollup } from './rollupCreation' +import { TestToken__factory } from '../build/types' + +async function deployERC20Token(deployer: Signer): Promise { + const factory = await new TestToken__factory(deployer).deploy( + ethers.utils.parseEther('1000000000') + ) + const feeToken = await factory.deployed() + + return feeToken.address +} + +async function main() { + const [deployer] = await ethers.getSigners() + + let customFeeTokenAddress = process.env.FEE_TOKEN_ADDRESS + if (!customFeeTokenAddress) { + console.log( + 'FEE_TOKEN_ADDRESS env var not provided, deploying new ERC20 token' + ) + customFeeTokenAddress = await deployERC20Token(deployer) + } + if (!ethers.utils.isAddress(customFeeTokenAddress)) { + throw new Error( + 'Fee token address ' + customFeeTokenAddress + ' is not a valid address!' + ) + } + + console.log('Creating new rollup with', customFeeTokenAddress, 'as fee token') + await createRollup(customFeeTokenAddress) +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/contracts/scripts/createEthRollup.ts b/contracts/scripts/createEthRollup.ts new file mode 100644 index 000000000..eb11e83df --- /dev/null +++ b/contracts/scripts/createEthRollup.ts @@ -0,0 +1,13 @@ +import '@nomiclabs/hardhat-ethers' +import { createRollup } from './rollupCreation' + +async function main() { + await createRollup() +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/contracts/scripts/deployment.ts b/contracts/scripts/deployment.ts new file mode 100644 index 000000000..fdb518775 --- /dev/null +++ b/contracts/scripts/deployment.ts @@ -0,0 +1,39 @@ +import { ethers } from 'hardhat' +import '@nomiclabs/hardhat-ethers' +import { deployAllContracts } from './deploymentUtils' + +async function main() { + const [signer] = await ethers.getSigners() + + try { + // Deploying all contracts + const contracts = await deployAllContracts(signer) + + // Call setTemplates with the deployed contract addresses + console.log('Waiting for the Template to be set on the Rollup Creator') + await contracts.rollupCreator.setTemplates( + contracts.bridgeCreator.address, + contracts.osp.address, + contracts.challengeManager.address, + contracts.rollupAdmin.address, + contracts.rollupUser.address, + contracts.upgradeExecutor.address, + contracts.validatorUtils.address, + contracts.validatorWalletCreator.address, + contracts.deployHelper.address + ) + console.log('Template is set on the Rollup Creator') + } catch (error) { + console.error( + 'Deployment failed:', + error instanceof Error ? error.message : error + ) + } +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/contracts/scripts/deploymentUtils.ts b/contracts/scripts/deploymentUtils.ts new file mode 100644 index 000000000..2df51be68 --- /dev/null +++ b/contracts/scripts/deploymentUtils.ts @@ -0,0 +1,191 @@ +import { ethers } from 'hardhat' +import { ContractFactory, Contract, Overrides } from 'ethers' +import '@nomiclabs/hardhat-ethers' +import { run } from 'hardhat' +import { + abi as UpgradeExecutorABI, + bytecode as UpgradeExecutorBytecode, +} from '@offchainlabs/upgrade-executor/build/contracts/src/UpgradeExecutor.sol/UpgradeExecutor.json' +import { maxDataSize } from './config' +import { Toolkit4844 } from '../test/contract/toolkit4844' +import { ArbSys__factory } from '../build/types' +import { ARB_SYS_ADDRESS } from '@arbitrum/sdk/dist/lib/dataEntities/constants' + +// Define a verification function +export async function verifyContract( + contractName: string, + contractAddress: string, + constructorArguments: any[] = [], + contractPathAndName?: string // optional +): Promise { + try { + if (process.env.DISABLE_VERIFICATION) return + // Define the verification options with possible 'contract' property + const verificationOptions: { + contract?: string + address: string + constructorArguments: any[] + } = { + address: contractAddress, + constructorArguments: constructorArguments, + } + + // if contractPathAndName is provided, add it to the verification options + if (contractPathAndName) { + verificationOptions.contract = contractPathAndName + } + + await run('verify:verify', verificationOptions) + console.log(`Verified contract ${contractName} successfully.`) + } catch (error: any) { + if (error.message.includes('Already Verified')) { + console.log(`Contract ${contractName} is already verified.`) + } else { + console.error( + `Verification for ${contractName} failed with the following error: ${error.message}` + ) + } + } +} + +// Function to handle contract deployment +export async function deployContract( + contractName: string, + signer: any, + constructorArgs: any[] = [], + verify: boolean = true, + overrides?: Overrides +): Promise { + const factory: ContractFactory = await ethers.getContractFactory(contractName) + const connectedFactory: ContractFactory = factory.connect(signer) + + let deploymentArgs = [...constructorArgs] + if (overrides) { + deploymentArgs.push(overrides) + } + + const contract: Contract = await connectedFactory.deploy(...deploymentArgs) + await contract.deployTransaction.wait() + console.log(`New ${contractName} created at address:`, contract.address) + + if (verify) + await verifyContract(contractName, contract.address, constructorArgs) + + return contract +} + +// Deploy upgrade executor from imported bytecode +export async function deployUpgradeExecutor(signer: any): Promise { + const upgradeExecutorFac = await ethers.getContractFactory( + UpgradeExecutorABI, + UpgradeExecutorBytecode + ) + const connectedFactory: ContractFactory = upgradeExecutorFac.connect(signer) + const upgradeExecutor = await connectedFactory.deploy() + return upgradeExecutor +} + +// Function to handle all deployments of core contracts using deployContract function +export async function deployAllContracts( + signer: any +): Promise> { + const isOnArb = await _isRunningOnArbitrum(signer) + + const ethBridge = await deployContract('Bridge', signer, []) + const reader4844 = isOnArb + ? ethers.constants.AddressZero + : (await Toolkit4844.deployReader4844(signer)).address + + const ethSequencerInbox = await deployContract('SequencerInbox', signer, [ + maxDataSize, + reader4844, + false, + ]) + + const ethInbox = await deployContract('Inbox', signer, [maxDataSize]) + const ethRollupEventInbox = await deployContract( + 'RollupEventInbox', + signer, + [] + ) + const ethOutbox = await deployContract('Outbox', signer, []) + + const erc20Bridge = await deployContract('ERC20Bridge', signer, []) + const erc20SequencerInbox = await deployContract('SequencerInbox', signer, [ + maxDataSize, + reader4844, + true, + ]) + const erc20Inbox = await deployContract('ERC20Inbox', signer, [maxDataSize]) + const erc20RollupEventInbox = await deployContract( + 'ERC20RollupEventInbox', + signer, + [] + ) + const erc20Outbox = await deployContract('ERC20Outbox', signer, []) + + const bridgeCreator = await deployContract('BridgeCreator', signer, [ + [ + ethBridge.address, + ethSequencerInbox.address, + ethInbox.address, + ethRollupEventInbox.address, + ethOutbox.address, + ], + [ + erc20Bridge.address, + erc20SequencerInbox.address, + erc20Inbox.address, + erc20RollupEventInbox.address, + erc20Outbox.address, + ], + ]) + const prover0 = await deployContract('OneStepProver0', signer) + const proverMem = await deployContract('OneStepProverMemory', signer) + const proverMath = await deployContract('OneStepProverMath', signer) + const proverHostIo = await deployContract('OneStepProverHostIo', signer) + const osp: Contract = await deployContract('OneStepProofEntry', signer, [ + prover0.address, + proverMem.address, + proverMath.address, + proverHostIo.address, + ]) + const challengeManager = await deployContract('ChallengeManager', signer) + const rollupAdmin = await deployContract('RollupAdminLogic', signer) + const rollupUser = await deployContract('RollupUserLogic', signer) + const upgradeExecutor = await deployUpgradeExecutor(signer) + const validatorUtils = await deployContract('ValidatorUtils', signer) + const validatorWalletCreator = await deployContract( + 'ValidatorWalletCreator', + signer + ) + const rollupCreator = await deployContract('RollupCreator', signer) + const deployHelper = await deployContract('DeployHelper', signer) + return { + bridgeCreator, + prover0, + proverMem, + proverMath, + proverHostIo, + osp, + challengeManager, + rollupAdmin, + rollupUser, + upgradeExecutor, + validatorUtils, + validatorWalletCreator, + rollupCreator, + deployHelper, + } +} + +// Check if we're deploying to an Arbitrum chain +async function _isRunningOnArbitrum(signer: any): Promise { + const arbSys = ArbSys__factory.connect(ARB_SYS_ADDRESS, signer) + try { + await arbSys.arbOSVersion() + return true + } catch (error) { + return false + } +} diff --git a/contracts/scripts/genNetwork.ts b/contracts/scripts/genNetwork.ts new file mode 100644 index 000000000..992e45971 --- /dev/null +++ b/contracts/scripts/genNetwork.ts @@ -0,0 +1,17 @@ +import { setupNetworks, config } from './testSetup' +import * as fs from 'fs' + +async function main() { + const { l1Network, l2Network } = await setupNetworks( + config.ethUrl, + config.arbUrl + ) + + fs.writeFileSync( + './files/local/network.json', + JSON.stringify({ l1Network, l2Network }, null, 2) + ) + console.log('network.json updated') +} + +main().then(() => console.log('Done.')) diff --git a/contracts/scripts/rollupCreation.ts b/contracts/scripts/rollupCreation.ts new file mode 100644 index 000000000..82e40cb5e --- /dev/null +++ b/contracts/scripts/rollupCreation.ts @@ -0,0 +1,167 @@ +import { ethers } from 'hardhat' +import '@nomiclabs/hardhat-ethers' +import { run } from 'hardhat' +import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' +import { config, maxDataSize } from './config' +import { BigNumber } from 'ethers' +import { IERC20__factory } from '../build/types' +import { sleep } from './testSetup' + +// 1 gwei +const MAX_FER_PER_GAS = BigNumber.from('1000000000') + +interface RollupCreatedEvent { + event: string + address: string + args?: { + rollupAddress: string + inboxAddress: string + outbox: string + rollupEventInbox: string + challengeManager: string + adminProxy: string + sequencerInbox: string + bridge: string + validatorUtils: string + validatorWalletCreator: string + } +} + +export async function createRollup(feeToken?: string) { + const rollupCreatorAddress = process.env.ROLLUP_CREATOR_ADDRESS + + if (!rollupCreatorAddress) { + console.error( + 'Please provide ROLLUP_CREATOR_ADDRESS as an environment variable.' + ) + process.exit(1) + } + + if (!rollupCreatorAbi) { + throw new Error( + 'You need to first run script to deploy and compile the contracts first' + ) + } + + const [signer] = await ethers.getSigners() + + const rollupCreator = new ethers.Contract( + rollupCreatorAddress, + rollupCreatorAbi, + signer + ) + + if (!feeToken) { + feeToken = ethers.constants.AddressZero + } + + try { + let vals: boolean[] = [] + for (let i = 0; i < config.validators.length; i++) { + vals.push(true) + } + + //// funds for deploying L2 factories + + // 0.13 ETH is enough to deploy L2 factories via retryables. Excess is refunded + let feeCost = ethers.utils.parseEther('0.13') + if (feeToken != ethers.constants.AddressZero) { + // in case fees are paid via fee token, then approve rollup cretor to spend required amount + await ( + await IERC20__factory.connect(feeToken, signer).approve( + rollupCreator.address, + feeCost + ) + ).wait() + feeCost = BigNumber.from(0) + } + + // Call the createRollup function + console.log('Calling createRollup to generate a new rollup ...') + const deployParams = { + config: config.rollupConfig, + batchPoster: config.batchPoster, + validators: config.validators, + maxDataSize: maxDataSize, + nativeToken: feeToken, + deployFactoriesToL2: true, + maxFeePerGasForRetryables: MAX_FER_PER_GAS, + } + const createRollupTx = await rollupCreator.createRollup(deployParams, { + value: feeCost, + }) + const createRollupReceipt = await createRollupTx.wait() + + const rollupCreatedEvent = createRollupReceipt.events?.find( + (event: RollupCreatedEvent) => + event.event === 'RollupCreated' && + event.address.toLowerCase() === rollupCreatorAddress.toLowerCase() + ) + + // Checking for RollupCreated event for new rollup address + if (rollupCreatedEvent) { + const rollupAddress = rollupCreatedEvent.args?.rollupAddress + const inboxAddress = rollupCreatedEvent.args?.inboxAddress + const outbox = rollupCreatedEvent.args?.outbox + const rollupEventInbox = rollupCreatedEvent.args?.rollupEventInbox + const challengeManager = rollupCreatedEvent.args?.challengeManager + const adminProxy = rollupCreatedEvent.args?.adminProxy + const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox + const bridge = rollupCreatedEvent.args?.bridge + const validatorUtils = rollupCreatedEvent.args?.validatorUtils + const validatorWalletCreator = + rollupCreatedEvent.args?.validatorWalletCreator + + console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") + console.log('RollupProxy Contract created at address:', rollupAddress) + console.log('Wait a minute before starting the contract verification') + await sleep(1 * 60 * 1000) + console.log( + `Attempting to verify Rollup contract at address ${rollupAddress}...` + ) + try { + await run('verify:verify', { + contract: 'src/rollup/RollupProxy.sol:RollupProxy', + address: rollupAddress, + constructorArguments: [], + }) + } catch (error: any) { + if (error.message.includes('Already Verified')) { + console.log(`Contract RollupProxy is already verified.`) + } else { + console.error( + `Verification for RollupProxy failed with the following error: ${error.message}` + ) + } + } + console.log('Inbox (proxy) Contract created at address:', inboxAddress) + console.log('Outbox (proxy) Contract created at address:', outbox) + console.log( + 'rollupEventInbox (proxy) Contract created at address:', + rollupEventInbox + ) + console.log( + 'challengeManager (proxy) Contract created at address:', + challengeManager + ) + console.log('AdminProxy Contract created at address:', adminProxy) + console.log('SequencerInbox (proxy) created at address:', sequencerInbox) + console.log('Bridge (proxy) Contract created at address:', bridge) + console.log('ValidatorUtils Contract created at address:', validatorUtils) + console.log( + 'ValidatorWalletCreator Contract created at address:', + validatorWalletCreator + ) + + const blockNumber = createRollupReceipt.blockNumber + console.log('All deployed at block number:', blockNumber) + } else { + console.error('RollupCreated event not found') + } + } catch (error) { + console.error( + 'Deployment failed:', + error instanceof Error ? error.message : error + ) + } +} diff --git a/contracts/scripts/testSetup.ts b/contracts/scripts/testSetup.ts new file mode 100644 index 000000000..2c11e7694 --- /dev/null +++ b/contracts/scripts/testSetup.ts @@ -0,0 +1,132 @@ +import { JsonRpcProvider } from '@ethersproject/providers' +import { L1Network, L2Network, addCustomNetwork } from '@arbitrum/sdk' +import { execSync } from 'child_process' +import { Bridge__factory } from '@arbitrum/sdk/dist/lib/abi/factories/Bridge__factory' +import { RollupAdminLogic__factory } from '@arbitrum/sdk/dist/lib/abi/factories/RollupAdminLogic__factory' + +export const config = { + arbUrl: 'http://localhost:8547', + ethUrl: 'http://localhost:8545', +} + +export const getCustomNetworks = async ( + l1Url: string, + l2Url: string +): Promise<{ + l1Network: L1Network + l2Network: Omit & { nativeToken: string } +}> => { + const l1Provider = new JsonRpcProvider(l1Url) + const l2Provider = new JsonRpcProvider(l2Url) + let deploymentData: string + + let sequencerContainer = execSync( + 'docker ps --filter "name=sequencer" --format "{{.Names}}"' + ) + .toString() + .trim() + + deploymentData = execSync( + `docker exec ${sequencerContainer} cat /config/deployment.json` + ).toString() + + const parsedDeploymentData = JSON.parse(deploymentData) as { + bridge: string + inbox: string + ['sequencer-inbox']: string + rollup: string + ['native-erc20-token']: string + } + + const rollup = RollupAdminLogic__factory.connect( + parsedDeploymentData.rollup, + l1Provider + ) + const confirmPeriodBlocks = await rollup.confirmPeriodBlocks() + + const bridge = Bridge__factory.connect( + parsedDeploymentData.bridge, + l1Provider + ) + const outboxAddr = await bridge.allowedOutboxList(0) + + const l1NetworkInfo = await l1Provider.getNetwork() + const l2NetworkInfo = await l2Provider.getNetwork() + + const l1Network: L1Network = { + blockTime: 10, + chainID: l1NetworkInfo.chainId, + explorerUrl: '', + isCustom: true, + name: 'EthLocal', + partnerChainIDs: [l2NetworkInfo.chainId], + isArbitrum: false, + } + + const l2Network: Omit & { nativeToken: string } = { + chainID: l2NetworkInfo.chainId, + confirmPeriodBlocks: confirmPeriodBlocks.toNumber(), + ethBridge: { + bridge: parsedDeploymentData.bridge, + inbox: parsedDeploymentData.inbox, + outbox: outboxAddr, + rollup: parsedDeploymentData.rollup, + sequencerInbox: parsedDeploymentData['sequencer-inbox'], + }, + nativeToken: parsedDeploymentData['native-erc20-token'], + explorerUrl: '', + isArbitrum: true, + isCustom: true, + name: 'ArbLocal', + partnerChainID: l1NetworkInfo.chainId, + retryableLifetimeSeconds: 7 * 24 * 60 * 60, + nitroGenesisBlock: 0, + nitroGenesisL1Block: 0, + depositTimeout: 900000, + } + return { + l1Network, + l2Network, + } +} + +export const setupNetworks = async (l1Url: string, l2Url: string) => { + const { l1Network, l2Network: coreL2Network } = await getCustomNetworks( + l1Url, + l2Url + ) + const l2Network: L2Network & { nativeToken: string } = { + ...coreL2Network, + tokenBridge: { + l1CustomGateway: '', + l1ERC20Gateway: '', + l1GatewayRouter: '', + l1MultiCall: '', + l1ProxyAdmin: '', + l1Weth: '', + l1WethGateway: '', + + l2CustomGateway: '', + l2ERC20Gateway: '', + l2GatewayRouter: '', + l2Multicall: '', + l2ProxyAdmin: '', + l2Weth: '', + l2WethGateway: '', + }, + } + + addCustomNetwork({ + customL1Network: l1Network, + customL2Network: l2Network, + }) + + return { + l1Network, + l2Network, + } +} + +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)) +} diff --git a/contracts/src/assertionStakingPool/AssertionStakingPool.sol b/contracts/src/assertionStakingPool/AssertionStakingPool.sol index 95ae8b851..a0a4843d4 100644 --- a/contracts/src/assertionStakingPool/AssertionStakingPool.sol +++ b/contracts/src/assertionStakingPool/AssertionStakingPool.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // diff --git a/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol b/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol index 3f709a6a9..48db5972f 100644 --- a/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol +++ b/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // diff --git a/contracts/src/assertionStakingPool/StakingPoolErrors.sol b/contracts/src/assertionStakingPool/StakingPoolErrors.sol index 4aee4e1f1..286419993 100644 --- a/contracts/src/assertionStakingPool/StakingPoolErrors.sol +++ b/contracts/src/assertionStakingPool/StakingPoolErrors.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // pragma solidity ^0.8.0; diff --git a/contracts/src/bridge/AbsBridge.sol b/contracts/src/bridge/AbsBridge.sol new file mode 100644 index 000000000..65d2087ad --- /dev/null +++ b/contracts/src/bridge/AbsBridge.sol @@ -0,0 +1,308 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; + +import { + NotContract, + NotRollupOrOwner, + NotDelayedInbox, + NotSequencerInbox, + NotOutbox, + InvalidOutboxSet, + BadSequencerMessageNumber +} from "../libraries/Error.sol"; +import "./IBridge.sol"; +import "./Messages.sol"; +import "../libraries/DelegateCallAware.sol"; + +import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; + +/** + * @title Staging ground for incoming and outgoing messages + * @notice Holds the inbox accumulator for sequenced and delayed messages. + * Since the escrow is held here, this contract also contains a list of allowed + * outboxes that can make calls from here and withdraw this escrow. + */ +abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { + using AddressUpgradeable for address; + + struct InOutInfo { + uint256 index; + bool allowed; + } + + mapping(address => InOutInfo) private allowedDelayedInboxesMap; + mapping(address => InOutInfo) private allowedOutboxesMap; + + address[] public allowedDelayedInboxList; + address[] public allowedOutboxList; + + address internal _activeOutbox; + + /// @inheritdoc IBridge + bytes32[] public delayedInboxAccs; + + /// @inheritdoc IBridge + bytes32[] public sequencerInboxAccs; + + IOwnable public rollup; + address public sequencerInbox; + + uint256 public override sequencerReportedSubMessageCount; + + address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); + + modifier onlyRollupOrOwner() { + if (msg.sender != address(rollup)) { + address rollupOwner = rollup.owner(); + if (msg.sender != rollupOwner) { + revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); + } + } + _; + } + + /// @notice Allows the rollup owner to set another rollup address + function updateRollupAddress(IOwnable _rollup) external onlyRollupOrOwner { + rollup = _rollup; + emit RollupUpdated(address(_rollup)); + } + + /// @dev returns the address of current active Outbox, or zero if no outbox is active + function activeOutbox() public view returns (address) { + address outbox = _activeOutbox; + // address zero is returned if no outbox is set, but the value used in storage + // is non-zero to save users some gas (as storage refunds are usually maxed out) + // EIP-1153 would help here. + // we don't return `EMPTY_ACTIVEOUTBOX` to avoid a breaking change on the current api + if (outbox == EMPTY_ACTIVEOUTBOX) return address(0); + return outbox; + } + + function allowedDelayedInboxes(address inbox) public view returns (bool) { + return allowedDelayedInboxesMap[inbox].allowed; + } + + function allowedOutboxes(address outbox) public view returns (bool) { + return allowedOutboxesMap[outbox].allowed; + } + + modifier onlySequencerInbox() { + if (msg.sender != sequencerInbox) revert NotSequencerInbox(msg.sender); + _; + } + + function enqueueSequencerMessage( + bytes32 dataHash, + uint256 afterDelayedMessagesRead, + uint256 prevMessageCount, + uint256 newMessageCount + ) + external + onlySequencerInbox + returns ( + uint256 seqMessageIndex, + bytes32 beforeAcc, + bytes32 delayedAcc, + bytes32 acc + ) + { + if ( + sequencerReportedSubMessageCount != prevMessageCount && + prevMessageCount != 0 && + sequencerReportedSubMessageCount != 0 + ) { + revert BadSequencerMessageNumber(sequencerReportedSubMessageCount, prevMessageCount); + } + sequencerReportedSubMessageCount = newMessageCount; + seqMessageIndex = sequencerInboxAccs.length; + if (sequencerInboxAccs.length > 0) { + beforeAcc = sequencerInboxAccs[sequencerInboxAccs.length - 1]; + } + if (afterDelayedMessagesRead > 0) { + delayedAcc = delayedInboxAccs[afterDelayedMessagesRead - 1]; + } + acc = keccak256(abi.encodePacked(beforeAcc, dataHash, delayedAcc)); + sequencerInboxAccs.push(acc); + } + + /// @inheritdoc IBridge + function submitBatchSpendingReport(address sender, bytes32 messageDataHash) + external + onlySequencerInbox + returns (uint256) + { + return + addMessageToDelayedAccumulator( + L1MessageType_batchPostingReport, + sender, + uint64(block.number), + uint64(block.timestamp), // solhint-disable-line not-rely-on-time, + block.basefee, + messageDataHash + ); + } + + function _enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 amount + ) internal returns (uint256) { + if (!allowedDelayedInboxes(msg.sender)) revert NotDelayedInbox(msg.sender); + + uint256 messageCount = addMessageToDelayedAccumulator( + kind, + sender, + uint64(block.number), + uint64(block.timestamp), // solhint-disable-line not-rely-on-time + _baseFeeToReport(), + messageDataHash + ); + + _transferFunds(amount); + + return messageCount; + } + + function addMessageToDelayedAccumulator( + uint8 kind, + address sender, + uint64 blockNumber, + uint64 blockTimestamp, + uint256 baseFeeL1, + bytes32 messageDataHash + ) internal returns (uint256) { + uint256 count = delayedInboxAccs.length; + bytes32 messageHash = Messages.messageHash( + kind, + sender, + blockNumber, + blockTimestamp, + count, + baseFeeL1, + messageDataHash + ); + bytes32 prevAcc = 0; + if (count > 0) { + prevAcc = delayedInboxAccs[count - 1]; + } + delayedInboxAccs.push(Messages.accumulateInboxMessage(prevAcc, messageHash)); + emit MessageDelivered( + count, + prevAcc, + msg.sender, + kind, + sender, + messageDataHash, + baseFeeL1, + blockTimestamp + ); + return count; + } + + /// @inheritdoc IBridge + function executeCall( + address to, + uint256 value, + bytes calldata data + ) external returns (bool success, bytes memory returnData) { + if (!allowedOutboxes(msg.sender)) revert NotOutbox(msg.sender); + if (data.length > 0 && !to.isContract()) revert NotContract(to); + address prevOutbox = _activeOutbox; + _activeOutbox = msg.sender; + // We set and reset active outbox around external call so activeOutbox remains valid during call + + // We use a low level call here since we want to bubble up whether it succeeded or failed to the caller + // rather than reverting on failure as well as allow contract and non-contract calls + (success, returnData) = _executeLowLevelCall(to, value, data); + + _activeOutbox = prevOutbox; + emit BridgeCallTriggered(msg.sender, to, value, data); + } + + function setSequencerInbox(address _sequencerInbox) external onlyRollupOrOwner { + sequencerInbox = _sequencerInbox; + emit SequencerInboxUpdated(_sequencerInbox); + } + + function setDelayedInbox(address inbox, bool enabled) external onlyRollupOrOwner { + InOutInfo storage info = allowedDelayedInboxesMap[inbox]; + bool alreadyEnabled = info.allowed; + emit InboxToggle(inbox, enabled); + if (alreadyEnabled == enabled) { + return; + } + if (enabled) { + allowedDelayedInboxesMap[inbox] = InOutInfo(allowedDelayedInboxList.length, true); + allowedDelayedInboxList.push(inbox); + } else { + allowedDelayedInboxList[info.index] = allowedDelayedInboxList[ + allowedDelayedInboxList.length - 1 + ]; + allowedDelayedInboxesMap[allowedDelayedInboxList[info.index]].index = info.index; + allowedDelayedInboxList.pop(); + delete allowedDelayedInboxesMap[inbox]; + } + } + + function setOutbox(address outbox, bool enabled) external onlyRollupOrOwner { + if (outbox == EMPTY_ACTIVEOUTBOX) revert InvalidOutboxSet(outbox); + + InOutInfo storage info = allowedOutboxesMap[outbox]; + bool alreadyEnabled = info.allowed; + emit OutboxToggle(outbox, enabled); + if (alreadyEnabled == enabled) { + return; + } + if (enabled) { + allowedOutboxesMap[outbox] = InOutInfo(allowedOutboxList.length, true); + allowedOutboxList.push(outbox); + } else { + allowedOutboxList[info.index] = allowedOutboxList[allowedOutboxList.length - 1]; + allowedOutboxesMap[allowedOutboxList[info.index]].index = info.index; + allowedOutboxList.pop(); + delete allowedOutboxesMap[outbox]; + } + } + + function setSequencerReportedSubMessageCount(uint256 newMsgCount) external onlyRollupOrOwner { + sequencerReportedSubMessageCount = newMsgCount; + } + + function delayedMessageCount() external view override returns (uint256) { + return delayedInboxAccs.length; + } + + function sequencerMessageCount() external view returns (uint256) { + return sequencerInboxAccs.length; + } + + /// @dev For the classic -> nitro migration. TODO: remove post-migration. + function acceptFundsFromOldBridge() external payable {} + + /// @dev transfer funds provided to pay for crosschain msg + function _transferFunds(uint256 amount) internal virtual; + + function _executeLowLevelCall( + address to, + uint256 value, + bytes memory data + ) internal virtual returns (bool success, bytes memory returnData); + + /// @dev get base fee which is emitted in `MessageDelivered` event and then picked up and + /// used in ArbOs to calculate the submission fee for retryable ticket + function _baseFeeToReport() internal view virtual returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[40] private __gap; +} diff --git a/contracts/src/bridge/AbsInbox.sol b/contracts/src/bridge/AbsInbox.sol new file mode 100644 index 000000000..e278aea08 --- /dev/null +++ b/contracts/src/bridge/AbsInbox.sol @@ -0,0 +1,356 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import { + DataTooLarge, + GasLimitTooLarge, + InsufficientValue, + InsufficientSubmissionCost, + L1Forked, + NotAllowedOrigin, + NotOrigin, + NotRollupOrOwner, + RetryableData +} from "../libraries/Error.sol"; +import "./IInboxBase.sol"; +import "./ISequencerInbox.sol"; +import "./IBridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import "../libraries/DelegateCallAware.sol"; +import { + L1MessageType_submitRetryableTx, + L2MessageType_unsignedContractTx, + L2MessageType_unsignedEOATx, + L2_MSG +} from "../libraries/MessageTypes.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol"; + +/** + * @title Inbox for user and contract originated messages + * @notice Messages created via this inbox are enqueued in the delayed accumulator + * to await inclusion in the SequencerInbox + */ +abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInboxBase { + /// @dev Storage slot with the admin of the contract. + /// This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. + bytes32 internal constant _ADMIN_SLOT = + 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + + /// @inheritdoc IInboxBase + IBridge public bridge; + /// @inheritdoc IInboxBase + ISequencerInbox public sequencerInbox; + + /// ------------------------------------ allow list start ------------------------------------ /// + + /// @inheritdoc IInboxBase + bool public allowListEnabled; + + /// @inheritdoc IInboxBase + mapping(address => bool) public isAllowed; + + event AllowListAddressSet(address indexed user, bool val); + event AllowListEnabledUpdated(bool isEnabled); + + /// @inheritdoc IInboxBase + function setAllowList(address[] memory user, bool[] memory val) external onlyRollupOrOwner { + require(user.length == val.length, "INVALID_INPUT"); + + for (uint256 i = 0; i < user.length; i++) { + isAllowed[user[i]] = val[i]; + emit AllowListAddressSet(user[i], val[i]); + } + } + + /// @inheritdoc IInboxBase + function setAllowListEnabled(bool _allowListEnabled) external onlyRollupOrOwner { + require(_allowListEnabled != allowListEnabled, "ALREADY_SET"); + allowListEnabled = _allowListEnabled; + emit AllowListEnabledUpdated(_allowListEnabled); + } + + /// @dev this modifier checks the tx.origin instead of msg.sender for convenience (ie it allows + /// allowed users to interact with the token bridge without needing the token bridge to be allowList aware). + /// this modifier is not intended to use to be used for security (since this opens the allowList to + /// a smart contract phishing risk). + modifier onlyAllowed() { + // solhint-disable-next-line avoid-tx-origin + if (allowListEnabled && !isAllowed[tx.origin]) revert NotAllowedOrigin(tx.origin); + _; + } + + /// ------------------------------------ allow list end ------------------------------------ /// + + modifier onlyRollupOrOwner() { + IOwnable rollup = bridge.rollup(); + if (msg.sender != address(rollup)) { + address rollupOwner = rollup.owner(); + if (msg.sender != rollupOwner) { + revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); + } + } + _; + } + + // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving + uint256 public immutable maxDataSize; + uint256 internal immutable deployTimeChainId = block.chainid; + + constructor(uint256 _maxDataSize) { + maxDataSize = _maxDataSize; + } + + function _chainIdChanged() internal view returns (bool) { + return deployTimeChainId != block.chainid; + } + + /// @inheritdoc IInboxBase + function pause() external onlyRollupOrOwner { + _pause(); + } + + /// @inheritdoc IInboxBase + function unpause() external onlyRollupOrOwner { + _unpause(); + } + + /* solhint-disable func-name-mixedcase */ + function __AbsInbox_init(IBridge _bridge, ISequencerInbox _sequencerInbox) + internal + onlyInitializing + { + bridge = _bridge; + sequencerInbox = _sequencerInbox; + allowListEnabled = false; + __Pausable_init(); + } + + /// @inheritdoc IInboxBase + function sendL2MessageFromOrigin(bytes calldata messageData) + external + whenNotPaused + onlyAllowed + returns (uint256) + { + if (_chainIdChanged()) revert L1Forked(); + // solhint-disable-next-line avoid-tx-origin + if (msg.sender != tx.origin) revert NotOrigin(); + if (messageData.length > maxDataSize) revert DataTooLarge(messageData.length, maxDataSize); + uint256 msgNum = _deliverToBridge(L2_MSG, msg.sender, keccak256(messageData), 0); + emit InboxMessageDeliveredFromOrigin(msgNum); + return msgNum; + } + + /// @inheritdoc IInboxBase + function sendL2Message(bytes calldata messageData) + external + whenNotPaused + onlyAllowed + returns (uint256) + { + if (_chainIdChanged()) revert L1Forked(); + return _deliverMessage(L2_MSG, msg.sender, messageData, 0); + } + + /// @inheritdoc IInboxBase + function sendUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + uint256 value, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + // arbos will discard unsigned tx with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + return + _deliverMessage( + L2_MSG, + msg.sender, + abi.encodePacked( + L2MessageType_unsignedEOATx, + gasLimit, + maxFeePerGas, + nonce, + uint256(uint160(to)), + value, + data + ), + 0 + ); + } + + /// @inheritdoc IInboxBase + function sendContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + uint256 value, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + // arbos will discard unsigned tx with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + return + _deliverMessage( + L2_MSG, + msg.sender, + abi.encodePacked( + L2MessageType_unsignedContractTx, + gasLimit, + maxFeePerGas, + uint256(uint160(to)), + value, + data + ), + 0 + ); + } + + /// @inheritdoc IInboxBase + function getProxyAdmin() external view returns (address) { + return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; + } + + function _createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 amount, + bytes calldata data + ) internal returns (uint256) { + // ensure the user's deposit alone will make submission succeed + if (amount < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas)) { + revert InsufficientValue( + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + amount + ); + } + + // if a refund address is a contract, we apply the alias to it + // so that it can access its funds on the L2 + // since the beneficiary and other refund addresses don't get rewritten by arb-os + if (AddressUpgradeable.isContract(excessFeeRefundAddress)) { + excessFeeRefundAddress = AddressAliasHelper.applyL1ToL2Alias(excessFeeRefundAddress); + } + if (AddressUpgradeable.isContract(callValueRefundAddress)) { + // this is the beneficiary. be careful since this is the address that can cancel the retryable in the L2 + callValueRefundAddress = AddressAliasHelper.applyL1ToL2Alias(callValueRefundAddress); + } + + // gas limit is validated to be within uint64 in unsafeCreateRetryableTicket + return + _unsafeCreateRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + amount, + data + ); + } + + function _unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 amount, + bytes calldata data + ) internal returns (uint256) { + // gas price and limit of 1 should never be a valid input, so instead they are used as + // magic values to trigger a revert in eth calls that surface data without requiring a tx trace + if (gasLimit == 1 || maxFeePerGas == 1) + revert RetryableData( + msg.sender, + to, + l2CallValue, + amount, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + data + ); + + // arbos will discard retryable with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + + uint256 submissionFee = calculateRetryableSubmissionFee(data.length, block.basefee); + if (maxSubmissionCost < submissionFee) + revert InsufficientSubmissionCost(submissionFee, maxSubmissionCost); + + return + _deliverMessage( + L1MessageType_submitRetryableTx, + msg.sender, + abi.encodePacked( + uint256(uint160(to)), + l2CallValue, + amount, + maxSubmissionCost, + uint256(uint160(excessFeeRefundAddress)), + uint256(uint160(callValueRefundAddress)), + gasLimit, + maxFeePerGas, + data.length, + data + ), + amount + ); + } + + function _deliverMessage( + uint8 _kind, + address _sender, + bytes memory _messageData, + uint256 amount + ) internal returns (uint256) { + if (_messageData.length > maxDataSize) + revert DataTooLarge(_messageData.length, maxDataSize); + uint256 msgNum = _deliverToBridge(_kind, _sender, keccak256(_messageData), amount); + emit InboxMessageDelivered(msgNum, _messageData); + return msgNum; + } + + function _deliverToBridge( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 amount + ) internal virtual returns (uint256); + + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + public + view + virtual + returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[47] private __gap; +} diff --git a/contracts/src/bridge/AbsOutbox.sol b/contracts/src/bridge/AbsOutbox.sol new file mode 100644 index 000000000..857c90d49 --- /dev/null +++ b/contracts/src/bridge/AbsOutbox.sol @@ -0,0 +1,326 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import { + AlreadyInit, + NotRollup, + ProofTooLong, + PathNotMinimal, + UnknownRoot, + AlreadySpent, + BridgeCallFailed, + HadZeroInit, + BadPostUpgradeInit, + RollupNotChanged +} from "../libraries/Error.sol"; +import "./IBridge.sol"; +import "./IOutbox.sol"; +import "../libraries/MerkleLib.sol"; +import "../libraries/DelegateCallAware.sol"; + +/// @dev this error is thrown since certain functions are only expected to be used in simulations, not in actual txs +error SimulationOnlyEntrypoint(); + +abstract contract AbsOutbox is DelegateCallAware, IOutbox { + address public rollup; // the rollup contract + IBridge public bridge; // the bridge contract + + mapping(uint256 => bytes32) public spent; // packed spent bitmap + mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash + + // we're packing this struct into 4 storage slots + // 1st slot: timestamp, l2Block (128 bits each, max ~3.4*10^38) + // 2nd slot: outputId (256 bits) + // 3rd slot: l1Block (96 bits, max ~7.9*10^28), sender (address 160 bits) + // 4th slot: withdrawalAmount (256 bits) + struct L2ToL1Context { + uint128 l2Block; + uint128 timestamp; + bytes32 outputId; + address sender; + uint96 l1Block; + uint256 withdrawalAmount; + } + + // Note, these variables are set and then wiped during a single transaction. + // Therefore their values don't need to be maintained, and their slots will + // hold default values (which are interpreted as empty values) outside of transactions + L2ToL1Context internal context; + + // default context values to be used in storage instead of zero, to save on storage refunds + // it is assumed that arb-os never assigns these values to a valid leaf to be redeemed + uint128 private constant L2BLOCK_DEFAULT_CONTEXT = type(uint128).max; + uint96 private constant L1BLOCK_DEFAULT_CONTEXT = type(uint96).max; + uint128 private constant TIMESTAMP_DEFAULT_CONTEXT = type(uint128).max; + bytes32 private constant OUTPUTID_DEFAULT_CONTEXT = bytes32(type(uint256).max); + address private constant SENDER_DEFAULT_CONTEXT = address(type(uint160).max); + + uint128 public constant OUTBOX_VERSION = 2; + + function initialize(IBridge _bridge) external onlyDelegated { + if (address(_bridge) == address(0)) revert HadZeroInit(); + if (address(bridge) != address(0)) revert AlreadyInit(); + // address zero is returned if no context is set, but the values used in storage + // are non-zero to save users some gas (as storage refunds are usually maxed out) + // EIP-1153 would help here + context = L2ToL1Context({ + l2Block: L2BLOCK_DEFAULT_CONTEXT, + l1Block: L1BLOCK_DEFAULT_CONTEXT, + timestamp: TIMESTAMP_DEFAULT_CONTEXT, + outputId: OUTPUTID_DEFAULT_CONTEXT, + sender: SENDER_DEFAULT_CONTEXT, + withdrawalAmount: _defaultContextAmount() + }); + bridge = _bridge; + rollup = address(_bridge.rollup()); + } + + function postUpgradeInit() external onlyDelegated onlyProxyOwner { + // prevent postUpgradeInit within a withdrawal + if (context.l2Block != L2BLOCK_DEFAULT_CONTEXT) revert BadPostUpgradeInit(); + context = L2ToL1Context({ + l2Block: L2BLOCK_DEFAULT_CONTEXT, + l1Block: L1BLOCK_DEFAULT_CONTEXT, + timestamp: TIMESTAMP_DEFAULT_CONTEXT, + outputId: OUTPUTID_DEFAULT_CONTEXT, + sender: SENDER_DEFAULT_CONTEXT, + withdrawalAmount: _defaultContextAmount() + }); + } + + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); + address newRollup = address(bridge.rollup()); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; + } + + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { + if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); + roots[root] = l2BlockHash; + emit SendRootUpdated(root, l2BlockHash); + } + + /// @inheritdoc IOutbox + function l2ToL1Sender() external view returns (address) { + address sender = context.sender; + // we don't return the default context value to avoid a breaking change in the API + if (sender == SENDER_DEFAULT_CONTEXT) return address(0); + return sender; + } + + /// @inheritdoc IOutbox + function l2ToL1Block() external view returns (uint256) { + uint128 l2Block = context.l2Block; + // we don't return the default context value to avoid a breaking change in the API + if (l2Block == L2BLOCK_DEFAULT_CONTEXT) return uint256(0); + return uint256(l2Block); + } + + /// @inheritdoc IOutbox + function l2ToL1EthBlock() external view returns (uint256) { + uint96 l1Block = context.l1Block; + // we don't return the default context value to avoid a breaking change in the API + if (l1Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); + return uint256(l1Block); + } + + /// @inheritdoc IOutbox + function l2ToL1Timestamp() external view returns (uint256) { + uint128 timestamp = context.timestamp; + // we don't return the default context value to avoid a breaking change in the API + if (timestamp == TIMESTAMP_DEFAULT_CONTEXT) return uint256(0); + return uint256(timestamp); + } + + /// @notice batch number is deprecated and now always returns 0 + function l2ToL1BatchNum() external pure returns (uint256) { + return 0; + } + + /// @inheritdoc IOutbox + function l2ToL1OutputId() external view returns (bytes32) { + bytes32 outputId = context.outputId; + // we don't return the default context value to avoid a breaking change in the API + if (outputId == OUTPUTID_DEFAULT_CONTEXT) return bytes32(0); + return outputId; + } + + /// @inheritdoc IOutbox + function executeTransaction( + bytes32[] calldata proof, + uint256 index, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) external { + bytes32 userTx = calculateItemHash( + l2Sender, + to, + l2Block, + l1Block, + l2Timestamp, + value, + data + ); + + recordOutputAsSpent(proof, index, userTx); + + executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); + } + + /// @inheritdoc IOutbox + function executeTransactionSimulation( + uint256 index, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) external { + if (msg.sender != address(0)) revert SimulationOnlyEntrypoint(); + executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); + } + + function executeTransactionImpl( + uint256 outputId, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) internal { + emit OutBoxTransactionExecuted(to, l2Sender, 0, outputId); + + // we temporarily store the previous values so the outbox can naturally + // unwind itself when there are nested calls to `executeTransaction` + L2ToL1Context memory prevContext = context; + + context = L2ToL1Context({ + sender: l2Sender, + l2Block: uint128(l2Block), + l1Block: uint96(l1Block), + timestamp: uint128(l2Timestamp), + outputId: bytes32(outputId), + withdrawalAmount: _amountToSetInContext(value) + }); + + // set and reset vars around execution so they remain valid during call + executeBridgeCall(to, value, data); + + context = prevContext; + } + + function _calcSpentIndexOffset(uint256 index) + internal + view + returns ( + uint256, + uint256, + bytes32 + ) + { + uint256 spentIndex = index / 255; // Note: Reserves the MSB. + uint256 bitOffset = index % 255; + bytes32 replay = spent[spentIndex]; + return (spentIndex, bitOffset, replay); + } + + function _isSpent(uint256 bitOffset, bytes32 replay) internal pure returns (bool) { + return ((replay >> bitOffset) & bytes32(uint256(1))) != bytes32(0); + } + + /// @inheritdoc IOutbox + function isSpent(uint256 index) external view returns (bool) { + (, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); + return _isSpent(bitOffset, replay); + } + + function recordOutputAsSpent( + bytes32[] memory proof, + uint256 index, + bytes32 item + ) internal { + if (proof.length >= 256) revert ProofTooLong(proof.length); + if (index >= 2**proof.length) revert PathNotMinimal(index, 2**proof.length); + + // Hash the leaf an extra time to prove it's a leaf + bytes32 calcRoot = calculateMerkleRoot(proof, index, item); + if (roots[calcRoot] == bytes32(0)) revert UnknownRoot(calcRoot); + + (uint256 spentIndex, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); + + if (_isSpent(bitOffset, replay)) revert AlreadySpent(index); + spent[spentIndex] = (replay | bytes32(1 << bitOffset)); + } + + function executeBridgeCall( + address to, + uint256 value, + bytes memory data + ) internal { + (bool success, bytes memory returndata) = bridge.executeCall(to, value, data); + if (!success) { + if (returndata.length > 0) { + // solhint-disable-next-line no-inline-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert BridgeCallFailed(); + } + } + } + + function calculateItemHash( + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) public pure returns (bytes32) { + return + keccak256(abi.encodePacked(l2Sender, to, l2Block, l1Block, l2Timestamp, value, data)); + } + + function calculateMerkleRoot( + bytes32[] memory proof, + uint256 path, + bytes32 item + ) public pure returns (bytes32) { + return MerkleLib.calculateRoot(proof, path, keccak256(abi.encodePacked(item))); + } + + /// @notice default value to be used for 'amount' field in L2ToL1Context outside of transaction execution. + /// @return default 'amount' in case of ERC20-based rollup is type(uint256).max, or 0 in case of ETH-based rollup + function _defaultContextAmount() internal pure virtual returns (uint256); + + /// @notice value to be set for 'amount' field in L2ToL1Context during L2 to L1 transaction execution. + /// In case of ERC20-based rollup this is the amount of native token being withdrawn. In case of standard ETH-based + /// rollup this amount shall always be 0, because amount of ETH being withdrawn can be read from msg.value. + /// @return amount of native token being withdrawn in case of ERC20-based rollup, or 0 in case of ETH-based rollup + function _amountToSetInContext(uint256 value) internal pure virtual returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[42] private __gap; +} diff --git a/contracts/src/bridge/Bridge.sol b/contracts/src/bridge/Bridge.sol index e89ce5a50..d46fa4edd 100644 --- a/contracts/src/bridge/Bridge.sol +++ b/contracts/src/bridge/Bridge.sol @@ -1,22 +1,13 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; - -import { - NotContract, - NotRollupOrOwner, - NotDelayedInbox, - NotSequencerInbox, - NotOutbox, - InvalidOutboxSet, - BadSequencerMessageNumber -} from "../libraries/Error.sol"; -import "./IBridge.sol"; +import "./AbsBridge.sol"; +import "./IEthBridge.sol"; import "./Messages.sol"; import "../libraries/DelegateCallAware.sol"; @@ -24,265 +15,40 @@ import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; /** * @title Staging ground for incoming and outgoing messages - * @notice Holds the inbox accumulator for sequenced and delayed messages. - * It is also the ETH escrow for value sent with these messages. - * Since the escrow is held here, this contract also contains a list of allowed - * outboxes that can make calls from here and withdraw this escrow. + * @notice It is also the ETH escrow for value sent with these messages. */ -contract Bridge is Initializable, DelegateCallAware, IBridge { +contract Bridge is AbsBridge, IEthBridge { using AddressUpgradeable for address; - struct InOutInfo { - uint256 index; - bool allowed; - } - - mapping(address => InOutInfo) private allowedDelayedInboxesMap; - mapping(address => InOutInfo) private allowedOutboxesMap; - - address[] public allowedDelayedInboxList; - address[] public allowedOutboxList; - - address internal _activeOutbox; - - /// @inheritdoc IBridge - bytes32[] public delayedInboxAccs; - - /// @inheritdoc IBridge - bytes32[] public sequencerInboxAccs; - - IOwnable public rollup; - address public sequencerInbox; - - uint256 public override sequencerReportedSubMessageCount; - - address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - + /// @inheritdoc IEthBridge function initialize(IOwnable rollup_) external initializer onlyDelegated { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; } - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { - rollup = _rollup; - } - - modifier onlyRollupOrOwner() { - if (msg.sender != address(rollup)) { - address rollupOwner = rollup.owner(); - if (msg.sender != rollupOwner) { - revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); - } - } - _; - } - - /// @dev returns the address of current active Outbox, or zero if no outbox is active - function activeOutbox() public view returns (address) { - address outbox = _activeOutbox; - // address zero is returned if no outbox is set, but the value used in storage - // is non-zero to save users some gas (as storage refunds are usually maxed out) - // EIP-1153 would help here. - // we don't return `EMPTY_ACTIVEOUTBOX` to avoid a breaking change on the current api - if (outbox == EMPTY_ACTIVEOUTBOX) return address(0); - return outbox; - } - - function allowedDelayedInboxes(address inbox) external view returns (bool) { - return allowedDelayedInboxesMap[inbox].allowed; - } - - function allowedOutboxes(address outbox) external view returns (bool) { - return allowedOutboxesMap[outbox].allowed; - } - - modifier onlySequencerInbox() { - if (msg.sender != sequencerInbox) revert NotSequencerInbox(msg.sender); - _; - } - - function enqueueSequencerMessage( - bytes32 dataHash, - uint256 afterDelayedMessagesRead, - uint256 prevMessageCount, - uint256 newMessageCount - ) - external - onlySequencerInbox - returns ( - uint256 seqMessageIndex, - bytes32 beforeAcc, - bytes32 delayedAcc, - bytes32 acc - ) - { - if ( - sequencerReportedSubMessageCount != prevMessageCount && - prevMessageCount != 0 && - sequencerReportedSubMessageCount != 0 - ) { - revert BadSequencerMessageNumber(sequencerReportedSubMessageCount, prevMessageCount); - } - sequencerReportedSubMessageCount = newMessageCount; - seqMessageIndex = sequencerInboxAccs.length; - if (sequencerInboxAccs.length > 0) { - beforeAcc = sequencerInboxAccs[sequencerInboxAccs.length - 1]; - } - if (afterDelayedMessagesRead > 0) { - delayedAcc = delayedInboxAccs[afterDelayedMessagesRead - 1]; - } - acc = keccak256(abi.encodePacked(beforeAcc, dataHash, delayedAcc)); - sequencerInboxAccs.push(acc); - } - - /// @inheritdoc IBridge - function submitBatchSpendingReport(address sender, bytes32 messageDataHash) - external - onlySequencerInbox - returns (uint256) - { - return - addMessageToDelayedAccumulator( - L1MessageType_batchPostingReport, - sender, - uint64(block.number), - uint64(block.timestamp), // solhint-disable-line not-rely-on-time, - block.basefee, - messageDataHash - ); - } - - /// @inheritdoc IBridge + /// @inheritdoc IEthBridge function enqueueDelayedMessage( uint8 kind, address sender, bytes32 messageDataHash ) external payable returns (uint256) { - if (!allowedDelayedInboxesMap[msg.sender].allowed) revert NotDelayedInbox(msg.sender); - return - addMessageToDelayedAccumulator( - kind, - sender, - uint64(block.number), - uint64(block.timestamp), // solhint-disable-line not-rely-on-time - block.basefee, - messageDataHash - ); + return _enqueueDelayedMessage(kind, sender, messageDataHash, msg.value); } - function addMessageToDelayedAccumulator( - uint8 kind, - address sender, - uint64 blockNumber, - uint64 blockTimestamp, - uint256 baseFeeL1, - bytes32 messageDataHash - ) internal returns (uint256) { - uint256 count = delayedInboxAccs.length; - bytes32 messageHash = Messages.messageHash( - kind, - sender, - blockNumber, - blockTimestamp, - count, - baseFeeL1, - messageDataHash - ); - bytes32 prevAcc = 0; - if (count > 0) { - prevAcc = delayedInboxAccs[count - 1]; - } - delayedInboxAccs.push(Messages.accumulateInboxMessage(prevAcc, messageHash)); - emit MessageDelivered( - count, - prevAcc, - msg.sender, - kind, - sender, - messageDataHash, - baseFeeL1, - blockTimestamp - ); - return count; + function _transferFunds(uint256) internal override { + // do nothing as Eth transfer is part of TX execution } - function executeCall( + function _executeLowLevelCall( address to, uint256 value, - bytes calldata data - ) external returns (bool success, bytes memory returnData) { - if (!allowedOutboxesMap[msg.sender].allowed) revert NotOutbox(msg.sender); - if (data.length > 0 && !to.isContract()) revert NotContract(to); - address prevOutbox = _activeOutbox; - _activeOutbox = msg.sender; - // We set and reset active outbox around external call so activeOutbox remains valid during call - - // We use a low level call here since we want to bubble up whether it succeeded or failed to the caller - // rather than reverting on failure as well as allow contract and non-contract calls + bytes memory data + ) internal override returns (bool success, bytes memory returnData) { // solhint-disable-next-line avoid-low-level-calls (success, returnData) = to.call{value: value}(data); - _activeOutbox = prevOutbox; - emit BridgeCallTriggered(msg.sender, to, value, data); - } - - function setSequencerInbox(address _sequencerInbox) external onlyRollupOrOwner { - sequencerInbox = _sequencerInbox; - emit SequencerInboxUpdated(_sequencerInbox); } - function setDelayedInbox(address inbox, bool enabled) external onlyRollupOrOwner { - InOutInfo storage info = allowedDelayedInboxesMap[inbox]; - bool alreadyEnabled = info.allowed; - emit InboxToggle(inbox, enabled); - if (alreadyEnabled == enabled) { - return; - } - if (enabled) { - allowedDelayedInboxesMap[inbox] = InOutInfo(allowedDelayedInboxList.length, true); - allowedDelayedInboxList.push(inbox); - } else { - allowedDelayedInboxList[info.index] = allowedDelayedInboxList[ - allowedDelayedInboxList.length - 1 - ]; - allowedDelayedInboxesMap[allowedDelayedInboxList[info.index]].index = info.index; - allowedDelayedInboxList.pop(); - delete allowedDelayedInboxesMap[inbox]; - } + function _baseFeeToReport() internal view override returns (uint256) { + return block.basefee; } - - function setOutbox(address outbox, bool enabled) external onlyRollupOrOwner { - if (outbox == EMPTY_ACTIVEOUTBOX) revert InvalidOutboxSet(outbox); - - InOutInfo storage info = allowedOutboxesMap[outbox]; - bool alreadyEnabled = info.allowed; - emit OutboxToggle(outbox, enabled); - if (alreadyEnabled == enabled) { - return; - } - if (enabled) { - allowedOutboxesMap[outbox] = InOutInfo(allowedOutboxList.length, true); - allowedOutboxList.push(outbox); - } else { - allowedOutboxList[info.index] = allowedOutboxList[allowedOutboxList.length - 1]; - allowedOutboxesMap[allowedOutboxList[info.index]].index = info.index; - allowedOutboxList.pop(); - delete allowedOutboxesMap[outbox]; - } - } - - function setSequencerReportedSubMessageCount(uint256 newMsgCount) external onlyRollupOrOwner { - sequencerReportedSubMessageCount = newMsgCount; - } - - function delayedMessageCount() external view override returns (uint256) { - return delayedInboxAccs.length; - } - - function sequencerMessageCount() external view returns (uint256) { - return sequencerInboxAccs.length; - } - - /// @dev For the classic -> nitro migration. TODO: remove post-migration. - function acceptFundsFromOldBridge() external payable {} } diff --git a/contracts/src/bridge/ERC20Bridge.sol b/contracts/src/bridge/ERC20Bridge.sol new file mode 100644 index 000000000..411207503 --- /dev/null +++ b/contracts/src/bridge/ERC20Bridge.sol @@ -0,0 +1,91 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsBridge.sol"; +import "./IERC20Bridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import {InvalidTokenSet, CallTargetNotAllowed, CallNotAllowed} from "../libraries/Error.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title Staging ground for incoming and outgoing messages + * @notice Unlike the standard Eth bridge, native token bridge escrows the custom ERC20 token which is + * used as native currency on L2. + * @dev Fees are paid in this token. There are certain restrictions on the native token: + * - The token can't be rebasing or have a transfer fee + * - The token must only be transferrable via a call to the token address itself + * - The token must only be able to set allowance via a call to the token address itself + * - The token must not have a callback on transfer, and more generally a user must not be able to make a transfer to themselves revert + */ +contract ERC20Bridge is AbsBridge, IERC20Bridge { + using SafeERC20 for IERC20; + + /// @inheritdoc IERC20Bridge + address public nativeToken; + + /// @inheritdoc IERC20Bridge + function initialize(IOwnable rollup_, address nativeToken_) external initializer onlyDelegated { + if (nativeToken_ == address(0)) revert InvalidTokenSet(nativeToken_); + nativeToken = nativeToken_; + _activeOutbox = EMPTY_ACTIVEOUTBOX; + rollup = rollup_; + } + + /// @inheritdoc IERC20Bridge + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenFeeAmount + ) external returns (uint256) { + return _enqueueDelayedMessage(kind, sender, messageDataHash, tokenFeeAmount); + } + + function _transferFunds(uint256 amount) internal override { + // fetch native token from Inbox + IERC20(nativeToken).safeTransferFrom(msg.sender, address(this), amount); + } + + function _executeLowLevelCall( + address to, + uint256 value, + bytes memory data + ) internal override returns (bool success, bytes memory returnData) { + address _nativeToken = nativeToken; + + // we don't allow outgoing calls to native token contract because it could + // result in loss of native tokens which are escrowed by ERC20Bridge + if (to == _nativeToken) { + revert CallTargetNotAllowed(_nativeToken); + } + + // first release native token + IERC20(_nativeToken).safeTransfer(to, value); + success = true; + + // if there's data do additional contract call. Make sure that call is not used to + // decrease bridge contract's balance of the native token + if (data.length > 0) { + uint256 bridgeBalanceBefore = IERC20(_nativeToken).balanceOf(address(this)); + + // solhint-disable-next-line avoid-low-level-calls + (success, returnData) = to.call(data); + + uint256 bridgeBalanceAfter = IERC20(_nativeToken).balanceOf(address(this)); + if (bridgeBalanceAfter < bridgeBalanceBefore) { + revert CallNotAllowed(); + } + } + } + + function _baseFeeToReport() internal pure override returns (uint256) { + // ArbOs uses formula 'l1BaseFee * (1400 + 6 * calldataLengthInBytes)' to calculate retryable ticket's + // submission fee. When custom ERC20 token is used to pay for fees, submission fee shall be 0. That's + // why baseFee is reported as 0 here. + return 0; + } +} diff --git a/contracts/src/bridge/ERC20Inbox.sol b/contracts/src/bridge/ERC20Inbox.sol new file mode 100644 index 000000000..b9a95e4a2 --- /dev/null +++ b/contracts/src/bridge/ERC20Inbox.sol @@ -0,0 +1,144 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsInbox.sol"; +import "./IERC20Inbox.sol"; +import "./IERC20Bridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import {L1MessageType_ethDeposit} from "../libraries/MessageTypes.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title Inbox for user and contract originated messages + * @notice Messages created via this inbox are enqueued in the delayed accumulator + * to await inclusion in the SequencerInbox + */ +contract ERC20Inbox is AbsInbox, IERC20Inbox { + using SafeERC20 for IERC20; + + constructor(uint256 _maxDataSize) AbsInbox(_maxDataSize) {} + + /// @inheritdoc IInboxBase + function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) + external + initializer + onlyDelegated + { + __AbsInbox_init(_bridge, _sequencerInbox); + + // inbox holds native token in transit used to pay for retryable tickets, approve bridge to use it + address nativeToken = IERC20Bridge(address(bridge)).nativeToken(); + IERC20(nativeToken).approve(address(bridge), type(uint256).max); + } + + /// @inheritdoc IERC20Inbox + function depositERC20(uint256 amount) public whenNotPaused onlyAllowed returns (uint256) { + address dest = msg.sender; + + // solhint-disable-next-line avoid-tx-origin + if (AddressUpgradeable.isContract(msg.sender) || tx.origin != msg.sender) { + // isContract check fails if this function is called during a contract's constructor. + dest = AddressAliasHelper.applyL1ToL2Alias(msg.sender); + } + + return + _deliverMessage( + L1MessageType_ethDeposit, + msg.sender, + abi.encodePacked(dest, amount), + amount + ); + } + + /// @inheritdoc IERC20Inbox + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + return + _createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ); + } + + /// @inheritdoc IERC20Inbox + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) public whenNotPaused onlyAllowed returns (uint256) { + return + _unsafeCreateRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ); + } + + /// @inheritdoc IInboxBase + function calculateRetryableSubmissionFee(uint256, uint256) + public + pure + override(AbsInbox, IInboxBase) + returns (uint256) + { + // retryable ticket's submission fee is not charged when ERC20 token is used to pay for fees + return 0; + } + + function _deliverToBridge( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenAmount + ) internal override returns (uint256) { + // Fetch native token from sender if inbox doesn't already hold enough tokens to pay for fees. + // Inbox might have been pre-funded in prior call, ie. as part of token bridging flow. + address nativeToken = IERC20Bridge(address(bridge)).nativeToken(); + uint256 inboxNativeTokenBalance = IERC20(nativeToken).balanceOf(address(this)); + if (inboxNativeTokenBalance < tokenAmount) { + uint256 diff = tokenAmount - inboxNativeTokenBalance; + IERC20(nativeToken).safeTransferFrom(msg.sender, address(this), diff); + } + + return + IERC20Bridge(address(bridge)).enqueueDelayedMessage( + kind, + AddressAliasHelper.applyL1ToL2Alias(sender), + messageDataHash, + tokenAmount + ); + } +} diff --git a/contracts/src/bridge/ERC20Outbox.sol b/contracts/src/bridge/ERC20Outbox.sol new file mode 100644 index 000000000..9678a7caf --- /dev/null +++ b/contracts/src/bridge/ERC20Outbox.sol @@ -0,0 +1,30 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsOutbox.sol"; + +contract ERC20Outbox is AbsOutbox { + // it is assumed that arb-os never assigns this value to a valid leaf to be redeemed + uint256 private constant AMOUNT_DEFAULT_CONTEXT = type(uint256).max; + + function l2ToL1WithdrawalAmount() external view returns (uint256) { + uint256 amount = context.withdrawalAmount; + if (amount == AMOUNT_DEFAULT_CONTEXT) return 0; + return amount; + } + + /// @inheritdoc AbsOutbox + function _defaultContextAmount() internal pure override returns (uint256) { + // we use type(uint256).max as representation of 0 native token withdrawal amount + return AMOUNT_DEFAULT_CONTEXT; + } + + /// @inheritdoc AbsOutbox + function _amountToSetInContext(uint256 value) internal pure override returns (uint256) { + // native token withdrawal amount which can be fetched from context + return value; + } +} diff --git a/contracts/src/bridge/GasRefunder.sol b/contracts/src/bridge/GasRefunder.sol new file mode 100644 index 000000000..5f85e9f2c --- /dev/null +++ b/contracts/src/bridge/GasRefunder.sol @@ -0,0 +1,257 @@ +// SPDX-License-Identifier: Apache-2.0 + +/* + * Copyright 2021, Offchain Labs, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +pragma solidity ^0.8.7; + +import "../libraries/IGasRefunder.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + * @notice DEPRECATED - only for classic version, see new repo (https://github.com/OffchainLabs/nitro/tree/master/contracts) + * for new updates + */ +contract GasRefunder is IGasRefunder, Ownable { + mapping(address => bool) public allowedContracts; + mapping(address => bool) public allowedRefundees; + address public disallower; + + struct CommonParameters { + uint128 maxRefundeeBalance; + uint32 extraGasMargin; + uint8 calldataCost; + uint64 maxGasTip; + uint64 maxGasCost; + uint32 maxSingleGasUsage; + } + + CommonParameters public commonParams; + + enum CommonParameterKey { + MAX_REFUNDEE_BALANCE, + EXTRA_GAS_MARGIN, + CALLDATA_COST, + MAX_GAS_TIP, + MAX_GAS_COST, + MAX_SINGLE_GAS_USAGE + } + + enum RefundDenyReason { + CONTRACT_NOT_ALLOWED, + REFUNDEE_NOT_ALLOWED, + REFUNDEE_ABOVE_MAX_BALANCE, + OUT_OF_FUNDS + } + + event RefundedGasCosts( + address indexed refundee, + address indexed contractAddress, + bool indexed success, + uint256 gas, + uint256 gasPrice, + uint256 amountPaid + ); + event RefundGasCostsDenied( + address indexed refundee, + address indexed contractAddress, + RefundDenyReason indexed reason, + uint256 gas + ); + event Deposited(address sender, uint256 amount); + event Withdrawn(address initiator, address destination, uint256 amount); + event ContractAllowedSet(address indexed addr, bool indexed allowed); + event RefundeeAllowedSet(address indexed addr, bool indexed allowed); + event DisallowerSet(address indexed addr); + event CommonParameterSet(CommonParameterKey indexed parameter, uint256 value); + + constructor() Ownable() { + commonParams = CommonParameters({ + maxRefundeeBalance: 0, // no limit + extraGasMargin: 4000, // 4k gas + calldataCost: 12, // Between 4 for zero bytes and 16 for non-zero bytes + maxGasTip: 2 gwei, + maxGasCost: 120 gwei, + maxSingleGasUsage: 2e6 // 2 million gas + }); + } + + function setDisallower(address addr) external onlyOwner { + disallower = addr; + emit DisallowerSet(addr); + } + + function allowContracts(address[] calldata addresses) external onlyOwner { + setContractsAllowedImpl(addresses, true); + } + + function disallowContracts(address[] calldata addresses) external { + require(msg.sender == owner() || msg.sender == disallower, "NOT_AUTHORIZED"); + setContractsAllowedImpl(addresses, false); + } + + function setContractsAllowedImpl(address[] calldata addresses, bool allow) internal { + for (uint256 i = 0; i < addresses.length; i++) { + address addr = addresses[i]; + allowedContracts[addr] = allow; + emit ContractAllowedSet(addr, allow); + } + } + + function allowRefundees(address[] calldata addresses) external onlyOwner { + setRefundeesAllowedImpl(addresses, true); + } + + function disallowRefundees(address[] calldata addresses) external { + require(msg.sender == owner() || msg.sender == disallower, "NOT_AUTHORIZED"); + setRefundeesAllowedImpl(addresses, false); + } + + function setRefundeesAllowedImpl(address[] calldata addresses, bool allow) internal { + for (uint256 i = 0; i < addresses.length; i++) { + address addr = addresses[i]; + allowedRefundees[addr] = allow; + emit RefundeeAllowedSet(addr, allow); + } + } + + function setMaxRefundeeBalance(uint128 newValue) external onlyOwner { + commonParams.maxRefundeeBalance = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_REFUNDEE_BALANCE, newValue); + } + + function setExtraGasMargin(uint32 newValue) external onlyOwner { + commonParams.extraGasMargin = newValue; + emit CommonParameterSet(CommonParameterKey.EXTRA_GAS_MARGIN, newValue); + } + + function setCalldataCost(uint8 newValue) external onlyOwner { + commonParams.calldataCost = newValue; + emit CommonParameterSet(CommonParameterKey.CALLDATA_COST, newValue); + } + + function setMaxGasTip(uint64 newValue) external onlyOwner { + commonParams.maxGasTip = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_GAS_TIP, newValue); + } + + function setMaxGasCost(uint64 newValue) external onlyOwner { + commonParams.maxGasCost = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_GAS_COST, newValue); + } + + function setMaxSingleGasUsage(uint32 newValue) external onlyOwner { + commonParams.maxSingleGasUsage = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_SINGLE_GAS_USAGE, newValue); + } + + receive() external payable { + emit Deposited(msg.sender, msg.value); + } + + function withdraw(address payable destination, uint256 amount) external onlyOwner { + // It's expected that destination is an EOA + // solhint-disable-next-line avoid-low-level-calls + (bool success, ) = destination.call{value: amount}(""); + require(success, "WITHDRAW_FAILED"); + emit Withdrawn(msg.sender, destination, amount); + } + + function onGasSpent( + address payable refundee, + uint256 gasUsed, + uint256 calldataSize + ) external override returns (bool success) { + uint256 startGasLeft = gasleft(); + + uint256 ownBalance = address(this).balance; + + if (ownBalance == 0) { + emit RefundGasCostsDenied(refundee, msg.sender, RefundDenyReason.OUT_OF_FUNDS, gasUsed); + return false; + } + + if (!allowedContracts[msg.sender]) { + emit RefundGasCostsDenied( + refundee, + msg.sender, + RefundDenyReason.CONTRACT_NOT_ALLOWED, + gasUsed + ); + return false; + } + if (!allowedRefundees[refundee]) { + emit RefundGasCostsDenied( + refundee, + msg.sender, + RefundDenyReason.REFUNDEE_NOT_ALLOWED, + gasUsed + ); + return false; + } + + uint256 estGasPrice = block.basefee + commonParams.maxGasTip; + if (tx.gasprice < estGasPrice) { + estGasPrice = tx.gasprice; + } + if (commonParams.maxGasCost != 0 && estGasPrice > commonParams.maxGasCost) { + estGasPrice = commonParams.maxGasCost; + } + + // Retrieve these variables before measuring gasleft() + uint256 refundeeBalance = refundee.balance; + uint256 maxRefundeeBalance = commonParams.maxRefundeeBalance; + uint256 maxSingleGasUsage = commonParams.maxSingleGasUsage; + + // Add in a bit of a buffer for the tx costs not measured with gasleft + gasUsed += + startGasLeft + + commonParams.extraGasMargin + + (calldataSize * commonParams.calldataCost); + // Split this up into two statements so that gasleft() comes after the storage loads + gasUsed -= gasleft(); + + if (maxSingleGasUsage != 0 && gasUsed > maxSingleGasUsage) { + gasUsed = maxSingleGasUsage; + } + + uint256 refundAmount = estGasPrice * gasUsed; + if (maxRefundeeBalance != 0 && refundeeBalance + refundAmount > maxRefundeeBalance) { + if (refundeeBalance > maxRefundeeBalance) { + // The refundee is already above their max balance + // emit RefundGasCostsDenied( + // refundee, + // msg.sender, + // RefundDenyReason.REFUNDEE_ABOVE_MAX_BALANCE, + // gasUsed + // ); + return false; + } else { + refundAmount = maxRefundeeBalance - refundeeBalance; + } + } + + if (refundAmount > ownBalance) { + refundAmount = ownBalance; + } + + // It's expected that refundee is an EOA + // solhint-disable-next-line avoid-low-level-calls + (success, ) = refundee.call{value: refundAmount}(""); + emit RefundedGasCosts(refundee, msg.sender, success, gasUsed, estGasPrice, refundAmount); + } +} diff --git a/contracts/src/bridge/IBridge.sol b/contracts/src/bridge/IBridge.sol index 3e33be2b4..1137fcd36 100644 --- a/contracts/src/bridge/IBridge.sol +++ b/contracts/src/bridge/IBridge.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version @@ -8,6 +8,28 @@ pragma solidity >=0.6.9 <0.9.0; import "./IOwnable.sol"; interface IBridge { + /// @dev This is an instruction to offchain readers to inform them where to look + /// for sequencer inbox batch data. This is not the type of data (eg. das, brotli encoded, or blob versioned hash) + /// and this enum is not used in the state transition function, rather it informs an offchain + /// reader where to find the data so that they can supply it to the replay binary + enum BatchDataLocation { + /// @notice The data can be found in the transaction call data + TxInput, + /// @notice The data can be found in an event emitted during the transaction + SeparateBatchEvent, + /// @notice This batch contains no data + NoData, + /// @notice The data can be found in the 4844 data blobs on this transaction + Blob + } + + struct TimeBounds { + uint64 minTimestamp; + uint64 maxTimestamp; + uint64 minBlockNumber; + uint64 maxBlockNumber; + } + event MessageDelivered( uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, @@ -32,6 +54,8 @@ interface IBridge { event SequencerInboxUpdated(address newSequencerInbox); + event RollupUpdated(address rollup); + function allowedDelayedInboxList(uint256) external returns (address); function allowedOutboxList(uint256) external returns (address); @@ -54,17 +78,6 @@ interface IBridge { function sequencerReportedSubMessageCount() external view returns (uint256); - /** - * @dev Enqueue a message in the delayed inbox accumulator. - * These messages are later sequenced in the SequencerInbox, either - * by the sequencer as part of a normal batch, or by force inclusion. - */ - function enqueueDelayedMessage( - uint8 kind, - address sender, - bytes32 messageDataHash - ) external payable returns (uint256); - function executeCall( address to, uint256 value, @@ -109,9 +122,5 @@ interface IBridge { function setOutbox(address inbox, bool enabled) external; - // ---------- initializer ---------- - - function initialize(IOwnable rollup_) external; - function updateRollupAddress(IOwnable _rollup) external; } diff --git a/contracts/src/bridge/IDelayedMessageProvider.sol b/contracts/src/bridge/IDelayedMessageProvider.sol index 9e650c872..a03601aa6 100644 --- a/contracts/src/bridge/IDelayedMessageProvider.sol +++ b/contracts/src/bridge/IDelayedMessageProvider.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version diff --git a/contracts/src/bridge/IERC20Bridge.sol b/contracts/src/bridge/IERC20Bridge.sol new file mode 100644 index 000000000..f2d2e426e --- /dev/null +++ b/contracts/src/bridge/IERC20Bridge.sol @@ -0,0 +1,37 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IOwnable.sol"; +import "./IBridge.sol"; + +interface IERC20Bridge is IBridge { + /** + * @dev token that is escrowed in bridge on L1 side and minted on L2 as native currency. + * Fees are paid in this token. There are certain restrictions on the native token: + * - The token can't be rebasing or have a transfer fee + * - The token must only be transferrable via a call to the token address itself + * - The token must only be able to set allowance via a call to the token address itself + * - The token must not have a callback on transfer, and more generally a user must not be able to make a transfer to themselves revert + */ + function nativeToken() external view returns (address); + + /** + * @dev Enqueue a message in the delayed inbox accumulator. + * These messages are later sequenced in the SequencerInbox, either + * by the sequencer as part of a normal batch, or by force inclusion. + */ + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenFeeAmount + ) external returns (uint256); + + // ---------- initializer ---------- + + function initialize(IOwnable rollup_, address nativeToken_) external; +} diff --git a/contracts/src/bridge/IERC20Inbox.sol b/contracts/src/bridge/IERC20Inbox.sol new file mode 100644 index 000000000..a8aa746f5 --- /dev/null +++ b/contracts/src/bridge/IERC20Inbox.sol @@ -0,0 +1,75 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IInboxBase.sol"; + +interface IERC20Inbox is IInboxBase { + /** + * @notice Deposit native token from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + * @dev This function should not be called inside contract constructors + */ + function depositERC20(uint256 amount) external returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev all tokenTotalFeeAmount will be deposited to callValueRefundAddress on L2 + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param tokenTotalFeeAmount amount of fees to be deposited in native token to cover for retryable ticket cost + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds + * come from the deposit alone, rather than falling back on the user's L2 balance + * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). + * createRetryableTicket method is the recommended standard. + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param tokenTotalFeeAmount amount of fees to be deposited in native token to cover for retryable ticket cost + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external returns (uint256); +} diff --git a/contracts/src/bridge/IEthBridge.sol b/contracts/src/bridge/IEthBridge.sol new file mode 100644 index 000000000..d9115b0eb --- /dev/null +++ b/contracts/src/bridge/IEthBridge.sol @@ -0,0 +1,26 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IOwnable.sol"; +import "./IBridge.sol"; + +interface IEthBridge is IBridge { + /** + * @dev Enqueue a message in the delayed inbox accumulator. + * These messages are later sequenced in the SequencerInbox, either + * by the sequencer as part of a normal batch, or by force inclusion. + */ + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash + ) external payable returns (uint256); + + // ---------- initializer ---------- + + function initialize(IOwnable rollup_) external; +} diff --git a/contracts/src/bridge/IInbox.sol b/contracts/src/bridge/IInbox.sol index dd3415206..d267c5d29 100644 --- a/contracts/src/bridge/IInbox.sol +++ b/contracts/src/bridge/IInbox.sol @@ -1,37 +1,14 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version pragma solidity >=0.6.9 <0.9.0; import "./IBridge.sol"; -import "./IDelayedMessageProvider.sol"; -import "./ISequencerInbox.sol"; - -interface IInbox is IDelayedMessageProvider { - function bridge() external view returns (IBridge); - - function sequencerInbox() external view returns (ISequencerInbox); - - function maxDataSize() external view returns (uint256); - - /** - * @notice Send a generic L2 message to the chain - * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input - * This method will be disabled upon L1 fork to prevent replay attacks on L2 - * @param messageData Data of the message being sent - */ - function sendL2MessageFromOrigin(bytes calldata messageData) external returns (uint256); - - /** - * @notice Send a generic L2 message to the chain - * @dev This method can be used to send any type of message that doesn't require L1 validation - * This method will be disabled upon L1 fork to prevent replay attacks on L2 - * @param messageData Data of the message being sent - */ - function sendL2Message(bytes calldata messageData) external returns (uint256); +import "./IInboxBase.sol"; +interface IInbox is IInboxBase { function sendL1FundedUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -47,23 +24,6 @@ interface IInbox is IDelayedMessageProvider { bytes calldata data ) external payable returns (uint256); - function sendUnsignedTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - uint256 value, - bytes calldata data - ) external returns (uint256); - - function sendContractTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - address to, - uint256 value, - bytes calldata data - ) external returns (uint256); - /** * @dev This method can only be called upon L1 fork and will not alias the caller * This method will revert if not called from origin @@ -102,18 +62,6 @@ interface IInbox is IDelayedMessageProvider { address withdrawTo ) external returns (uint256); - /** - * @notice Get the L1 fee for submitting a retryable - * @dev This fee can be paid by funds already in the L2 aliased address or by the current message value - * @dev This formula may change in the future, to future proof your code query this method instead of inlining!! - * @param dataLength The length of the retryable's calldata, in bytes - * @param baseFee The block basefee when the retryable is included in the chain, if 0 current block.basefee will be used - */ - function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) - external - view - returns (uint256); - /** * @notice Deposit eth from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract * @dev This does not trigger the fallback function when receiving in the L2 side. @@ -175,14 +123,6 @@ interface IInbox is IDelayedMessageProvider { bytes calldata data ) external payable returns (uint256); - // ---------- onlyRollupOrOwner functions ---------- - - /// @notice pauses all inbox functionality - function pause() external; - - /// @notice unpauses all inbox functionality - function unpause() external; - // ---------- initializer ---------- /** @@ -190,6 +130,4 @@ interface IInbox is IDelayedMessageProvider { * this is used to fix the storage slots */ function postUpgradeInit(IBridge _bridge) external; - - function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; } diff --git a/contracts/src/bridge/IInboxBase.sol b/contracts/src/bridge/IInboxBase.sol new file mode 100644 index 000000000..c9775a361 --- /dev/null +++ b/contracts/src/bridge/IInboxBase.sol @@ -0,0 +1,86 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IBridge.sol"; +import "./IDelayedMessageProvider.sol"; +import "./ISequencerInbox.sol"; + +interface IInboxBase is IDelayedMessageProvider { + function bridge() external view returns (IBridge); + + function sequencerInbox() external view returns (ISequencerInbox); + + function maxDataSize() external view returns (uint256); + + /** + * @notice Send a generic L2 message to the chain + * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input + * @param messageData Data of the message being sent + */ + function sendL2MessageFromOrigin(bytes calldata messageData) external returns (uint256); + + /** + * @notice Send a generic L2 message to the chain + * @dev This method can be used to send any type of message that doesn't require L1 validation + * @param messageData Data of the message being sent + */ + function sendL2Message(bytes calldata messageData) external returns (uint256); + + function sendUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + uint256 value, + bytes calldata data + ) external returns (uint256); + + function sendContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + uint256 value, + bytes calldata data + ) external returns (uint256); + + /** + * @notice Get the L1 fee for submitting a retryable + * @dev This fee can be paid by funds already in the L2 aliased address or by the current message value + * @dev This formula may change in the future, to future proof your code query this method instead of inlining!! + * @param dataLength The length of the retryable's calldata, in bytes + * @param baseFee The block basefee when the retryable is included in the chain, if 0 current block.basefee will be used + */ + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + external + view + returns (uint256); + + // ---------- onlyRollupOrOwner functions ---------- + + /// @notice pauses all inbox functionality + function pause() external; + + /// @notice unpauses all inbox functionality + function unpause() external; + + /// @notice add or remove users from allowList + function setAllowList(address[] memory user, bool[] memory val) external; + + /// @notice enable or disable allowList + function setAllowListEnabled(bool _allowListEnabled) external; + + /// @notice check if user is in allowList + function isAllowed(address user) external view returns (bool); + + /// @notice check if allowList is enabled + function allowListEnabled() external view returns (bool); + + function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; + + /// @notice returns the current admin + function getProxyAdmin() external view returns (address); +} diff --git a/contracts/src/bridge/IOutbox.sol b/contracts/src/bridge/IOutbox.sol index 1a748401c..41d0b5942 100644 --- a/contracts/src/bridge/IOutbox.sol +++ b/contracts/src/bridge/IOutbox.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version @@ -16,6 +16,8 @@ interface IOutbox { uint256 transactionIndex ); + function initialize(IBridge _bridge) external; + function rollup() external view returns (address); // the rollup contract function bridge() external view returns (IBridge); // the bridge contract @@ -28,7 +30,7 @@ interface IOutbox { function OUTBOX_VERSION() external view returns (uint128); // the outbox version function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external; - + function updateRollupAddress() external; /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account @@ -119,4 +121,10 @@ interface IOutbox { uint256 path, bytes32 item ) external pure returns (bytes32); + + /** + * @dev function to be called one time during the outbox upgrade process + * this is used to fix the storage slots + */ + function postUpgradeInit() external; } diff --git a/contracts/src/bridge/IOwnable.sol b/contracts/src/bridge/IOwnable.sol index 20735f0dd..10bfc5e90 100644 --- a/contracts/src/bridge/IOwnable.sol +++ b/contracts/src/bridge/IOwnable.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version diff --git a/contracts/src/bridge/ISequencerInbox.sol b/contracts/src/bridge/ISequencerInbox.sol index 58891319d..47db30f00 100644 --- a/contracts/src/bridge/ISequencerInbox.sol +++ b/contracts/src/bridge/ISequencerInbox.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version @@ -18,27 +18,14 @@ interface ISequencerInbox is IDelayedMessageProvider { uint256 futureSeconds; } - struct TimeBounds { - uint64 minTimestamp; - uint64 maxTimestamp; - uint64 minBlockNumber; - uint64 maxBlockNumber; - } - - enum BatchDataLocation { - TxInput, - SeparateBatchEvent, - NoData - } - event SequencerBatchDelivered( uint256 indexed batchSequenceNumber, bytes32 indexed beforeAcc, bytes32 indexed afterAcc, bytes32 delayedAcc, uint256 afterDelayedMessagesRead, - TimeBounds timeBounds, - BatchDataLocation dataLocation + IBridge.TimeBounds timeBounds, + IBridge.BatchDataLocation dataLocation ); event OwnerFunctionCalled(uint256 indexed id); @@ -61,10 +48,41 @@ interface ISequencerInbox is IDelayedMessageProvider { function HEADER_LENGTH() external view returns (uint256); /// @dev If the first batch data byte after the header has this bit set, - /// the sequencer inbox has authenticated the data. Currently not used. + /// the sequencer inbox has authenticated the data. Currently only used for 4844 blob support. + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go // solhint-disable-next-line func-name-mixedcase function DATA_AUTHENTICATED_FLAG() external view returns (bytes1); + /// @dev If the first data byte after the header has this bit set, + /// then the batch data is to be found in 4844 data blobs + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go + // solhint-disable-next-line func-name-mixedcase + function DATA_BLOB_HEADER_FLAG() external view returns (bytes1); + + /// @dev If the first data byte after the header has this bit set, + /// then the batch data is a das message + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go + // solhint-disable-next-line func-name-mixedcase + function DAS_MESSAGE_HEADER_FLAG() external view returns (bytes1); + + /// @dev If the first data byte after the header has this bit set, + /// then the batch data is a das message that employs a merklesization strategy + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go + // solhint-disable-next-line func-name-mixedcase + function TREE_DAS_MESSAGE_HEADER_FLAG() external view returns (bytes1); + + /// @dev If the first data byte after the header has this bit set, + /// then the batch data has been brotli compressed + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go + // solhint-disable-next-line func-name-mixedcase + function BROTLI_MESSAGE_HEADER_FLAG() external view returns (bytes1); + + /// @dev If the first data byte after the header has this bit set, + /// then the batch data uses a zero heavy encoding + /// See: https://github.com/OffchainLabs/nitro/blob/69de0603abf6f900a4128cab7933df60cad54ded/arbstate/das_reader.go + // solhint-disable-next-line func-name-mixedcase + function ZERO_HEAVY_MESSAGE_HEADER_FLAG() external view returns (bytes1); + function rollup() external view returns (IOwnable); function isBatchPoster(address) external view returns (bool); @@ -73,19 +91,24 @@ interface ISequencerInbox is IDelayedMessageProvider { function maxDataSize() external view returns (uint256); + /// @notice The batch poster manager has the ability to change the batch poster addresses + /// This enables the batch poster to do key rotation + function batchPosterManager() external view returns (address); + struct DasKeySetInfo { bool isValidKeyset; uint64 creationBlock; } + /// @dev returns 4 uint256 to be compatible with older version function maxTimeVariation() external view returns ( - uint256, - uint256, - uint256, - uint256 + uint256 delayBlocks, + uint256 futureBlocks, + uint256 delaySeconds, + uint256 futureSeconds ); function dasKeySetInfo(bytes32) external view returns (bool, uint64); @@ -130,6 +153,15 @@ interface ISequencerInbox is IDelayedMessageProvider { IGasRefunder gasRefunder ) external; + function addSequencerL2BatchFromOrigin( + uint256 sequenceNumber, + bytes calldata data, + uint256 afterDelayedMessagesRead, + IGasRefunder gasRefunder, + uint256 prevMessageCount, + uint256 newMessageCount + ) external; + function addSequencerL2Batch( uint256 sequenceNumber, bytes calldata data, @@ -139,6 +171,14 @@ interface ISequencerInbox is IDelayedMessageProvider { uint256 newMessageCount ) external; + function addSequencerL2BatchFromBlobs( + uint256 sequenceNumber, + uint256 afterDelayedMessagesRead, + IGasRefunder gasRefunder, + uint256 prevMessageCount, + uint256 newMessageCount + ) external; + // ---------- onlyRollupOrOwner functions ---------- /** @@ -174,9 +214,16 @@ interface ISequencerInbox is IDelayedMessageProvider { */ function setIsSequencer(address addr, bool isSequencer_) external; + /** + * @notice Updates the batch poster manager, the address which has the ability to rotate batch poster keys + * @param newBatchPosterManager The new batch poster manager to be set + */ + function setBatchPosterManager(address newBatchPosterManager) external; + + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external; + // ---------- initializer ---------- function initialize(IBridge bridge_, MaxTimeVariation calldata maxTimeVariation_) external; - - function updateRollupAddress() external; } diff --git a/contracts/src/bridge/Inbox.sol b/contracts/src/bridge/Inbox.sol index e39196b24..f080e76e7 100644 --- a/contracts/src/bridge/Inbox.sol +++ b/contracts/src/bridge/Inbox.sol @@ -1,32 +1,24 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; import { - AlreadyInit, NotOrigin, DataTooLarge, - AlreadyPaused, - AlreadyUnpaused, - Paused, InsufficientValue, InsufficientSubmissionCost, - NotAllowedOrigin, RetryableData, - NotRollupOrOwner, L1Forked, NotForked, GasLimitTooLarge } from "../libraries/Error.sol"; +import "./AbsInbox.sol"; import "./IInbox.sol"; -import "./ISequencerInbox.sol"; import "./IBridge.sol"; - -import "./Messages.sol"; +import "./IEthBridge.sol"; import "../libraries/AddressAliasHelper.sol"; -import "../libraries/DelegateCallAware.sol"; import { L2_MSG, L1MessageType_L2FundedByL1, @@ -38,126 +30,28 @@ import { import "../precompiles/ArbSys.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; /** * @title Inbox for user and contract originated messages * @notice Messages created via this inbox are enqueued in the delayed accumulator * to await inclusion in the SequencerInbox */ -contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { - IBridge public bridge; - ISequencerInbox public sequencerInbox; - - /// ------------------------------------ allow list start ------------------------------------ /// - - bool public allowListEnabled; - mapping(address => bool) public isAllowed; - - event AllowListAddressSet(address indexed user, bool val); - event AllowListEnabledUpdated(bool isEnabled); - - function setAllowList(address[] memory user, bool[] memory val) external onlyRollupOrOwner { - require(user.length == val.length, "INVALID_INPUT"); - - for (uint256 i = 0; i < user.length; i++) { - isAllowed[user[i]] = val[i]; - emit AllowListAddressSet(user[i], val[i]); - } - } - - function setAllowListEnabled(bool _allowListEnabled) external onlyRollupOrOwner { - require(_allowListEnabled != allowListEnabled, "ALREADY_SET"); - allowListEnabled = _allowListEnabled; - emit AllowListEnabledUpdated(_allowListEnabled); - } - - /// @dev this modifier checks the tx.origin instead of msg.sender for convenience (ie it allows - /// allowed users to interact with the token bridge without needing the token bridge to be allowList aware). - /// this modifier is not intended to use to be used for security (since this opens the allowList to - /// a smart contract phishing risk). - modifier onlyAllowed() { - // solhint-disable-next-line avoid-tx-origin - if (allowListEnabled && !isAllowed[tx.origin]) revert NotAllowedOrigin(tx.origin); - _; - } - - /// ------------------------------------ allow list end ------------------------------------ /// - - modifier onlyRollupOrOwner() { - IOwnable rollup = bridge.rollup(); - if (msg.sender != address(rollup)) { - address rollupOwner = rollup.owner(); - if (msg.sender != rollupOwner) { - revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); - } - } - _; - } - - // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving - uint256 public immutable maxDataSize; - uint256 internal immutable deployTimeChainId = block.chainid; - - constructor(uint256 _maxDataSize) { - maxDataSize = _maxDataSize; - } - - function _chainIdChanged() internal view returns (bool) { - return deployTimeChainId != block.chainid; - } - - /// @inheritdoc IInbox - function pause() external onlyRollupOrOwner { - _pause(); - } - - /// @inheritdoc IInbox - function unpause() external onlyRollupOrOwner { - _unpause(); - } +contract Inbox is AbsInbox, IInbox { + constructor(uint256 _maxDataSize) AbsInbox(_maxDataSize) {} + /// @inheritdoc IInboxBase function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external initializer onlyDelegated { - bridge = _bridge; - sequencerInbox = _sequencerInbox; - allowListEnabled = false; - __Pausable_init(); + __AbsInbox_init(_bridge, _sequencerInbox); } /// @inheritdoc IInbox function postUpgradeInit(IBridge) external onlyDelegated onlyProxyOwner {} /// @inheritdoc IInbox - function sendL2MessageFromOrigin(bytes calldata messageData) - external - whenNotPaused - onlyAllowed - returns (uint256) - { - if (_chainIdChanged()) revert L1Forked(); - // solhint-disable-next-line avoid-tx-origin - if (msg.sender != tx.origin) revert NotOrigin(); - if (messageData.length > maxDataSize) revert DataTooLarge(messageData.length, maxDataSize); - uint256 msgNum = deliverToBridge(L2_MSG, msg.sender, keccak256(messageData)); - emit InboxMessageDeliveredFromOrigin(msgNum); - return msgNum; - } - - /// @inheritdoc IInbox - function sendL2Message(bytes calldata messageData) - external - whenNotPaused - onlyAllowed - returns (uint256) - { - if (_chainIdChanged()) revert L1Forked(); - return _deliverMessage(L2_MSG, msg.sender, messageData); - } - function sendL1FundedUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -181,10 +75,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) + ), + msg.value ); } + /// @inheritdoc IInbox function sendL1FundedContractTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -206,61 +102,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) - ); - } - - function sendUnsignedTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - uint256 value, - bytes calldata data - ) external whenNotPaused onlyAllowed returns (uint256) { - // arbos will discard unsigned tx with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - return - _deliverMessage( - L2_MSG, - msg.sender, - abi.encodePacked( - L2MessageType_unsignedEOATx, - gasLimit, - maxFeePerGas, - nonce, - uint256(uint160(to)), - value, - data - ) - ); - } - - function sendContractTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - address to, - uint256 value, - bytes calldata data - ) external whenNotPaused onlyAllowed returns (uint256) { - // arbos will discard unsigned tx with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - return - _deliverMessage( - L2_MSG, - msg.sender, - abi.encodePacked( - L2MessageType_unsignedContractTx, - gasLimit, - maxFeePerGas, - uint256(uint160(to)), - value, - data - ) + ), + msg.value ); } @@ -292,7 +135,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) + ), + msg.value ); } @@ -325,7 +169,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), value, data - ) + ), + 0 ); } @@ -357,20 +202,11 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(address(100))), // ArbSys address value, abi.encodeWithSelector(ArbSys.withdrawEth.selector, withdrawTo) - ) + ), + 0 ); } - /// @inheritdoc IInbox - function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) - public - view - returns (uint256) - { - // Use current block basefee if baseFee parameter is 0 - return (1400 + 6 * dataLength) * (baseFee == 0 ? block.basefee : baseFee); - } - /// @inheritdoc IInbox function depositEth() public payable whenNotPaused onlyAllowed returns (uint256) { address dest = msg.sender; @@ -385,7 +221,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { _deliverMessage( L1MessageType_ethDeposit, msg.sender, - abi.encodePacked(dest, msg.value) + abi.encodePacked(dest, msg.value), + msg.value ); } @@ -443,28 +280,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256 maxFeePerGas, bytes calldata data ) external payable whenNotPaused onlyAllowed returns (uint256) { - // ensure the user's deposit alone will make submission succeed - if (msg.value < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas)) { - revert InsufficientValue( - maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, - msg.value - ); - } - - // if a refund address is a contract, we apply the alias to it - // so that it can access its funds on the L2 - // since the beneficiary and other refund addresses don't get rewritten by arb-os - if (AddressUpgradeable.isContract(excessFeeRefundAddress)) { - excessFeeRefundAddress = AddressAliasHelper.applyL1ToL2Alias(excessFeeRefundAddress); - } - if (AddressUpgradeable.isContract(callValueRefundAddress)) { - // this is the beneficiary. be careful since this is the address that can cancel the retryable in the L2 - callValueRefundAddress = AddressAliasHelper.applyL1ToL2Alias(callValueRefundAddress); - } - - // gas limit is validated to be within uint64 in unsafeCreateRetryableTicket return - unsafeCreateRetryableTicket( + _createRetryableTicket( to, l2CallValue, maxSubmissionCost, @@ -472,6 +289,7 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { callValueRefundAddress, gasLimit, maxFeePerGas, + msg.value, data ); } @@ -487,70 +305,39 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256 maxFeePerGas, bytes calldata data ) public payable whenNotPaused onlyAllowed returns (uint256) { - // gas price and limit of 1 should never be a valid input, so instead they are used as - // magic values to trigger a revert in eth calls that surface data without requiring a tx trace - if (gasLimit == 1 || maxFeePerGas == 1) - revert RetryableData( - msg.sender, + return + _unsafeCreateRetryableTicket( to, l2CallValue, - msg.value, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, + msg.value, data ); - - // arbos will discard retryable with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - - uint256 submissionFee = calculateRetryableSubmissionFee(data.length, block.basefee); - if (maxSubmissionCost < submissionFee) - revert InsufficientSubmissionCost(submissionFee, maxSubmissionCost); - - return - _deliverMessage( - L1MessageType_submitRetryableTx, - msg.sender, - abi.encodePacked( - uint256(uint160(to)), - l2CallValue, - msg.value, - maxSubmissionCost, - uint256(uint160(excessFeeRefundAddress)), - uint256(uint160(callValueRefundAddress)), - gasLimit, - maxFeePerGas, - data.length, - data - ) - ); } - - function _deliverMessage( - uint8 _kind, - address _sender, - bytes memory _messageData - ) internal returns (uint256) { - if (_messageData.length > maxDataSize) - revert DataTooLarge(_messageData.length, maxDataSize); - uint256 msgNum = deliverToBridge(_kind, _sender, keccak256(_messageData)); - emit InboxMessageDelivered(msgNum, _messageData); - return msgNum; + /// @inheritdoc IInboxBase + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + public + view + override(AbsInbox, IInboxBase) + returns (uint256) + { + // Use current block basefee if baseFee parameter is 0 + return (1400 + 6 * dataLength) * (baseFee == 0 ? block.basefee : baseFee); } - function deliverToBridge( + function _deliverToBridge( uint8 kind, address sender, - bytes32 messageDataHash - ) internal returns (uint256) { + bytes32 messageDataHash, + uint256 amount + ) internal override returns (uint256) { return - bridge.enqueueDelayedMessage{value: msg.value}( + IEthBridge(address(bridge)).enqueueDelayedMessage{value: amount}( kind, AddressAliasHelper.applyL1ToL2Alias(sender), messageDataHash diff --git a/contracts/src/bridge/Messages.sol b/contracts/src/bridge/Messages.sol index 6e193b7d6..07731c517 100644 --- a/contracts/src/bridge/Messages.sol +++ b/contracts/src/bridge/Messages.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/bridge/Outbox.sol b/contracts/src/bridge/Outbox.sol index 1dedbc4a6..8ae873dfa 100644 --- a/contracts/src/bridge/Outbox.sol +++ b/contracts/src/bridge/Outbox.sol @@ -1,281 +1,23 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; -import { - AlreadyInit, - NotRollup, - ProofTooLong, - PathNotMinimal, - UnknownRoot, - AlreadySpent, - BridgeCallFailed, - HadZeroInit -} from "../libraries/Error.sol"; -import "./IBridge.sol"; -import "./IOutbox.sol"; -import "../libraries/MerkleLib.sol"; -import "../libraries/DelegateCallAware.sol"; +import "./AbsOutbox.sol"; -/// @dev this error is thrown since certain functions are only expected to be used in simulations, not in actual txs -error SimulationOnlyEntrypoint(); - -contract Outbox is DelegateCallAware, IOutbox { - address public rollup; // the rollup contract - IBridge public bridge; // the bridge contract - - mapping(uint256 => bytes32) public spent; // packed spent bitmap - mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash - - struct L2ToL1Context { - uint128 l2Block; - uint128 l1Block; - uint128 timestamp; - bytes32 outputId; - address sender; - } - // Note, these variables are set and then wiped during a single transaction. - // Therefore their values don't need to be maintained, and their slots will - // be empty outside of transactions - L2ToL1Context internal context; - - // default context values to be used in storage instead of zero, to save on storage refunds - // it is assumed that arb-os never assigns these values to a valid leaf to be redeemed - uint128 private constant L2BLOCK_DEFAULT_CONTEXT = type(uint128).max; - uint128 private constant L1BLOCK_DEFAULT_CONTEXT = type(uint128).max; - uint128 private constant TIMESTAMP_DEFAULT_CONTEXT = type(uint128).max; - bytes32 private constant OUTPUTID_DEFAULT_CONTEXT = bytes32(type(uint256).max); - address private constant SENDER_DEFAULT_CONTEXT = address(type(uint160).max); - - uint128 public constant OUTBOX_VERSION = 2; - - function initialize(IBridge _bridge) external onlyDelegated { - if (address(_bridge) == address(0)) revert HadZeroInit(); - if (address(bridge) != address(0)) revert AlreadyInit(); - // address zero is returned if no context is set, but the values used in storage - // are non-zero to save users some gas (as storage refunds are usually maxed out) - // EIP-1153 would help here - context = L2ToL1Context({ - l2Block: L2BLOCK_DEFAULT_CONTEXT, - l1Block: L1BLOCK_DEFAULT_CONTEXT, - timestamp: TIMESTAMP_DEFAULT_CONTEXT, - outputId: OUTPUTID_DEFAULT_CONTEXT, - sender: SENDER_DEFAULT_CONTEXT - }); - bridge = _bridge; - rollup = address(_bridge.rollup()); - } - - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { - rollup = address(bridge.rollup()); - } - - function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { - if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); - roots[root] = l2BlockHash; - emit SendRootUpdated(root, l2BlockHash); - } - - /// @inheritdoc IOutbox - function l2ToL1Sender() external view returns (address) { - address sender = context.sender; - // we don't return the default context value to avoid a breaking change in the API - if (sender == SENDER_DEFAULT_CONTEXT) return address(0); - return sender; - } - - /// @inheritdoc IOutbox - function l2ToL1Block() external view returns (uint256) { - uint128 l2Block = context.l2Block; - // we don't return the default context value to avoid a breaking change in the API - if (l2Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); - return uint256(l2Block); - } - - /// @inheritdoc IOutbox - function l2ToL1EthBlock() external view returns (uint256) { - uint128 l1Block = context.l1Block; - // we don't return the default context value to avoid a breaking change in the API - if (l1Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); - return uint256(l1Block); - } - - /// @inheritdoc IOutbox - function l2ToL1Timestamp() external view returns (uint256) { - uint128 timestamp = context.timestamp; - // we don't return the default context value to avoid a breaking change in the API - if (timestamp == TIMESTAMP_DEFAULT_CONTEXT) return uint256(0); - return uint256(timestamp); - } - - /// @notice batch number is deprecated and now always returns 0 - function l2ToL1BatchNum() external pure returns (uint256) { +contract Outbox is AbsOutbox { + /// @inheritdoc AbsOutbox + function _defaultContextAmount() internal pure override returns (uint256) { + // In ETH-based chains withdrawal amount can be read from msg.value. For that reason + // amount slot in context will never be accessed and it has 0 default value return 0; } - /// @inheritdoc IOutbox - function l2ToL1OutputId() external view returns (bytes32) { - bytes32 outputId = context.outputId; - // we don't return the default context value to avoid a breaking change in the API - if (outputId == OUTPUTID_DEFAULT_CONTEXT) return bytes32(0); - return outputId; - } - - /// @inheritdoc IOutbox - function executeTransaction( - bytes32[] calldata proof, - uint256 index, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) external { - bytes32 userTx = calculateItemHash( - l2Sender, - to, - l2Block, - l1Block, - l2Timestamp, - value, - data - ); - - recordOutputAsSpent(proof, index, userTx); - - executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); - } - - /// @inheritdoc IOutbox - function executeTransactionSimulation( - uint256 index, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) external { - if (msg.sender != address(0)) revert SimulationOnlyEntrypoint(); - executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); - } - - function executeTransactionImpl( - uint256 outputId, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) internal { - emit OutBoxTransactionExecuted(to, l2Sender, 0, outputId); - - // we temporarily store the previous values so the outbox can naturally - // unwind itself when there are nested calls to `executeTransaction` - L2ToL1Context memory prevContext = context; - - context = L2ToL1Context({ - sender: l2Sender, - l2Block: uint128(l2Block), - l1Block: uint128(l1Block), - timestamp: uint128(l2Timestamp), - outputId: bytes32(outputId) - }); - - // set and reset vars around execution so they remain valid during call - executeBridgeCall(to, value, data); - - context = prevContext; - } - - function _calcSpentIndexOffset(uint256 index) - internal - view - returns ( - uint256, - uint256, - bytes32 - ) - { - uint256 spentIndex = index / 255; // Note: Reserves the MSB. - uint256 bitOffset = index % 255; - bytes32 replay = spent[spentIndex]; - return (spentIndex, bitOffset, replay); - } - - function _isSpent(uint256 bitOffset, bytes32 replay) internal pure returns (bool) { - return ((replay >> bitOffset) & bytes32(uint256(1))) != bytes32(0); - } - - /// @inheritdoc IOutbox - function isSpent(uint256 index) external view returns (bool) { - (, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); - return _isSpent(bitOffset, replay); - } - - function recordOutputAsSpent( - bytes32[] memory proof, - uint256 index, - bytes32 item - ) internal { - if (proof.length >= 256) revert ProofTooLong(proof.length); - if (index >= 2**proof.length) revert PathNotMinimal(index, 2**proof.length); - - // Hash the leaf an extra time to prove it's a leaf - bytes32 calcRoot = calculateMerkleRoot(proof, index, item); - if (roots[calcRoot] == bytes32(0)) revert UnknownRoot(calcRoot); - - (uint256 spentIndex, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); - - if (_isSpent(bitOffset, replay)) revert AlreadySpent(index); - spent[spentIndex] = (replay | bytes32(1 << bitOffset)); - } - - function executeBridgeCall( - address to, - uint256 value, - bytes memory data - ) internal { - (bool success, bytes memory returndata) = bridge.executeCall(to, value, data); - if (!success) { - if (returndata.length > 0) { - // solhint-disable-next-line no-inline-assembly - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert BridgeCallFailed(); - } - } - } - - function calculateItemHash( - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) public pure returns (bytes32) { - return - keccak256(abi.encodePacked(l2Sender, to, l2Block, l1Block, l2Timestamp, value, data)); - } - - function calculateMerkleRoot( - bytes32[] memory proof, - uint256 path, - bytes32 item - ) public pure returns (bytes32) { - return MerkleLib.calculateRoot(proof, path, keccak256(abi.encodePacked(item))); + /// @inheritdoc AbsOutbox + function _amountToSetInContext(uint256) internal pure override returns (uint256) { + // In ETH-based chains withdrawal amount can be read from msg.value. For that reason + // amount slot in context will never be accessed, we keep it as 0 all the time + return 0; } } diff --git a/contracts/src/bridge/SequencerInbox.sol b/contracts/src/bridge/SequencerInbox.sol index 026b23611..16a65e770 100644 --- a/contracts/src/bridge/SequencerInbox.sol +++ b/contracts/src/bridge/SequencerInbox.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -7,9 +7,9 @@ pragma solidity ^0.8.0; import { AlreadyInit, HadZeroInit, + BadPostUpgradeInit, NotOrigin, DataTooLarge, - NotRollup, DelayedBackwards, DelayedTooFar, ForceIncludeBlockTooSoon, @@ -17,30 +17,42 @@ import { IncorrectMessagePreimage, NotBatchPoster, BadSequencerNumber, - DataNotAuthenticated, AlreadyValidDASKeyset, NoSuchKeyset, - NotForked + NotForked, + NotBatchPosterManager, + RollupNotChanged, + DataBlobsNotSupported, + InitParamZero, + MissingDataHashes, + NotOwner, + InvalidHeaderFlag, + NativeTokenMismatch, + BadMaxTimeVariation, + Deprecated } from "../libraries/Error.sol"; import "./IBridge.sol"; -import "./IInbox.sol"; +import "./IInboxBase.sol"; import "./ISequencerInbox.sol"; import "../rollup/IRollupLogic.sol"; import "./Messages.sol"; import "../precompiles/ArbGasInfo.sol"; import "../precompiles/ArbSys.sol"; +import "../libraries/IReader4844.sol"; import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; -import {GasRefundEnabled, IGasRefunder} from "../libraries/IGasRefunder.sol"; import "../libraries/DelegateCallAware.sol"; +import {IGasRefunder} from "../libraries/IGasRefunder.sol"; +import {GasRefundEnabled} from "../libraries/GasRefundEnabled.sol"; import "../libraries/ArbitrumChecker.sol"; +import {IERC20Bridge} from "./IERC20Bridge.sol"; /** - * @title Accepts batches from the sequencer and adds them to the rollup inbox. + * @title Accepts batches from the sequencer and adds them to the rollup inbox. * @notice Contains the inbox accumulator which is the ordering of all data and transactions to be processed by the rollup. - * As part of submitting a batch the sequencer is also expected to include items enqueued - * in the delayed inbox (Bridge.sol). If items in the delayed inbox are not included by a - * sequencer within a time limit they can be force included into the rollup inbox by anyone. + * As part of submitting a batch the sequencer is also expected to include items enqueued + * in the delayed inbox (Bridge.sol). If items in the delayed inbox are not included by a + * sequencer within a time limit they can be force included into the rollup inbox by anyone. */ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox { uint256 public totalDelayedMessagesRead; @@ -53,71 +65,219 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox /// @inheritdoc ISequencerInbox bytes1 public constant DATA_AUTHENTICATED_FLAG = 0x40; + /// @inheritdoc ISequencerInbox + bytes1 public constant DATA_BLOB_HEADER_FLAG = DATA_AUTHENTICATED_FLAG | 0x10; + + /// @inheritdoc ISequencerInbox + bytes1 public constant DAS_MESSAGE_HEADER_FLAG = 0x80; + + /// @inheritdoc ISequencerInbox + bytes1 public constant TREE_DAS_MESSAGE_HEADER_FLAG = 0x08; + + /// @inheritdoc ISequencerInbox + bytes1 public constant BROTLI_MESSAGE_HEADER_FLAG = 0x00; + + /// @inheritdoc ISequencerInbox + bytes1 public constant ZERO_HEAVY_MESSAGE_HEADER_FLAG = 0x20; + + // GAS_PER_BLOB from EIP-4844 + uint256 internal constant GAS_PER_BLOB = 1 << 17; + IOwnable public rollup; + mapping(address => bool) public isBatchPoster; - ISequencerInbox.MaxTimeVariation public maxTimeVariation; + + // we previously stored the max time variation in a (uint,uint,uint,uint) struct here + // solhint-disable-next-line var-name-mixedcase + ISequencerInbox.MaxTimeVariation private __LEGACY_MAX_TIME_VARIATION; mapping(bytes32 => DasKeySetInfo) public dasKeySetInfo; modifier onlyRollupOwner() { - if (msg.sender != rollup.owner()) revert NotOwner(msg.sender, address(rollup)); + if (msg.sender != rollup.owner()) revert NotOwner(msg.sender, rollup.owner()); + _; + } + + modifier onlyRollupOwnerOrBatchPosterManager() { + if (msg.sender != rollup.owner() && msg.sender != batchPosterManager) { + revert NotBatchPosterManager(msg.sender); + } _; } mapping(address => bool) public isSequencer; + IReader4844 public immutable reader4844; + + // see ISequencerInbox.MaxTimeVariation + uint64 internal delayBlocks; + uint64 internal futureBlocks; + uint64 internal delaySeconds; + uint64 internal futureSeconds; + + /// @inheritdoc ISequencerInbox + address public batchPosterManager; // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving uint256 public immutable maxDataSize; uint256 internal immutable deployTimeChainId = block.chainid; // If the chain this SequencerInbox is deployed on is an Arbitrum chain. bool internal immutable hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum(); - - constructor(uint256 _maxDataSize) { + // True if the chain this SequencerInbox is deployed on uses custom fee token + bool public immutable isUsingFeeToken; + + constructor( + uint256 _maxDataSize, + IReader4844 reader4844_, + bool _isUsingFeeToken + ) { maxDataSize = _maxDataSize; + if (hostChainIsArbitrum) { + if (reader4844_ != IReader4844(address(0))) revert DataBlobsNotSupported(); + } else { + if (reader4844_ == IReader4844(address(0))) revert InitParamZero("Reader4844"); + } + reader4844 = reader4844_; + isUsingFeeToken = _isUsingFeeToken; } function _chainIdChanged() internal view returns (bool) { return deployTimeChainId != block.chainid; } + function postUpgradeInit() external onlyDelegated onlyProxyOwner { + // Assuming we would not upgrade from a version that have MaxTimeVariation all set to zero + // If that is the case, postUpgradeInit do not need to be called + if ( + __LEGACY_MAX_TIME_VARIATION.delayBlocks == 0 && + __LEGACY_MAX_TIME_VARIATION.futureBlocks == 0 && + __LEGACY_MAX_TIME_VARIATION.delaySeconds == 0 && + __LEGACY_MAX_TIME_VARIATION.futureSeconds == 0 + ) { + revert AlreadyInit(); + } + + if ( + __LEGACY_MAX_TIME_VARIATION.delayBlocks > type(uint64).max || + __LEGACY_MAX_TIME_VARIATION.futureBlocks > type(uint64).max || + __LEGACY_MAX_TIME_VARIATION.delaySeconds > type(uint64).max || + __LEGACY_MAX_TIME_VARIATION.futureSeconds > type(uint64).max + ) { + revert BadPostUpgradeInit(); + } + + delayBlocks = uint64(__LEGACY_MAX_TIME_VARIATION.delayBlocks); + futureBlocks = uint64(__LEGACY_MAX_TIME_VARIATION.futureBlocks); + delaySeconds = uint64(__LEGACY_MAX_TIME_VARIATION.delaySeconds); + futureSeconds = uint64(__LEGACY_MAX_TIME_VARIATION.futureSeconds); + + __LEGACY_MAX_TIME_VARIATION.delayBlocks = 0; + __LEGACY_MAX_TIME_VARIATION.futureBlocks = 0; + __LEGACY_MAX_TIME_VARIATION.delaySeconds = 0; + __LEGACY_MAX_TIME_VARIATION.futureSeconds = 0; + } + function initialize( IBridge bridge_, ISequencerInbox.MaxTimeVariation calldata maxTimeVariation_ ) external onlyDelegated { if (bridge != IBridge(address(0))) revert AlreadyInit(); if (bridge_ == IBridge(address(0))) revert HadZeroInit(); + + // Make sure logic contract was created by proper value for 'isUsingFeeToken'. + // Bridge in ETH based chains doesn't implement nativeToken(). In future it might implement it and return address(0) + bool actualIsUsingFeeToken = false; + try IERC20Bridge(address(bridge_)).nativeToken() returns (address feeToken) { + if (feeToken != address(0)) { + actualIsUsingFeeToken = true; + } + } catch {} + if (isUsingFeeToken != actualIsUsingFeeToken) { + revert NativeTokenMismatch(); + } + bridge = bridge_; rollup = bridge_.rollup(); - maxTimeVariation = maxTimeVariation_; + + _setMaxTimeVariation(maxTimeVariation_); } - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { - rollup = bridge.rollup(); + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); + IOwnable newRollup = bridge.rollup(); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; } - function getTimeBounds() internal view virtual returns (TimeBounds memory) { - TimeBounds memory bounds; - if (block.timestamp > maxTimeVariation.delaySeconds) { - bounds.minTimestamp = uint64(block.timestamp - maxTimeVariation.delaySeconds); + function getTimeBounds() internal view virtual returns (IBridge.TimeBounds memory) { + IBridge.TimeBounds memory bounds; + ( + uint64 delayBlocks_, + uint64 futureBlocks_, + uint64 delaySeconds_, + uint64 futureSeconds_ + ) = maxTimeVariationInternal(); + if (block.timestamp > delaySeconds_) { + bounds.minTimestamp = uint64(block.timestamp) - delaySeconds_; } - bounds.maxTimestamp = uint64(block.timestamp + maxTimeVariation.futureSeconds); - if (block.number > maxTimeVariation.delayBlocks) { - bounds.minBlockNumber = uint64(block.number - maxTimeVariation.delayBlocks); + bounds.maxTimestamp = uint64(block.timestamp) + futureSeconds_; + if (block.number > delayBlocks_) { + bounds.minBlockNumber = uint64(block.number) - delayBlocks_; } - bounds.maxBlockNumber = uint64(block.number + maxTimeVariation.futureBlocks); + bounds.maxBlockNumber = uint64(block.number) + futureBlocks_; return bounds; } /// @inheritdoc ISequencerInbox function removeDelayAfterFork() external { if (!_chainIdChanged()) revert NotForked(); - maxTimeVariation = ISequencerInbox.MaxTimeVariation({ - delayBlocks: 1, - futureBlocks: 1, - delaySeconds: 1, - futureSeconds: 1 - }); + delayBlocks = 1; + futureBlocks = 1; + delaySeconds = 1; + futureSeconds = 1; + } + + function maxTimeVariation() + external + view + returns ( + uint256, + uint256, + uint256, + uint256 + ) + { + ( + uint64 delayBlocks_, + uint64 futureBlocks_, + uint64 delaySeconds_, + uint64 futureSeconds_ + ) = maxTimeVariationInternal(); + + return ( + uint256(delayBlocks_), + uint256(futureBlocks_), + uint256(delaySeconds_), + uint256(futureSeconds_) + ); + } + + function maxTimeVariationInternal() + internal + view + returns ( + uint64, + uint64, + uint64, + uint64 + ) + { + if (_chainIdChanged()) { + return (1, 1, 1, 1); + } else { + return (delayBlocks, futureBlocks, delaySeconds, futureSeconds); + } } /// @inheritdoc ISequencerInbox @@ -140,10 +300,8 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox messageDataHash ); // Can only force-include after the Sequencer-only window has expired. - if (l1BlockAndTime[0] + maxTimeVariation.delayBlocks >= block.number) - revert ForceIncludeBlockTooSoon(); - if (l1BlockAndTime[1] + maxTimeVariation.delaySeconds >= block.timestamp) - revert ForceIncludeTimeTooSoon(); + if (l1BlockAndTime[0] + delayBlocks >= block.number) revert ForceIncludeBlockTooSoon(); + if (l1BlockAndTime[1] + delaySeconds >= block.timestamp) revert ForceIncludeTimeTooSoon(); // Verify that message hash represents the last message sequence of delayed message to be included bytes32 prevDelayedAcc = 0; @@ -155,14 +313,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox Messages.accumulateInboxMessage(prevDelayedAcc, messageHash) ) revert IncorrectMessagePreimage(); - (bytes32 dataHash, TimeBounds memory timeBounds) = formEmptyDataHash( + (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formEmptyDataHash( _totalDelayedMessagesRead ); uint256 __totalDelayedMessagesRead = _totalDelayedMessagesRead; uint256 prevSeqMsgCount = bridge.sequencerReportedSubMessageCount(); - uint256 newSeqMsgCount = prevSeqMsgCount + - _totalDelayedMessagesRead - - totalDelayedMessagesRead; + uint256 newSeqMsgCount = prevSeqMsgCount; // force inclusion should not modify sequencer message count ( uint256 seqMessageIndex, bytes32 beforeAcc, @@ -182,42 +338,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox delayedAcc, totalDelayedMessagesRead, timeBounds, - BatchDataLocation.NoData + IBridge.BatchDataLocation.NoData ); } - /// @dev Deprecated in favor of the variant specifying message counts for consistency + /// @dev Deprecated, kept for abi generation and will be removed in the future function addSequencerL2BatchFromOrigin( - uint256 sequenceNumber, - bytes calldata data, - uint256 afterDelayedMessagesRead, - IGasRefunder gasRefunder - ) external refundsGas(gasRefunder) { - // solhint-disable-next-line avoid-tx-origin - if (msg.sender != tx.origin) revert NotOrigin(); - if (!isBatchPoster[msg.sender]) revert NotBatchPoster(); - - (bytes32 dataHash, TimeBounds memory timeBounds) = formDataHash( - data, - afterDelayedMessagesRead - ); - ( - uint256 seqMessageIndex, - bytes32 beforeAcc, - bytes32 delayedAcc, - bytes32 afterAcc - ) = addSequencerL2BatchImpl(dataHash, afterDelayedMessagesRead, data.length, 0, 0); - if (seqMessageIndex != sequenceNumber) - revert BadSequencerNumber(seqMessageIndex, sequenceNumber); - emit SequencerBatchDelivered( - sequenceNumber, - beforeAcc, - afterAcc, - delayedAcc, - totalDelayedMessagesRead, - timeBounds, - BatchDataLocation.TxInput - ); + uint256, + bytes calldata, + uint256, + IGasRefunder + ) external pure { + revert Deprecated(); } function addSequencerL2BatchFromOrigin( @@ -227,17 +359,17 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox IGasRefunder gasRefunder, uint256 prevMessageCount, uint256 newMessageCount - ) external refundsGas(gasRefunder) { + ) external refundsGas(gasRefunder, IReader4844(address(0))) { // solhint-disable-next-line avoid-tx-origin if (msg.sender != tx.origin) revert NotOrigin(); if (!isBatchPoster[msg.sender]) revert NotBatchPoster(); - (bytes32 dataHash, TimeBounds memory timeBounds) = formDataHash( + (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formCallDataHash( data, afterDelayedMessagesRead ); // Reformat the stack to prevent "Stack too deep" uint256 sequenceNumber_ = sequenceNumber; - TimeBounds memory timeBounds_ = timeBounds; + IBridge.TimeBounds memory timeBounds_ = timeBounds; bytes32 dataHash_ = dataHash; uint256 dataLength = data.length; uint256 afterDelayedMessagesRead_ = afterDelayedMessagesRead; @@ -255,8 +387,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox prevMessageCount_, newMessageCount_ ); - if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) + + // ~uint256(0) is type(uint256).max, but ever so slightly cheaper + if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) { revert BadSequencerNumber(seqMessageIndex, sequenceNumber_); + } + emit SequencerBatchDelivered( seqMessageIndex, beforeAcc, @@ -264,8 +400,69 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox delayedAcc, totalDelayedMessagesRead, timeBounds_, - BatchDataLocation.TxInput + IBridge.BatchDataLocation.TxInput + ); + } + + function addSequencerL2BatchFromBlobs( + uint256 sequenceNumber, + uint256 afterDelayedMessagesRead, + IGasRefunder gasRefunder, + uint256 prevMessageCount, + uint256 newMessageCount + ) external refundsGas(gasRefunder, reader4844) { + if (!isBatchPoster[msg.sender]) revert NotBatchPoster(); + ( + bytes32 dataHash, + IBridge.TimeBounds memory timeBounds, + uint256 blobGas + ) = formBlobDataHash(afterDelayedMessagesRead); + + // we use addSequencerL2BatchImpl for submitting the message + // normally this would also submit a batch spending report but that is skipped if we pass + // an empty call data size, then we submit a separate batch spending report later + ( + uint256 seqMessageIndex, + bytes32 beforeAcc, + bytes32 delayedAcc, + bytes32 afterAcc + ) = addSequencerL2BatchImpl( + dataHash, + afterDelayedMessagesRead, + 0, + prevMessageCount, + newMessageCount + ); + + uint256 _sequenceNumber = sequenceNumber; // stack workaround + + // ~uint256(0) is type(uint256).max, but ever so slightly cheaper + if (seqMessageIndex != _sequenceNumber && _sequenceNumber != ~uint256(0)) { + revert BadSequencerNumber(seqMessageIndex, _sequenceNumber); + } + + emit SequencerBatchDelivered( + _sequenceNumber, + beforeAcc, + afterAcc, + delayedAcc, + totalDelayedMessagesRead, + timeBounds, + IBridge.BatchDataLocation.Blob ); + + // blobs are currently not supported on host arbitrum chains, when support is added it may + // consume gas in a different way to L1, so explicitly block host arb chains so that if support for blobs + // on arb is added it will need to explicitly turned on in the sequencer inbox + if (hostChainIsArbitrum) revert DataBlobsNotSupported(); + + // submit a batch spending report to refund the entity that produced the blob batch data + // same as using calldata, we only submit spending report if the caller is the origin of the tx + // such that one cannot "double-claim" batch posting refund in the same tx + // solhint-disable-next-line avoid-tx-origin + if (msg.sender == tx.origin && !isUsingFeeToken) { + submitBatchSpendingReport(dataHash, seqMessageIndex, block.basefee, blobGas); + } } function addSequencerL2Batch( @@ -275,9 +472,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox IGasRefunder gasRefunder, uint256 prevMessageCount, uint256 newMessageCount - ) external override refundsGas(gasRefunder) { + ) external override refundsGas(gasRefunder, IReader4844(address(0))) { if (!isBatchPoster[msg.sender] && msg.sender != address(rollup)) revert NotBatchPoster(); - (bytes32 dataHash, TimeBounds memory timeBounds) = formDataHash( + (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formCallDataHash( data, afterDelayedMessagesRead ); @@ -285,7 +482,7 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox { // Reformat the stack to prevent "Stack too deep" uint256 sequenceNumber_ = sequenceNumber; - TimeBounds memory timeBounds_ = timeBounds; + IBridge.TimeBounds memory timeBounds_ = timeBounds; bytes32 dataHash_ = dataHash; uint256 afterDelayedMessagesRead_ = afterDelayedMessagesRead; uint256 prevMessageCount_ = prevMessageCount; @@ -302,8 +499,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox prevMessageCount_, newMessageCount_ ); - if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) + + // ~uint256(0) is type(uint256).max, but ever so slightly cheaper + if (seqMessageIndex != sequenceNumber_ && sequenceNumber_ != ~uint256(0)) { revert BadSequencerNumber(seqMessageIndex, sequenceNumber_); + } + emit SequencerBatchDelivered( seqMessageIndex, beforeAcc, @@ -311,34 +512,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox delayedAcc, totalDelayedMessagesRead, timeBounds_, - BatchDataLocation.SeparateBatchEvent + IBridge.BatchDataLocation.SeparateBatchEvent ); } emit SequencerBatchData(seqMessageIndex, data); } - modifier validateBatchData(bytes calldata data) { - uint256 fullDataLen = HEADER_LENGTH + data.length; - if (fullDataLen > maxDataSize) revert DataTooLarge(fullDataLen, maxDataSize); - if (data.length > 0 && (data[0] & DATA_AUTHENTICATED_FLAG) == DATA_AUTHENTICATED_FLAG) { - revert DataNotAuthenticated(); - } - // the first byte is used to identify the type of batch data - // das batches expect to have the type byte set, followed by the keyset (so they should have at least 33 bytes) - if (data.length >= 33 && data[0] & 0x80 != 0) { - // we skip the first byte, then read the next 32 bytes for the keyset - bytes32 dasKeysetHash = bytes32(data[1:33]); - if (!dasKeySetInfo[dasKeysetHash].isValidKeyset) revert NoSuchKeyset(dasKeysetHash); - } - _; - } - function packHeader(uint256 afterDelayedMessagesRead) internal view - returns (bytes memory, TimeBounds memory) + returns (bytes memory, IBridge.TimeBounds memory) { - TimeBounds memory timeBounds = getTimeBounds(); + IBridge.TimeBounds memory timeBounds = getTimeBounds(); bytes memory header = abi.encodePacked( timeBounds.minTimestamp, timeBounds.maxTimestamp, @@ -351,24 +536,139 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox return (header, timeBounds); } - function formDataHash(bytes calldata data, uint256 afterDelayedMessagesRead) + /// @dev Form a hash for a sequencer message with no batch data + /// @param afterDelayedMessagesRead The delayed messages count read up to + /// @return The data hash + /// @return The timebounds within which the message should be processed + function formEmptyDataHash(uint256 afterDelayedMessagesRead) internal view - validateBatchData(data) - returns (bytes32, TimeBounds memory) + returns (bytes32, IBridge.TimeBounds memory) { - (bytes memory header, TimeBounds memory timeBounds) = packHeader(afterDelayedMessagesRead); - bytes32 dataHash = keccak256(bytes.concat(header, data)); - return (dataHash, timeBounds); + (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader( + afterDelayedMessagesRead + ); + return (keccak256(header), timeBounds); } - function formEmptyDataHash(uint256 afterDelayedMessagesRead) + /// @dev Since the data is supplied from calldata, the batch poster can choose the data type + /// We need to ensure that this data cannot cause a collision with data supplied via another method (eg blobs) + /// therefore we restrict which flags can be provided as a header in this field + /// This also safe guards unused flags for future use, as we know they would have been disallowed up until this point + /// @param headerByte The first byte in the calldata + function isValidCallDataFlag(bytes1 headerByte) internal pure returns (bool) { + return + headerByte == BROTLI_MESSAGE_HEADER_FLAG || + headerByte == DAS_MESSAGE_HEADER_FLAG || + (headerByte == (DAS_MESSAGE_HEADER_FLAG | TREE_DAS_MESSAGE_HEADER_FLAG)) || + headerByte == ZERO_HEAVY_MESSAGE_HEADER_FLAG; + } + + /// @dev Form a hash of the data taken from the calldata + /// @param data The calldata to be hashed + /// @param afterDelayedMessagesRead The delayed messages count read up to + /// @return The data hash + /// @return The timebounds within which the message should be processed + function formCallDataHash(bytes calldata data, uint256 afterDelayedMessagesRead) internal view - returns (bytes32, TimeBounds memory) + returns (bytes32, IBridge.TimeBounds memory) { - (bytes memory header, TimeBounds memory timeBounds) = packHeader(afterDelayedMessagesRead); - return (keccak256(header), timeBounds); + uint256 fullDataLen = HEADER_LENGTH + data.length; + if (fullDataLen > maxDataSize) revert DataTooLarge(fullDataLen, maxDataSize); + + (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader( + afterDelayedMessagesRead + ); + + // the batch poster is allowed to submit an empty batch, they can use this to progress the + // delayed inbox without providing extra batch data + if (data.length > 0) { + // The first data byte cannot be the same as any that have been set via other methods (eg 4844 blob header) as this + // would allow the supplier of the data to spoof an incorrect 4844 data batch + if (!isValidCallDataFlag(data[0])) revert InvalidHeaderFlag(data[0]); + + // the first byte is used to identify the type of batch data + // das batches expect to have the type byte set, followed by the keyset (so they should have at least 33 bytes) + // if invalid data is supplied here the state transition function will process it as an empty block + // however we can provide a nice additional check here for the batch poster + if (data[0] & DAS_MESSAGE_HEADER_FLAG != 0 && data.length >= 33) { + // we skip the first byte, then read the next 32 bytes for the keyset + bytes32 dasKeysetHash = bytes32(data[1:33]); + if (!dasKeySetInfo[dasKeysetHash].isValidKeyset) revert NoSuchKeyset(dasKeysetHash); + } + } + return (keccak256(bytes.concat(header, data)), timeBounds); + } + + /// @dev Form a hash of the data being provided in 4844 data blobs + /// @param afterDelayedMessagesRead The delayed messages count read up to + /// @return The data hash + /// @return The timebounds within which the message should be processed + /// @return The normalized amount of gas used for blob posting + function formBlobDataHash(uint256 afterDelayedMessagesRead) + internal + view + returns ( + bytes32, + IBridge.TimeBounds memory, + uint256 + ) + { + bytes32[] memory dataHashes = reader4844.getDataHashes(); + if (dataHashes.length == 0) revert MissingDataHashes(); + + (bytes memory header, IBridge.TimeBounds memory timeBounds) = packHeader( + afterDelayedMessagesRead + ); + + uint256 blobCost = reader4844.getBlobBaseFee() * GAS_PER_BLOB * dataHashes.length; + return ( + keccak256(bytes.concat(header, DATA_BLOB_HEADER_FLAG, abi.encodePacked(dataHashes))), + timeBounds, + block.basefee > 0 ? blobCost / block.basefee : 0 + ); + } + + /// @dev Submit a batch spending report message so that the batch poster can be reimbursed on the rollup + /// This function expect msg.sender is tx.origin, and will always record tx.origin as the spender + /// @param dataHash The hash of the message the spending report is being submitted for + /// @param seqMessageIndex The index of the message to submit the spending report for + /// @param gasPrice The gas price that was paid for the data (standard gas or data gas) + function submitBatchSpendingReport( + bytes32 dataHash, + uint256 seqMessageIndex, + uint256 gasPrice, + uint256 extraGas + ) internal { + // report the account who paid the gas (tx.origin) for the tx as batch poster + // if msg.sender is used and is a contract, it might not be able to spend the refund on l2 + // solhint-disable-next-line avoid-tx-origin + address batchPoster = tx.origin; + + // this msg isn't included in the current sequencer batch, but instead added to + // the delayed messages queue that is yet to be included + if (hostChainIsArbitrum) { + // Include extra gas for the host chain's L1 gas charging + uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); + extraGas += l1Fees / block.basefee; + } + require(extraGas <= type(uint64).max, "EXTRA_GAS_NOT_UINT64"); + bytes memory spendingReportMsg = abi.encodePacked( + block.timestamp, + batchPoster, + dataHash, + seqMessageIndex, + gasPrice, + uint64(extraGas) + ); + + uint256 msgNum = bridge.submitBatchSpendingReport( + batchPoster, + keccak256(spendingReportMsg) + ); + // this is the same event used by Inbox.sol after including a message to the delayed message accumulator + emit InboxMessageDelivered(msgNum, spendingReportMsg); } function addSequencerL2BatchImpl( @@ -398,39 +698,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox totalDelayedMessagesRead = afterDelayedMessagesRead; - if (calldataLengthPosted > 0) { - // this msg isn't included in the current sequencer batch, but instead added to - // the delayed messages queue that is yet to be included - address batchPoster = msg.sender; - bytes memory spendingReportMsg; - if (hostChainIsArbitrum) { - // Include extra gas for the host chain's L1 gas charging - uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); - uint256 extraGas = l1Fees / block.basefee; - require(extraGas <= type(uint64).max, "L1_GAS_NOT_UINT64"); - spendingReportMsg = abi.encodePacked( - block.timestamp, - batchPoster, - dataHash, - seqMessageIndex, - block.basefee, - uint64(extraGas) - ); - } else { - spendingReportMsg = abi.encodePacked( - block.timestamp, - batchPoster, - dataHash, - seqMessageIndex, - block.basefee - ); - } - uint256 msgNum = bridge.submitBatchSpendingReport( - batchPoster, - keccak256(spendingReportMsg) - ); - // this is the same event used by Inbox.sol after including a message to the delayed message accumulator - emit InboxMessageDelivered(msgNum, spendingReportMsg); + if (calldataLengthPosted > 0 && !isUsingFeeToken) { + // only report batch poster spendings if chain is using ETH as native currency + submitBatchSpendingReport(dataHash, seqMessageIndex, block.basefee, 0); } } @@ -442,17 +712,37 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox return bridge.sequencerMessageCount(); } + function _setMaxTimeVariation(ISequencerInbox.MaxTimeVariation memory maxTimeVariation_) + internal + { + if ( + maxTimeVariation_.delayBlocks > type(uint64).max || + maxTimeVariation_.futureBlocks > type(uint64).max || + maxTimeVariation_.delaySeconds > type(uint64).max || + maxTimeVariation_.futureSeconds > type(uint64).max + ) { + revert BadMaxTimeVariation(); + } + delayBlocks = uint64(maxTimeVariation_.delayBlocks); + futureBlocks = uint64(maxTimeVariation_.futureBlocks); + delaySeconds = uint64(maxTimeVariation_.delaySeconds); + futureSeconds = uint64(maxTimeVariation_.futureSeconds); + } + /// @inheritdoc ISequencerInbox function setMaxTimeVariation(ISequencerInbox.MaxTimeVariation memory maxTimeVariation_) external onlyRollupOwner { - maxTimeVariation = maxTimeVariation_; + _setMaxTimeVariation(maxTimeVariation_); emit OwnerFunctionCalled(0); } /// @inheritdoc ISequencerInbox - function setIsBatchPoster(address addr, bool isBatchPoster_) external onlyRollupOwner { + function setIsBatchPoster(address addr, bool isBatchPoster_) + external + onlyRollupOwnerOrBatchPosterManager + { isBatchPoster[addr] = isBatchPoster_; emit OwnerFunctionCalled(1); } @@ -488,9 +778,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox } /// @inheritdoc ISequencerInbox - function setIsSequencer(address addr, bool isSequencer_) external onlyRollupOwner { + function setIsSequencer(address addr, bool isSequencer_) + external + onlyRollupOwnerOrBatchPosterManager + { isSequencer[addr] = isSequencer_; - emit OwnerFunctionCalled(4); + emit OwnerFunctionCalled(4); // Owner in this context can also be batch poster manager + } + + /// @inheritdoc ISequencerInbox + function setBatchPosterManager(address newBatchPosterManager) external onlyRollupOwner { + batchPosterManager = newBatchPosterManager; + emit OwnerFunctionCalled(5); } function isValidKeysetHash(bytes32 ksHash) external view returns (bool) { diff --git a/contracts/src/challenge/IOldChallengeManager.sol b/contracts/src/challenge/IOldChallengeManager.sol index d77bab521..1d6e53a0c 100644 --- a/contracts/src/challenge/IOldChallengeManager.sol +++ b/contracts/src/challenge/IOldChallengeManager.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/challenge/IOldChallengeResultReceiver.sol b/contracts/src/challenge/IOldChallengeResultReceiver.sol index 2e9137fe3..29d996cd5 100644 --- a/contracts/src/challenge/IOldChallengeResultReceiver.sol +++ b/contracts/src/challenge/IOldChallengeResultReceiver.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/challenge/OldChallengeLib.sol b/contracts/src/challenge/OldChallengeLib.sol index 583c188d4..97da4b059 100644 --- a/contracts/src/challenge/OldChallengeLib.sol +++ b/contracts/src/challenge/OldChallengeLib.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/challenge/OldChallengeManager.sol b/contracts/src/challenge/OldChallengeManager.sol index 585ccecc4..93c18d70d 100644 --- a/contracts/src/challenge/OldChallengeManager.sol +++ b/contracts/src/challenge/OldChallengeManager.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/AddressAliasHelper.sol b/contracts/src/libraries/AddressAliasHelper.sol index a9b7dcbd1..9320fe3e2 100644 --- a/contracts/src/libraries/AddressAliasHelper.sol +++ b/contracts/src/libraries/AddressAliasHelper.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/AdminFallbackProxy.sol b/contracts/src/libraries/AdminFallbackProxy.sol index 52dc9bff9..7f1bb5116 100644 --- a/contracts/src/libraries/AdminFallbackProxy.sol +++ b/contracts/src/libraries/AdminFallbackProxy.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/ArbitrumChecker.sol b/contracts/src/libraries/ArbitrumChecker.sol index 714c4e75c..ad04615d7 100644 --- a/contracts/src/libraries/ArbitrumChecker.sol +++ b/contracts/src/libraries/ArbitrumChecker.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/Constants.sol b/contracts/src/libraries/Constants.sol index 0b4a8b0b7..c06c6144c 100644 --- a/contracts/src/libraries/Constants.sol +++ b/contracts/src/libraries/Constants.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; diff --git a/contracts/src/libraries/CryptographyPrimitives.sol b/contracts/src/libraries/CryptographyPrimitives.sol index ba1e41fe1..c77ad7c1d 100644 --- a/contracts/src/libraries/CryptographyPrimitives.sol +++ b/contracts/src/libraries/CryptographyPrimitives.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/DelegateCallAware.sol b/contracts/src/libraries/DelegateCallAware.sol index bbedcf98c..c5168aa13 100644 --- a/contracts/src/libraries/DelegateCallAware.sol +++ b/contracts/src/libraries/DelegateCallAware.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol b/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol index fb616878a..c9bf30400 100644 --- a/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol +++ b/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/libraries/Error.sol b/contracts/src/libraries/Error.sol index 7aeef8029..0d5a2a8d6 100644 --- a/contracts/src/libraries/Error.sol +++ b/contracts/src/libraries/Error.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; @@ -7,9 +7,12 @@ pragma solidity ^0.8.4; /// @dev Init was already called error AlreadyInit(); -/// Init was called with param set to zero that must be nonzero +/// @dev Init was called with param set to zero that must be nonzero error HadZeroInit(); +/// @dev Thrown when post upgrade init validation fails +error BadPostUpgradeInit(); + /// @dev Thrown when non owner tries to access an only-owner function /// @param sender The msg.sender who is not the owner /// @param owner The owner address @@ -61,6 +64,17 @@ error NotOutbox(address sender); /// @param outbox address of outbox being set error InvalidOutboxSet(address outbox); +/// @dev The provided token address isn't valid +/// @param token address of token being set +error InvalidTokenSet(address token); + +/// @dev Call to this specific address is not allowed +/// @param target address of the call receiver +error CallTargetNotAllowed(address target); + +/// @dev Call that changes the balance of ERC20Bridge is not allowed +error CallNotAllowed(); + // Inbox Errors /// @dev The contract is paused, so cannot be paused @@ -153,11 +167,35 @@ error BadSequencerNumber(uint256 stored, uint256 received); /// @dev The sequence message number provided to this message was inconsistent with the previous one error BadSequencerMessageNumber(uint256 stored, uint256 received); -/// @dev The batch data has the inbox authenticated bit set, but the batch data was not authenticated by the inbox -error DataNotAuthenticated(); - /// @dev Tried to create an already valid Data Availability Service keyset error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset error NoSuchKeyset(bytes32); + +/// @dev Thrown when the provided address is not the designated batch poster manager +error NotBatchPosterManager(address); + +/// @dev Thrown when a data blob feature is attempted to be used on a chain that doesnt support it +error DataBlobsNotSupported(); + +/// @dev Thrown when an init param was supplied as empty +error InitParamZero(string name); + +/// @dev Thrown when data hashes where expected but not where present on the tx +error MissingDataHashes(); + +/// @dev Thrown when rollup is not updated with updateRollupAddress +error RollupNotChanged(); + +/// @dev Unsupported header flag was provided +error InvalidHeaderFlag(bytes1); + +/// @dev SequencerInbox and Bridge are not in the same feeToken/ETH mode +error NativeTokenMismatch(); + +/// @dev Thrown when a deprecated function is called +error Deprecated(); + +/// @dev Thrown when any component of maxTimeVariation is over uint64 +error BadMaxTimeVariation(); diff --git a/contracts/src/libraries/GasRefundEnabled.sol b/contracts/src/libraries/GasRefundEnabled.sol new file mode 100644 index 000000000..63a5bbfe9 --- /dev/null +++ b/contracts/src/libraries/GasRefundEnabled.sol @@ -0,0 +1,52 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity ^0.8.0; + +import "./IReader4844.sol"; +import "./IGasRefunder.sol"; + +abstract contract GasRefundEnabled { + uint256 internal immutable gasPerBlob = 2**17; + + /// @dev this refunds the sender for execution costs of the tx + /// calldata costs are only refunded if `msg.sender == tx.origin` to guarantee the value refunded relates to charging + /// for the `tx.input`. this avoids a possible attack where you generate large calldata from a contract and get over-refunded + modifier refundsGas(IGasRefunder gasRefunder, IReader4844 reader4844) { + uint256 startGasLeft = gasleft(); + _; + if (address(gasRefunder) != address(0)) { + uint256 calldataSize = msg.data.length; + uint256 calldataWords = (calldataSize + 31) / 32; + // account for the CALLDATACOPY cost of the proxy contract, including the memory expansion cost + startGasLeft += calldataWords * 6 + (calldataWords**2) / 512; + // if triggered in a contract call, the spender may be overrefunded by appending dummy data to the call + // so we check if it is a top level call, which would mean the sender paid calldata as part of tx.input + // solhint-disable-next-line avoid-tx-origin + if (msg.sender != tx.origin) { + // We can't be sure if this calldata came from the top level tx, + // so to be safe we tell the gas refunder there was no calldata. + calldataSize = 0; + } else { + // for similar reasons to above we only refund blob gas when the tx.origin is the msg.sender + // this avoids the caller being able to send blobs to other contracts and still get refunded here + if (address(reader4844) != address(0)) { + // add any cost for 4844 data, the data hash reader throws an error prior to 4844 being activated + // we do this addition here rather in the GasRefunder so that we can check the msg.sender is the tx.origin + try reader4844.getDataHashes() returns (bytes32[] memory dataHashes) { + if (dataHashes.length != 0) { + uint256 blobBasefee = reader4844.getBlobBaseFee(); + startGasLeft += + (dataHashes.length * gasPerBlob * blobBasefee) / + block.basefee; + } + } catch {} + } + } + + gasRefunder.onGasSpent(payable(msg.sender), startGasLeft - gasleft(), calldataSize); + } + } +} diff --git a/contracts/src/libraries/IGasRefunder.sol b/contracts/src/libraries/IGasRefunder.sol index 897fba152..f80ac3b2b 100644 --- a/contracts/src/libraries/IGasRefunder.sol +++ b/contracts/src/libraries/IGasRefunder.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version @@ -12,31 +12,3 @@ interface IGasRefunder { uint256 calldataSize ) external returns (bool success); } - -abstract contract GasRefundEnabled { - /// @dev this refunds the sender for execution costs of the tx - /// calldata costs are only refunded if `msg.sender == tx.origin` to guarantee the value refunded relates to charging - /// for the `tx.input`. this avoids a possible attack where you generate large calldata from a contract and get over-refunded - modifier refundsGas(IGasRefunder gasRefunder) { - uint256 startGasLeft = gasleft(); - _; - if (address(gasRefunder) != address(0)) { - uint256 calldataSize = msg.data.length; - uint256 calldataWords = (calldataSize + 31) / 32; - // account for the CALLDATACOPY cost of the proxy contract, including the memory expansion cost - // memory_expansion_cost = (memory_size_word ** 2) / 512 + (3 * memory_size_word) - // CALLDATACOPY_cost = 3 * memory_size_word + memory_expansion_cost - // CALLDATACOPY_cost = 6 * memory_size_word + (memory_size_word ** 2) / 512 - startGasLeft += calldataWords * 6 + (calldataWords**2) / 512; - // if triggered in a contract call, the spender may be overrefunded by appending dummy data to the call - // so we check if it is a top level call, which would mean the sender paid calldata as part of tx.input - // solhint-disable-next-line avoid-tx-origin - if (msg.sender != tx.origin) { - // We can't be sure if this calldata came from the top level tx, - // so to be safe we tell the gas refunder there was no calldata. - calldataSize = 0; - } - gasRefunder.onGasSpent(payable(msg.sender), startGasLeft - gasleft(), calldataSize); - } - } -} diff --git a/contracts/src/libraries/IReader4844.sol b/contracts/src/libraries/IReader4844.sol new file mode 100644 index 000000000..5d3ad2ad8 --- /dev/null +++ b/contracts/src/libraries/IReader4844.sol @@ -0,0 +1,13 @@ +// Copyright 2023-2024, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity >=0.6.9 <0.9.0; + +interface IReader4844 { + /// @notice Returns the current BLOBBASEFEE + function getBlobBaseFee() external view returns (uint256); + + /// @notice Returns all the data hashes of all the blobs on the current transaction + function getDataHashes() external view returns (bytes32[] memory); +} diff --git a/contracts/src/libraries/MerkleLib.sol b/contracts/src/libraries/MerkleLib.sol index 344bad3e9..fd80196f4 100644 --- a/contracts/src/libraries/MerkleLib.sol +++ b/contracts/src/libraries/MerkleLib.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; diff --git a/contracts/src/libraries/MessageTypes.sol b/contracts/src/libraries/MessageTypes.sol index 093cb332a..d7a6a812a 100644 --- a/contracts/src/libraries/MessageTypes.sol +++ b/contracts/src/libraries/MessageTypes.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; diff --git a/contracts/src/mocks/BridgeStub.sol b/contracts/src/mocks/BridgeStub.sol index 6b183bd68..1dd58eaa9 100644 --- a/contracts/src/mocks/BridgeStub.sol +++ b/contracts/src/mocks/BridgeStub.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -8,8 +8,9 @@ import "./InboxStub.sol"; import {BadSequencerMessageNumber} from "../libraries/Error.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; -contract BridgeStub is IBridge { +contract BridgeStub is IBridge, IEthBridge { struct InOutInfo { uint256 index; bool allowed; @@ -18,7 +19,6 @@ contract BridgeStub is IBridge { mapping(address => InOutInfo) private allowedDelayedInboxesMap; //mapping(address => InOutInfo) private allowedOutboxesMap; - IOwnable rollupItem; address[] public allowedDelayedInboxList; address[] public allowedOutboxList; @@ -42,7 +42,7 @@ contract BridgeStub is IBridge { } function allowedOutboxes(address) external pure override returns (bool) { - return true; + revert("NOT_IMPLEMENTED"); } function updateRollupAddress(IOwnable) external pure { @@ -133,11 +133,21 @@ contract BridgeStub is IBridge { } function executeCall( - address, - uint256, - bytes calldata - ) external pure override returns (bool, bytes memory) { - revert("NOT_IMPLEMENTED_EXECUTE_CALL"); + address to, + uint256 value, + bytes calldata data + ) external override returns (bool success, bytes memory returnData) { + (success, returnData) = _executeLowLevelCall(to, value, data); + emit BridgeCallTriggered(msg.sender, to, value, data); + } + + function _executeLowLevelCall( + address to, + uint256 value, + bytes memory data + ) internal returns (bool success, bytes memory returnData) { + // solhint-disable-next-line avoid-low-level-calls + (success, returnData) = to.call{value: value}(data); } function setDelayedInbox(address inbox, bool enabled) external override { @@ -164,6 +174,7 @@ contract BridgeStub is IBridge { address, /* outbox */ bool /* enabled*/ ) external pure override { + revert("NOT_IMPLEMENTED"); } function delayedMessageCount() external view override returns (uint256) { @@ -174,13 +185,13 @@ contract BridgeStub is IBridge { return sequencerInboxAccs.length; } - function rollup() external view override returns (IOwnable) { - return rollupItem; + function rollup() external pure override returns (IOwnable) { + revert("NOT_IMPLEMENTED"); } function acceptFundsFromOldBridge() external payable {} - function initialize(IOwnable rollup_) external { - rollupItem = rollup_; + function initialize(IOwnable) external pure { + revert("NOT_IMPLEMENTED"); } } diff --git a/contracts/src/mocks/BridgeUnproxied.sol b/contracts/src/mocks/BridgeUnproxied.sol index 84b447336..75aecfe14 100644 --- a/contracts/src/mocks/BridgeUnproxied.sol +++ b/contracts/src/mocks/BridgeUnproxied.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/mocks/ExecutionManager.sol b/contracts/src/mocks/ExecutionManager.sol index df8b7287c..782e03c5f 100644 --- a/contracts/src/mocks/ExecutionManager.sol +++ b/contracts/src/mocks/ExecutionManager.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/mocks/InboxStub.sol b/contracts/src/mocks/InboxStub.sol index 2490a89cf..182dda678 100644 --- a/contracts/src/mocks/InboxStub.sol +++ b/contracts/src/mocks/InboxStub.sol @@ -1,11 +1,13 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; +import "../bridge/IInboxBase.sol"; import "../bridge/IInbox.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/Messages.sol"; import "./BridgeStub.sol"; @@ -17,7 +19,7 @@ import { L2MessageType_unsignedContractTx } from "../libraries/MessageTypes.sol"; -contract InboxStub is IInbox { +contract InboxStub is IInboxBase, IInbox { IBridge public override bridge; ISequencerInbox public override sequencerInbox; @@ -70,7 +72,12 @@ contract InboxStub is IInbox { address sender, bytes32 messageDataHash ) internal returns (uint256) { - return bridge.enqueueDelayedMessage{value: msg.value}(kind, sender, messageDataHash); + return + IEthBridge(address(bridge)).enqueueDelayedMessage{value: msg.value}( + kind, + sender, + messageDataHash + ); } function sendUnsignedTransaction( @@ -156,7 +163,7 @@ contract InboxStub is IInbox { address, uint256, bytes calldata - ) external returns (uint256) { + ) external pure returns (uint256) { revert("NOT_IMPLEMENTED"); } @@ -166,7 +173,7 @@ contract InboxStub is IInbox { uint256, uint256, address - ) external returns (uint256) { + ) external pure returns (uint256) { revert("NOT_IMPLEMENTED"); } @@ -184,4 +191,24 @@ contract InboxStub is IInbox { { revert("NOT_IMPLEMENTED"); } + + function setAllowList(address[] memory, bool[] memory) external pure { + revert("NOT_IMPLEMENTED"); + } + + function setAllowListEnabled(bool) external pure { + revert("NOT_IMPLEMENTED"); + } + + function isAllowed(address) external pure returns (bool) { + revert("NOT_IMPLEMENTED"); + } + + function allowListEnabled() external pure returns (bool) { + revert("NOT_IMPLEMENTED"); + } + + function getProxyAdmin() external pure returns (address) { + revert("NOT_IMPLEMENTED"); + } } diff --git a/contracts/src/mocks/MockResultReceiver.sol b/contracts/src/mocks/MockResultReceiver.sol deleted file mode 100644 index dac1947b9..000000000 --- a/contracts/src/mocks/MockResultReceiver.sol +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "../challenge/IOldChallengeResultReceiver.sol"; -import "../challenge/IOldChallengeManager.sol"; - -contract MockResultReceiver is IOldChallengeResultReceiver { - IOldChallengeManager public manager; - address public winner; - address public loser; - uint256 public challengeIndex; - - event ChallengeCompleted( - uint256 indexed challengeIndex, - address indexed winner, - address indexed loser - ); - - constructor(IOldChallengeManager manager_) { - manager = manager_; - } - - function createChallenge( - bytes32 wasmModuleRoot_, - MachineStatus[2] calldata startAndEndMachineStatuses_, - GlobalState[2] calldata startAndEndGlobalStates_, - uint64 numBlocks, - address asserter_, - address challenger_, - uint256 asserterTimeLeft_, - uint256 challengerTimeLeft_ - ) external returns (uint64) { - return - manager.createChallenge( - wasmModuleRoot_, - startAndEndMachineStatuses_, - startAndEndGlobalStates_, - numBlocks, - asserter_, - challenger_, - asserterTimeLeft_, - challengerTimeLeft_ - ); - } - - function completeChallenge( - uint256 challengeIndex_, - address winner_, - address loser_ - ) external override { - winner = winner_; - loser = loser_; - challengeIndex = challengeIndex_; - emit ChallengeCompleted(challengeIndex, winner_, loser_); - } -} diff --git a/contracts/src/mocks/MockRollupEventInbox.sol b/contracts/src/mocks/MockRollupEventInbox.sol index 687b9fcba..58ece522d 100644 --- a/contracts/src/mocks/MockRollupEventInbox.sol +++ b/contracts/src/mocks/MockRollupEventInbox.sol @@ -1,11 +1,11 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; import "../rollup/IRollupEventInbox.sol"; -import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/IDelayedMessageProvider.sol"; import "../precompiles/ArbGasInfo.sol"; import "../libraries/DelegateCallAware.sol"; @@ -54,7 +54,7 @@ contract MockRollupEventInbox is IRollupEventInbox, IDelayedMessageProvider, Del currentDataCost, chainConfig ); - uint256 num = bridge.enqueueDelayedMessage( + uint256 num = IEthBridge(address(bridge)).enqueueDelayedMessage( INITIALIZATION_MSG_TYPE, address(0), keccak256(initMsg) diff --git a/contracts/src/mocks/ProxyAdminForBinding.sol b/contracts/src/mocks/ProxyAdminForBinding.sol new file mode 100644 index 000000000..4d770ab34 --- /dev/null +++ b/contracts/src/mocks/ProxyAdminForBinding.sol @@ -0,0 +1,9 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +contract ProxyAdminForBinding is ProxyAdmin {} diff --git a/contracts/src/mocks/SequencerInboxStub.sol b/contracts/src/mocks/SequencerInboxStub.sol index e1f277d58..49b317020 100644 --- a/contracts/src/mocks/SequencerInboxStub.sol +++ b/contracts/src/mocks/SequencerInboxStub.sol @@ -1,10 +1,11 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; import "../bridge/SequencerInbox.sol"; +import "../bridge/IEthBridge.sol"; import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; contract SequencerInboxStub is SequencerInbox { @@ -12,24 +13,29 @@ contract SequencerInboxStub is SequencerInbox { IBridge bridge_, address sequencer_, ISequencerInbox.MaxTimeVariation memory maxTimeVariation_, - uint256 maxDataSize_ - ) SequencerInbox(maxDataSize_) { + uint256 maxDataSize_, + IReader4844 reader4844_, + bool isUsingFeeToken_ + ) SequencerInbox(maxDataSize_, reader4844_, isUsingFeeToken_) { bridge = bridge_; rollup = IOwnable(msg.sender); - maxTimeVariation = maxTimeVariation_; + delayBlocks = uint64(maxTimeVariation_.delayBlocks); + futureBlocks = uint64(maxTimeVariation_.futureBlocks); + delaySeconds = uint64(maxTimeVariation_.delaySeconds); + futureSeconds = uint64(maxTimeVariation_.futureSeconds); isBatchPoster[sequencer_] = true; } function addInitMessage(uint256 chainId) external { bytes memory initMsg = abi.encodePacked(chainId); - uint256 num = bridge.enqueueDelayedMessage( + uint256 num = IEthBridge(address(bridge)).enqueueDelayedMessage( INITIALIZATION_MSG_TYPE, address(0), keccak256(initMsg) ); require(num == 0, "ALREADY_DELAYED_INIT"); emit InboxMessageDelivered(num, initMsg); - (bytes32 dataHash, TimeBounds memory timeBounds) = formEmptyDataHash(1); + (bytes32 dataHash, IBridge.TimeBounds memory timeBounds) = formEmptyDataHash(1); ( uint256 sequencerMessageCount, bytes32 beforeAcc, @@ -44,11 +50,11 @@ contract SequencerInboxStub is SequencerInbox { delayedAcc, totalDelayedMessagesRead, timeBounds, - BatchDataLocation.NoData + IBridge.BatchDataLocation.NoData ); } - function getTimeBounds() internal view override returns (TimeBounds memory bounds) { + function getTimeBounds() internal view override returns (IBridge.TimeBounds memory bounds) { this; // silence warning about function not being view return bounds; } diff --git a/contracts/src/mocks/Simple.sol b/contracts/src/mocks/Simple.sol index c4ae5ef4b..8beb55876 100644 --- a/contracts/src/mocks/Simple.sol +++ b/contracts/src/mocks/Simple.sol @@ -1,29 +1,38 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; +import "../bridge/ISequencerInbox.sol"; import "../precompiles/ArbRetryableTx.sol"; import "../precompiles/ArbSys.sol"; contract Simple { uint64 public counter; + uint256 public difficulty; event CounterEvent(uint64 count); event RedeemedEvent(address caller, address redeemer); event NullEvent(); + event LogAndIncrementCalled(uint256 expected, uint256 have); function increment() external { counter++; } + function logAndIncrement(uint256 expected) external { + emit LogAndIncrementCalled(expected, counter); + counter++; + } + function incrementEmit() external { counter++; emit CounterEvent(counter); } function incrementRedeem() external { + // solhint-disable-next-line avoid-tx-origin require(msg.sender == tx.origin, "SENDER_NOT_ORIGIN"); require(ArbSys(address(0x64)).wasMyCallersAddressAliased(), "NOT_ALIASED"); counter++; @@ -39,8 +48,12 @@ contract Simple { return block.number; } + function storeDifficulty() external { + difficulty = block.difficulty; + } + function getBlockDifficulty() external view returns (uint256) { - return block.difficulty; + return difficulty; } function noop() external pure {} @@ -87,6 +100,7 @@ contract Simple { useTopLevel, delegateCase ); + // solhint-disable-next-line avoid-low-level-calls (bool success, ) = address(this).delegatecall(data); require(success, "DELEGATE_CALL_FAILED"); @@ -107,7 +121,38 @@ contract Simple { useTopLevel, callCase ); + // solhint-disable-next-line avoid-low-level-calls (success, ) = address(this).call(data); require(success, "CALL_FAILED"); } + + function checkGasUsed(address to, bytes calldata input) external view returns (uint256) { + uint256 before = gasleft(); + // The inner call may revert, but we still want to return the amount of gas used, + // so we ignore the result of this call. + // solhint-disable-next-line avoid-low-level-calls + // solc-ignore-next-line unused-call-retval + to.staticcall{gas: before - 10000}(input); // forgefmt: disable-line + return before - gasleft(); + } + + function postManyBatches( + ISequencerInbox sequencerInbox, + bytes memory batchData, + uint256 numberToPost + ) external { + uint256 sequenceNumber = sequencerInbox.batchCount(); + uint256 delayedMessagesRead = sequencerInbox.totalDelayedMessagesRead(); + for (uint256 i = 0; i < numberToPost; i++) { + sequencerInbox.addSequencerL2Batch( + sequenceNumber, + batchData, + delayedMessagesRead, + IGasRefunder(address(0)), + 0, + 0 + ); + sequenceNumber++; + } + } } diff --git a/contracts/src/mocks/SimpleProxy.sol b/contracts/src/mocks/SimpleProxy.sol index 6c44c86e1..e69f891cc 100644 --- a/contracts/src/mocks/SimpleProxy.sol +++ b/contracts/src/mocks/SimpleProxy.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/mocks/TestWETH9.sol b/contracts/src/mocks/TestWETH9.sol index 423572cb8..3c52e430d 100644 --- a/contracts/src/mocks/TestWETH9.sol +++ b/contracts/src/mocks/TestWETH9.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/mocks/UpgradeExecutorMock.sol b/contracts/src/mocks/UpgradeExecutorMock.sol new file mode 100644 index 000000000..6b7ca9dbf --- /dev/null +++ b/contracts/src/mocks/UpgradeExecutorMock.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; + +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; + +contract UpgradeExecutorMock is + Initializable, + AccessControlUpgradeable, + ReentrancyGuard, + IUpgradeExecutor +{ + using Address for address; + + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); + + /// @notice Emitted when an upgrade execution occurs + event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); + + /// @notice Emitted when target call occurs + event TargetCallExecuted(address indexed target, uint256 value, bytes data); + + constructor() initializer {} + + /// @notice Initialise the upgrade executor + /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE + /// @param executors Can call the execute function - EXECUTOR_ROLE + function initialize(address admin, address[] memory executors) public initializer { + require(admin != address(0), "UpgradeExecutor: zero admin"); + + __AccessControl_init(); + + _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); + _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); + + _setupRole(ADMIN_ROLE, admin); + for (uint256 i = 0; i < executors.length; ++i) { + _setupRole(EXECUTOR_ROLE, executors[i]); + } + } + + /// @notice Execute an upgrade by delegate calling an upgrade contract + /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract + /// will have access to the state of this contract - including the roles. Only upgrade contracts + /// that do not touch local state should be used. + function execute(address upgrade, bytes memory upgradeCallData) + public + payable + onlyRole(EXECUTOR_ROLE) + nonReentrant + { + // OZ Address library check if the address is a contract and bubble up inner revert reason + address(upgrade).functionDelegateCall( + upgradeCallData, + "UpgradeExecutor: inner delegate call failed without reason" + ); + + emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); + } + + /// @notice Execute an upgrade by directly calling target contract + /// @dev Only executor can call this. + function executeCall(address target, bytes memory targetCallData) + public + payable + onlyRole(EXECUTOR_ROLE) + nonReentrant + { + // OZ Address library check if the address is a contract and bubble up inner revert reason + address(target).functionCallWithValue( + targetCallData, + msg.value, + "UpgradeExecutor: inner call failed without reason" + ); + + emit TargetCallExecuted(target, msg.value, targetCallData); + } +} diff --git a/contracts/src/node-interface/NodeInterface.sol b/contracts/src/node-interface/NodeInterface.sol index f74c5a4c8..bba06e52a 100644 --- a/contracts/src/node-interface/NodeInterface.sol +++ b/contracts/src/node-interface/NodeInterface.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -155,4 +155,20 @@ interface NodeInterface { // @dev returns 0 for chains like Nova that don't contain classic blocks // @return number the block number function nitroGenesisBlock() external pure returns (uint256 number); + + // @notice Returns the L1 block number of the L2 block + // @return l1BlockNum The L1 block number + function blockL1Num(uint64 l2BlockNum) external view returns (uint64 l1BlockNum); + + /** + * @notice Finds the L2 block number range that has the given L1 block number + * @param blockNum The L1 block number to search for the range + * Throws if no L2 block exist with the given L1 block number + * @return firstBlock The first L2 block number with the given L1 block number + * @return lastBlock The last L2 block number with the given L1 block number + */ + function l2BlockRangeForL1(uint64 blockNum) + external + view + returns (uint64 firstBlock, uint64 lastBlock); } diff --git a/contracts/src/node-interface/NodeInterfaceDebug.sol b/contracts/src/node-interface/NodeInterfaceDebug.sol index 323b324a1..faeacb746 100644 --- a/contracts/src/node-interface/NodeInterfaceDebug.sol +++ b/contracts/src/node-interface/NodeInterfaceDebug.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/osp/HashProofHelper.sol b/contracts/src/osp/HashProofHelper.sol index 4d37aa9b3..b211908f0 100644 --- a/contracts/src/osp/HashProofHelper.sol +++ b/contracts/src/osp/HashProofHelper.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/IOneStepProofEntry.sol b/contracts/src/osp/IOneStepProofEntry.sol index e769ff9bb..d81059702 100644 --- a/contracts/src/osp/IOneStepProofEntry.sol +++ b/contracts/src/osp/IOneStepProofEntry.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/IOneStepProver.sol b/contracts/src/osp/IOneStepProver.sol index 0127f1d30..6fbc74228 100644 --- a/contracts/src/osp/IOneStepProver.sol +++ b/contracts/src/osp/IOneStepProver.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/OneStepProofEntry.sol b/contracts/src/osp/OneStepProofEntry.sol index 88d2104e7..7b46bf800 100644 --- a/contracts/src/osp/OneStepProofEntry.sol +++ b/contracts/src/osp/OneStepProofEntry.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/OneStepProver0.sol b/contracts/src/osp/OneStepProver0.sol index 2767a8e98..107e49738 100644 --- a/contracts/src/osp/OneStepProver0.sol +++ b/contracts/src/osp/OneStepProver0.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/OneStepProverHostIo.sol b/contracts/src/osp/OneStepProverHostIo.sol index cbb7836d1..232c011fc 100644 --- a/contracts/src/osp/OneStepProverHostIo.sol +++ b/contracts/src/osp/OneStepProverHostIo.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -101,16 +101,35 @@ contract OneStepProverHostIo is IOneStepProver { state.u64Vals[idx] = val; } + uint256 internal constant BLS_MODULUS = + 52435875175126190479447740508185965837690552500527637822603658699938581184513; + uint256 internal constant PRIMITIVE_ROOT_OF_UNITY = + 10238227357739495823651030575849232062558860180284477541189508159991286009131; + + // Computes b**e % m + // Really pure but the Solidity compiler sees the staticcall and requires view + function modExp256( + uint256 b, + uint256 e, + uint256 m + ) internal view returns (uint256) { + bytes memory modExpInput = abi.encode(32, 32, 32, b, e, m); + (bool modexpSuccess, bytes memory modExpOutput) = address(0x05).staticcall(modExpInput); + require(modexpSuccess, "MODEXP_FAILED"); + require(modExpOutput.length == 32, "MODEXP_WRONG_LENGTH"); + return uint256(bytes32(modExpOutput)); + } + function executeReadPreImage( ExecutionContext calldata, Machine memory mach, Module memory mod, - Instruction calldata, + Instruction calldata inst, bytes calldata proof - ) internal pure { + ) internal view { uint256 preimageOffset = mach.valueStack.pop().assumeI32(); uint256 ptr = mach.valueStack.pop().assumeI32(); - if (ptr + 32 > mod.moduleMemory.size || ptr % LEAF_SIZE != 0) { + if (preimageOffset % 32 != 0 || ptr + 32 > mod.moduleMemory.size || ptr % LEAF_SIZE != 0) { mach.status = MachineStatus.ERRORED; return; } @@ -128,18 +147,92 @@ contract OneStepProverHostIo is IOneStepProver { bytes memory extracted; uint8 proofType = uint8(proof[proofOffset]); proofOffset++; - if (proofType == 0) { + // These values must be kept in sync with `arbitrator/arbutil/src/types.rs` + // and `arbutil/preimage_type.go` (both in the nitro repo). + if (inst.argumentData == 0) { + // The machine is asking for a keccak256 preimage + + if (proofType == 0) { + bytes calldata preimage = proof[proofOffset:]; + require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); + + uint256 preimageEnd = preimageOffset + 32; + if (preimageEnd > preimage.length) { + preimageEnd = preimage.length; + } + extracted = preimage[preimageOffset:preimageEnd]; + } else { + // TODO: support proving via an authenticated contract + revert("UNKNOWN_PREIMAGE_PROOF"); + } + } else if (inst.argumentData == 1) { + // The machine is asking for a sha2-256 preimage + + require(proofType == 0, "UNKNOWN_PREIMAGE_PROOF"); bytes calldata preimage = proof[proofOffset:]; - require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); + require(sha256(preimage) == leafContents, "BAD_PREIMAGE"); uint256 preimageEnd = preimageOffset + 32; if (preimageEnd > preimage.length) { preimageEnd = preimage.length; } extracted = preimage[preimageOffset:preimageEnd]; + } else if (inst.argumentData == 2) { + // The machine is asking for an Ethereum versioned hash preimage + + require(proofType == 0, "UNKNOWN_PREIMAGE_PROOF"); + + // kzgProof should be a valid input to the EIP-4844 point evaluation precompile at address 0x0A. + // It should prove the preimageOffset/32'th word of the machine's requested KZG commitment. + bytes calldata kzgProof = proof[proofOffset:]; + + require(bytes32(kzgProof[:32]) == leafContents, "KZG_PROOF_WRONG_HASH"); + + uint256 fieldElementsPerBlob; + uint256 blsModulus; + { + (bool success, bytes memory kzgParams) = address(0x0A).staticcall(kzgProof); + require(success, "INVALID_KZG_PROOF"); + require(kzgParams.length > 0, "KZG_PRECOMPILE_MISSING"); + (fieldElementsPerBlob, blsModulus) = abi.decode(kzgParams, (uint256, uint256)); + } + + // With a hardcoded PRIMITIVE_ROOT_OF_UNITY, we can only support this BLS modulus. + // It may be worth in the future supporting arbitrary BLS moduli, but we would likely need to + // validate a user-supplied root of unity. + require(blsModulus == BLS_MODULUS, "UNKNOWN_BLS_MODULUS"); + + // If preimageOffset is greater than or equal to the blob size, leave extracted empty and call it here. + if (preimageOffset < fieldElementsPerBlob * 32) { + // We need to compute what point the polynomial should be evaluated at to get the right part of the preimage. + // KZG commitments use a bit reversal permutation to order the roots of unity. + // To account for that, we reverse the bit order of the index. + uint256 bitReversedIndex = 0; + // preimageOffset was required to be 32 byte aligned above + uint256 tmp = preimageOffset / 32; + for (uint256 i = 1; i < fieldElementsPerBlob; i <<= 1) { + bitReversedIndex <<= 1; + if (tmp & 1 == 1) { + bitReversedIndex |= 1; + } + tmp >>= 1; + } + + // First, we get the root of unity of order 2**fieldElementsPerBlob. + // We start with a root of unity of order 2**32 and then raise it to + // the power of (2**32)/fieldElementsPerBlob to get root of unity we need. + uint256 rootOfUnityPower = (1 << 32) / fieldElementsPerBlob; + // Then, we raise the root of unity to the power of bitReversedIndex, + // to retrieve this word of the KZG commitment. + rootOfUnityPower *= bitReversedIndex; + // z is the point the polynomial is evaluated at to retrieve this word of data + uint256 z = modExp256(PRIMITIVE_ROOT_OF_UNITY, rootOfUnityPower, blsModulus); + require(bytes32(kzgProof[32:64]) == bytes32(z), "KZG_PROOF_WRONG_Z"); + + extracted = kzgProof[64:96]; + } } else { - // TODO: support proving via an authenticated contract - revert("UNKNOWN_PREIMAGE_PROOF"); + revert("UNKNOWN_PREIMAGE_TYPE"); } for (uint256 i = 0; i < extracted.length; i++) { diff --git a/contracts/src/osp/OneStepProverMath.sol b/contracts/src/osp/OneStepProverMath.sol index 1a2334746..c13dd8945 100644 --- a/contracts/src/osp/OneStepProverMath.sol +++ b/contracts/src/osp/OneStepProverMath.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/osp/OneStepProverMemory.sol b/contracts/src/osp/OneStepProverMemory.sol index 7d33d55e0..6fee2f932 100644 --- a/contracts/src/osp/OneStepProverMemory.sol +++ b/contracts/src/osp/OneStepProverMemory.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/precompiles/ArbAddressTable.sol b/contracts/src/precompiles/ArbAddressTable.sol index b0e8e97bf..b37d949d3 100644 --- a/contracts/src/precompiles/ArbAddressTable.sol +++ b/contracts/src/precompiles/ArbAddressTable.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbAggregator.sol b/contracts/src/precompiles/ArbAggregator.sol index 4c01f00b6..c37af3bae 100644 --- a/contracts/src/precompiles/ArbAggregator.sol +++ b/contracts/src/precompiles/ArbAggregator.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbBLS.sol b/contracts/src/precompiles/ArbBLS.sol index c85d0c8d3..9aef25ce4 100644 --- a/contracts/src/precompiles/ArbBLS.sol +++ b/contracts/src/precompiles/ArbBLS.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbDebug.sol b/contracts/src/precompiles/ArbDebug.sol index 8d59a9d52..9924ededc 100644 --- a/contracts/src/precompiles/ArbDebug.sol +++ b/contracts/src/precompiles/ArbDebug.sol @@ -1,5 +1,5 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// Copyright 2021-2023, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -15,6 +15,9 @@ interface ArbDebug { /// @notice Emit events with values based on the args provided function events(bool flag, bytes32 value) external payable returns (address, uint256); + /// @notice Tries (and fails) to emit logs in a view context + function eventsView() external view; + // Events that exist for testing log creation and pricing event Basic(bool flag, bytes32 indexed value); event Mixed( @@ -34,6 +37,8 @@ interface ArbDebug { function customRevert(uint64 number) external pure; + function legacyError() external pure; + error Custom(uint64, string, bool); error Unused(); } diff --git a/contracts/src/precompiles/ArbFunctionTable.sol b/contracts/src/precompiles/ArbFunctionTable.sol index 1b5e14b76..6ee07011a 100644 --- a/contracts/src/precompiles/ArbFunctionTable.sol +++ b/contracts/src/precompiles/ArbFunctionTable.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbGasInfo.sol b/contracts/src/precompiles/ArbGasInfo.sol index a30772ed5..b4c210960 100644 --- a/contracts/src/precompiles/ArbGasInfo.sol +++ b/contracts/src/precompiles/ArbGasInfo.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -129,4 +129,24 @@ interface ArbGasInfo { /// @notice Returns the available funds from L1 fees function getL1FeesAvailable() external view returns (uint256); + + /// @notice Returns the equilibration units parameter for L1 price adjustment algorithm + /// Available in ArbOS version 20 + function getL1PricingEquilibrationUnits() external view returns (uint256); + + /// @notice Returns the last time the L1 calldata pricer was updated. + /// Available in ArbOS version 20 + function getLastL1PricingUpdateTime() external view returns (uint64); + + /// @notice Returns the amount of L1 calldata payments due for rewards (per the L1 reward rate) + /// Available in ArbOS version 20 + function getL1PricingFundsDueForRewards() external view returns (uint256); + + /// @notice Returns the amount of L1 calldata posted since the last update. + /// Available in ArbOS version 20 + function getL1PricingUnitsSinceUpdate() external view returns (uint64); + + /// @notice Returns the L1 pricing surplus as of the last update (may be negative). + /// Available in ArbOS version 20 + function getLastL1PricingSurplus() external view returns (int256); } diff --git a/contracts/src/precompiles/ArbInfo.sol b/contracts/src/precompiles/ArbInfo.sol index 7668169ad..ab7e7294f 100644 --- a/contracts/src/precompiles/ArbInfo.sol +++ b/contracts/src/precompiles/ArbInfo.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbOwner.sol b/contracts/src/precompiles/ArbOwner.sol index 165039c9d..3ff424f7f 100644 --- a/contracts/src/precompiles/ArbOwner.sol +++ b/contracts/src/precompiles/ArbOwner.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -78,6 +78,12 @@ interface ArbOwner { /// @notice Sets the base charge (in L1 gas) attributed to each data batch in the calldata pricer function setPerBatchGasCharge(int64 cost) external; + /** + * @notice Sets the Brotli compression level used for fast compression + * Available in ArbOS version 12 with default level as 1 + */ + function setBrotliCompressionLevel(uint64 level) external; + /// @notice Sets the cost amortization cap in basis points function setAmortizedCostCapBips(uint64 cap) external; diff --git a/contracts/src/precompiles/ArbOwnerPublic.sol b/contracts/src/precompiles/ArbOwnerPublic.sol index 2b2613a30..0de57ce62 100644 --- a/contracts/src/precompiles/ArbOwnerPublic.sol +++ b/contracts/src/precompiles/ArbOwnerPublic.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -26,5 +26,16 @@ interface ArbOwnerPublic { /// @notice Get the infrastructure fee collector function getInfraFeeAccount() external view returns (address); + /// @notice Get the Brotli compression level used for fast compression + function getBrotliCompressionLevel() external view returns (uint64); + + /// @notice Get the next scheduled ArbOS version upgrade and its activation timestamp. + /// Returns (0, 0) if no ArbOS upgrade is scheduled. + /// Available in ArbOS version 20. + function getScheduledUpgrade() + external + view + returns (uint64 arbosVersion, uint64 scheduledForTimestamp); + event ChainOwnerRectified(address rectifiedOwner); } diff --git a/contracts/src/precompiles/ArbRetryableTx.sol b/contracts/src/precompiles/ArbRetryableTx.sol index 3de17ea12..0600f6513 100644 --- a/contracts/src/precompiles/ArbRetryableTx.sol +++ b/contracts/src/precompiles/ArbRetryableTx.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbStatistics.sol b/contracts/src/precompiles/ArbStatistics.sol index 901dc5ca9..d0a3da001 100644 --- a/contracts/src/precompiles/ArbStatistics.sol +++ b/contracts/src/precompiles/ArbStatistics.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/precompiles/ArbSys.sol b/contracts/src/precompiles/ArbSys.sol index 6966acb8a..4e7a8f41f 100644 --- a/contracts/src/precompiles/ArbSys.sol +++ b/contracts/src/precompiles/ArbSys.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; @@ -147,4 +147,6 @@ interface ArbSys { bytes32 indexed hash, uint256 indexed position ); + + error InvalidBlockNumber(uint256 requested, uint256 current); } diff --git a/contracts/src/precompiles/ArbosTest.sol b/contracts/src/precompiles/ArbosTest.sol index b99dc142a..b766fd015 100644 --- a/contracts/src/precompiles/ArbosTest.sol +++ b/contracts/src/precompiles/ArbosTest.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.4.21 <0.9.0; diff --git a/contracts/src/rollup/AbsRollupEventInbox.sol b/contracts/src/rollup/AbsRollupEventInbox.sol new file mode 100644 index 000000000..69bc9f3fd --- /dev/null +++ b/contracts/src/rollup/AbsRollupEventInbox.sol @@ -0,0 +1,71 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./IRollupEventInbox.sol"; +import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; +import "../precompiles/ArbGasInfo.sol"; +import "../libraries/ArbitrumChecker.sol"; +import "../bridge/IDelayedMessageProvider.sol"; +import "../libraries/DelegateCallAware.sol"; +import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; +import {AlreadyInit, HadZeroInit, RollupNotChanged} from "../libraries/Error.sol"; + +/** + * @title The inbox for rollup protocol events + */ +abstract contract AbsRollupEventInbox is + IRollupEventInbox, + IDelayedMessageProvider, + DelegateCallAware +{ + IBridge public override bridge; + address public override rollup; + + modifier onlyRollup() { + require(msg.sender == rollup, "ONLY_ROLLUP"); + _; + } + + function initialize(IBridge _bridge) external override onlyDelegated { + if (address(bridge) != address(0)) revert AlreadyInit(); + if (address(_bridge) == address(0)) revert HadZeroInit(); + bridge = _bridge; + rollup = address(_bridge.rollup()); + } + + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); + address newRollup = address(bridge.rollup()); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; + } + + function rollupInitialized(uint256 chainId, string calldata chainConfig) + external + override + onlyRollup + { + require(bytes(chainConfig).length > 0, "EMPTY_CHAIN_CONFIG"); + uint8 initMsgVersion = 1; + uint256 currentDataCost = block.basefee; + if (ArbitrumChecker.runningOnArbitrum()) { + currentDataCost += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate(); + } + bytes memory initMsg = abi.encodePacked( + chainId, + initMsgVersion, + currentDataCost, + chainConfig + ); + uint256 num = _enqueueInitializationMsg(initMsg); + emit InboxMessageDelivered(num, initMsg); + } + + function _enqueueInitializationMsg(bytes memory initMsg) internal virtual returns (uint256); +} diff --git a/contracts/src/rollup/Assertion.sol b/contracts/src/rollup/Assertion.sol index 9d3973fea..fd92cf770 100644 --- a/contracts/src/rollup/Assertion.sol +++ b/contracts/src/rollup/Assertion.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/AssertionState.sol b/contracts/src/rollup/AssertionState.sol index 420951eb9..32fe1c9a9 100644 --- a/contracts/src/rollup/AssertionState.sol +++ b/contracts/src/rollup/AssertionState.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/BOLDUpgradeAction.sol b/contracts/src/rollup/BOLDUpgradeAction.sol index 3a476b062..097f8386f 100644 --- a/contracts/src/rollup/BOLDUpgradeAction.sol +++ b/contracts/src/rollup/BOLDUpgradeAction.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -391,30 +391,26 @@ contract BOLDUpgradeAction { TransparentUpgradeableProxy bridge = TransparentUpgradeableProxy(payable(BRIDGE)); address currentBridgeImpl = PROXY_ADMIN_BRIDGE.getProxyImplementation(bridge); - PROXY_ADMIN_BRIDGE.upgradeAndCall( - bridge, IMPL_BRIDGE, abi.encodeWithSelector(IBridge.updateRollupAddress.selector, newRollupAddress) - ); + PROXY_ADMIN_BRIDGE.upgrade(bridge, IMPL_BRIDGE); + IBridge(BRIDGE).updateRollupAddress(IOwnable(newRollupAddress)); PROXY_ADMIN_BRIDGE.upgrade(bridge, currentBridgeImpl); TransparentUpgradeableProxy sequencerInbox = TransparentUpgradeableProxy(payable(SEQ_INBOX)); address currentSequencerInboxImpl = PROXY_ADMIN_BRIDGE.getProxyImplementation(sequencerInbox); - PROXY_ADMIN_SEQUENCER_INBOX.upgradeAndCall( - sequencerInbox, IMPL_SEQUENCER_INBOX, abi.encodeWithSelector(IOutbox.updateRollupAddress.selector) - ); + PROXY_ADMIN_SEQUENCER_INBOX.upgrade(sequencerInbox, IMPL_SEQUENCER_INBOX); + ISequencerInbox(SEQ_INBOX).updateRollupAddress(); PROXY_ADMIN_SEQUENCER_INBOX.upgrade(sequencerInbox, currentSequencerInboxImpl); TransparentUpgradeableProxy rollupEventInbox = TransparentUpgradeableProxy(payable(REI)); address currentRollupEventInboxImpl = PROXY_ADMIN_REI.getProxyImplementation(rollupEventInbox); - PROXY_ADMIN_REI.upgradeAndCall( - rollupEventInbox, IMPL_REI, abi.encodeWithSelector(IOutbox.updateRollupAddress.selector) - ); + PROXY_ADMIN_REI.upgrade(rollupEventInbox, IMPL_REI); + IRollupEventInbox(REI).updateRollupAddress(); PROXY_ADMIN_REI.upgrade(rollupEventInbox, currentRollupEventInboxImpl); TransparentUpgradeableProxy outbox = TransparentUpgradeableProxy(payable(OUTBOX)); address currentOutboxImpl = PROXY_ADMIN_REI.getProxyImplementation(outbox); - PROXY_ADMIN_OUTBOX.upgradeAndCall( - outbox, IMPL_OUTBOX, abi.encodeWithSelector(IOutbox.updateRollupAddress.selector) - ); + PROXY_ADMIN_OUTBOX.upgrade(outbox, IMPL_OUTBOX); + IOutbox(OUTBOX).updateRollupAddress(); PROXY_ADMIN_OUTBOX.upgrade(outbox, currentOutboxImpl); } @@ -441,7 +437,7 @@ contract BOLDUpgradeAction { ContractDependencies memory connectedContracts = ContractDependencies({ bridge: IBridge(BRIDGE), sequencerInbox: ISequencerInbox(SEQ_INBOX), - inbox: IInbox(INBOX), + inbox: IInboxBase(INBOX), outbox: IOutbox(OUTBOX), rollupEventInbox: IRollupEventInbox(REI), challengeManager: challengeManager, diff --git a/contracts/src/rollup/BridgeCreator.sol b/contracts/src/rollup/BridgeCreator.sol index 9cfdb6ac6..0e45f8152 100644 --- a/contracts/src/rollup/BridgeCreator.sol +++ b/contracts/src/rollup/BridgeCreator.sol @@ -1,115 +1,106 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; import "../bridge/Bridge.sol"; import "../bridge/SequencerInbox.sol"; -import "../bridge/ISequencerInbox.sol"; import "../bridge/Inbox.sol"; import "../bridge/Outbox.sol"; import "./RollupEventInbox.sol"; +import "../bridge/ERC20Bridge.sol"; +import "../bridge/ERC20Inbox.sol"; +import "../rollup/ERC20RollupEventInbox.sol"; +import "../bridge/ERC20Outbox.sol"; import "../bridge/IBridge.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; contract BridgeCreator is Ownable { - Bridge public bridgeTemplate; - SequencerInbox public sequencerInboxTemplate; - Inbox public inboxTemplate; - RollupEventInbox public rollupEventInboxTemplate; - Outbox public outboxTemplate; + BridgeContracts public ethBasedTemplates; + BridgeContracts public erc20BasedTemplates; event TemplatesUpdated(); + event ERC20TemplatesUpdated(); - constructor(uint256 maxDataSize) Ownable() { - bridgeTemplate = new Bridge(); - sequencerInboxTemplate = new SequencerInbox(maxDataSize); - inboxTemplate = new Inbox(maxDataSize); - rollupEventInboxTemplate = new RollupEventInbox(); - outboxTemplate = new Outbox(); + struct BridgeContracts { + IBridge bridge; + ISequencerInbox sequencerInbox; + IInboxBase inbox; + IRollupEventInbox rollupEventInbox; + IOutbox outbox; } - function updateTemplates( - address _bridgeTemplate, - address _sequencerInboxTemplate, - address _inboxTemplate, - address _rollupEventInboxTemplate, - address _outboxTemplate - ) external onlyOwner { - bridgeTemplate = Bridge(_bridgeTemplate); - sequencerInboxTemplate = SequencerInbox(_sequencerInboxTemplate); - inboxTemplate = Inbox(_inboxTemplate); - rollupEventInboxTemplate = RollupEventInbox(_rollupEventInboxTemplate); - outboxTemplate = Outbox(_outboxTemplate); + constructor( + BridgeContracts memory _ethBasedTemplates, + BridgeContracts memory _erc20BasedTemplates + ) Ownable() { + ethBasedTemplates = _ethBasedTemplates; + erc20BasedTemplates = _erc20BasedTemplates; + } + function updateTemplates(BridgeContracts calldata _newTemplates) external onlyOwner { + ethBasedTemplates = _newTemplates; emit TemplatesUpdated(); } - struct CreateBridgeFrame { - ProxyAdmin admin; - Bridge bridge; - SequencerInbox sequencerInbox; - Inbox inbox; - RollupEventInbox rollupEventInbox; - Outbox outbox; + function updateERC20Templates(BridgeContracts calldata _newTemplates) external onlyOwner { + erc20BasedTemplates = _newTemplates; + emit ERC20TemplatesUpdated(); + } + + function _createBridge(address adminProxy, BridgeContracts storage templates) + internal + returns (BridgeContracts memory) + { + BridgeContracts memory frame; + frame.bridge = IBridge( + address(new TransparentUpgradeableProxy(address(templates.bridge), adminProxy, "")) + ); + frame.sequencerInbox = ISequencerInbox( + address( + new TransparentUpgradeableProxy(address(templates.sequencerInbox), adminProxy, "") + ) + ); + frame.inbox = IInboxBase( + address(new TransparentUpgradeableProxy(address(templates.inbox), adminProxy, "")) + ); + frame.rollupEventInbox = IRollupEventInbox( + address( + new TransparentUpgradeableProxy(address(templates.rollupEventInbox), adminProxy, "") + ) + ); + frame.outbox = IOutbox( + address(new TransparentUpgradeableProxy(address(templates.outbox), adminProxy, "")) + ); + return frame; } function createBridge( address adminProxy, address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation - ) - external - returns ( - Bridge, - SequencerInbox, - Inbox, - RollupEventInbox, - Outbox - ) - { - CreateBridgeFrame memory frame; - { - frame.bridge = Bridge( - address(new TransparentUpgradeableProxy(address(bridgeTemplate), adminProxy, "")) - ); - frame.sequencerInbox = SequencerInbox( - address( - new TransparentUpgradeableProxy(address(sequencerInboxTemplate), adminProxy, "") - ) - ); - frame.inbox = Inbox( - address(new TransparentUpgradeableProxy(address(inboxTemplate), adminProxy, "")) - ); - frame.rollupEventInbox = RollupEventInbox( - address( - new TransparentUpgradeableProxy( - address(rollupEventInboxTemplate), - adminProxy, - "" - ) - ) - ); - frame.outbox = Outbox( - address(new TransparentUpgradeableProxy(address(outboxTemplate), adminProxy, "")) - ); - } + address nativeToken, + ISequencerInbox.MaxTimeVariation calldata maxTimeVariation + ) external returns (BridgeContracts memory) { + // create ETH-based bridge if address zero is provided for native token, otherwise create ERC20-based bridge + BridgeContracts memory frame = _createBridge( + adminProxy, + nativeToken == address(0) ? ethBasedTemplates : erc20BasedTemplates + ); - frame.bridge.initialize(IOwnable(rollup)); + // init contracts + if (nativeToken == address(0)) { + IEthBridge(address(frame.bridge)).initialize(IOwnable(rollup)); + } else { + IERC20Bridge(address(frame.bridge)).initialize(IOwnable(rollup), nativeToken); + } frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); - frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); - frame.rollupEventInbox.initialize(IBridge(frame.bridge)); - frame.outbox.initialize(IBridge(frame.bridge)); + frame.inbox.initialize(frame.bridge, frame.sequencerInbox); + frame.rollupEventInbox.initialize(frame.bridge); + frame.outbox.initialize(frame.bridge); - return ( - frame.bridge, - frame.sequencerInbox, - frame.inbox, - frame.rollupEventInbox, - frame.outbox - ); + return frame; } } diff --git a/contracts/src/rollup/Config.sol b/contracts/src/rollup/Config.sol index c6603717a..97875dd15 100644 --- a/contracts/src/rollup/Config.sol +++ b/contracts/src/rollup/Config.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -9,7 +9,7 @@ import "../state/Machine.sol"; import "../bridge/ISequencerInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./IRollupEventInbox.sol"; import "./IRollupLogic.sol"; import "../challengeV2/EdgeChallengeManager.sol"; @@ -40,7 +40,7 @@ struct Config { struct ContractDependencies { IBridge bridge; ISequencerInbox sequencerInbox; - IInbox inbox; + IInboxBase inbox; IOutbox outbox; IRollupEventInbox rollupEventInbox; IEdgeChallengeManager challengeManager; diff --git a/contracts/src/rollup/DeployHelper.sol b/contracts/src/rollup/DeployHelper.sol new file mode 100644 index 000000000..1fdf7b0d9 --- /dev/null +++ b/contracts/src/rollup/DeployHelper.sol @@ -0,0 +1,149 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import {IInbox} from "../bridge/IInbox.sol"; +import {IInboxBase} from "../bridge/IInboxBase.sol"; +import {IERC20Bridge} from "../bridge/IERC20Bridge.sol"; +import {IERC20Inbox} from "../bridge/ERC20Inbox.sol"; + +/// @notice Helper contract for deploying some keyless deployment to Arbitrum using delayed inbox +contract DeployHelper { + // All payload are padded with 0x04 (ArbOS L2MessageKind_SignedTx Type) + + // Nick's CREATE2 Deterministic Deployment Proxy + // https://github.com/Arachnid/deterministic-deployment-proxy + address public constant NICK_CREATE2_DEPLOYER = 0x3fAB184622Dc19b6109349B94811493BF2a45362; + uint256 public constant NICK_CREATE2_VALUE = 0.01 ether; + bytes public constant NICK_CREATE2_PAYLOAD = + hex"04f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; + + // ERC-2470 Singleton Factory + // https://eips.ethereum.org/EIPS/eip-2470 + address public constant ERC2470_DEPLOYER = 0xBb6e024b9cFFACB947A71991E386681B1Cd1477D; + uint256 public constant ERC2470_VALUE = 0.0247 ether; + bytes public constant ERC2470_PAYLOAD = + hex"04f9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b83247000822470"; + + // Zoltu's CREATE2 Deterministic Deployment Proxy + // https://github.com/Zoltu/deterministic-deployment-proxy + address public constant ZOLTU_CREATE2_DEPLOYER = 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1; + uint256 public constant ZOLTU_VALUE = 0.01 ether; + bytes public constant ZOLTU_CREATE2_PAYLOAD = + hex"04f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; + + // ERC-1820: Pseudo-introspection Registry Contract + // https://eips.ethereum.org/EIPS/eip-1820 + address public constant ERC1820_DEPLOYER = 0xa990077c3205cbDf861e17Fa532eeB069cE9fF96; + uint256 public constant ERC1820_VALUE = 0.08 ether; + bytes public constant ERC1820_PAYLOAD = + hex"04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820"; + + uint256 internal constant GASLIMIT = 21_000; + + function _fundAndDeploy( + address inbox, + uint256 _value, + address _l2Address, + bytes memory payload, + bool _isUsingFeeToken, + uint256 maxFeePerGas + ) internal { + uint256 submissionCost = IInboxBase(inbox).calculateRetryableSubmissionFee( + 0, + block.basefee + ); + uint256 feeAmount = _value + submissionCost + GASLIMIT * maxFeePerGas; + + // fund the target L2 address + if (_isUsingFeeToken) { + IERC20Inbox(inbox).createRetryableTicket({ + to: _l2Address, + l2CallValue: _value, + maxSubmissionCost: submissionCost, + excessFeeRefundAddress: msg.sender, + callValueRefundAddress: msg.sender, + gasLimit: GASLIMIT, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: feeAmount, + data: "" + }); + } else { + IInbox(inbox).createRetryableTicket{value: feeAmount}({ + to: _l2Address, + l2CallValue: _value, + maxSubmissionCost: submissionCost, + excessFeeRefundAddress: msg.sender, + callValueRefundAddress: msg.sender, + gasLimit: GASLIMIT, + maxFeePerGas: maxFeePerGas, + data: "" + }); + } + // send L2 msg to execute deployment transaction + IInboxBase(inbox).sendL2Message(payload); + } + + function perform( + address _inbox, + address _nativeToken, + uint256 _maxFeePerGas + ) external payable { + bool isUsingFeeToken = _nativeToken != address(0); + + _fundAndDeploy( + _inbox, + NICK_CREATE2_VALUE, + NICK_CREATE2_DEPLOYER, + NICK_CREATE2_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas + ); + _fundAndDeploy( + _inbox, + ERC2470_VALUE, + ERC2470_DEPLOYER, + ERC2470_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas + ); + _fundAndDeploy( + _inbox, + ZOLTU_VALUE, + ZOLTU_CREATE2_DEPLOYER, + ZOLTU_CREATE2_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas + ); + _fundAndDeploy( + _inbox, + ERC1820_VALUE, + ERC1820_DEPLOYER, + ERC1820_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas + ); + + // if paying with ETH refund the caller + if (!isUsingFeeToken) { + payable(msg.sender).transfer(address(this).balance); + } + } + + function getDeploymentTotalCost(IInboxBase inbox, uint256 maxFeePerGas) + public + view + returns (uint256) + { + uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); + return + NICK_CREATE2_VALUE + + ERC2470_VALUE + + ZOLTU_VALUE + + ERC1820_VALUE + + 4 * + (submissionCost + GASLIMIT * maxFeePerGas); + } +} diff --git a/contracts/src/rollup/ERC20RollupEventInbox.sol b/contracts/src/rollup/ERC20RollupEventInbox.sol new file mode 100644 index 000000000..2772dbb78 --- /dev/null +++ b/contracts/src/rollup/ERC20RollupEventInbox.sol @@ -0,0 +1,26 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./AbsRollupEventInbox.sol"; +import "../bridge/IERC20Bridge.sol"; + +/** + * @title The inbox for rollup protocol events + */ +contract ERC20RollupEventInbox is AbsRollupEventInbox { + constructor() AbsRollupEventInbox() {} + + function _enqueueInitializationMsg(bytes memory initMsg) internal override returns (uint256) { + uint256 tokenAmount = 0; + return + IERC20Bridge(address(bridge)).enqueueDelayedMessage( + INITIALIZATION_MSG_TYPE, + address(0), + keccak256(initMsg), + tokenAmount + ); + } +} diff --git a/contracts/src/rollup/IRollupAdmin.sol b/contracts/src/rollup/IRollupAdmin.sol index 519fee2d5..b6f0d5c2b 100644 --- a/contracts/src/rollup/IRollupAdmin.sol +++ b/contracts/src/rollup/IRollupAdmin.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/IRollupCore.sol b/contracts/src/rollup/IRollupCore.sol index f0eed7c0c..d0c0a1dd4 100644 --- a/contracts/src/rollup/IRollupCore.sol +++ b/contracts/src/rollup/IRollupCore.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -7,7 +7,7 @@ pragma solidity ^0.8.0; import "./Assertion.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./IRollupEventInbox.sol"; import "../challengeV2/EdgeChallengeManager.sol"; @@ -59,6 +59,8 @@ interface IRollupCore is IAssertionChain { function rollupEventInbox() external view returns (IRollupEventInbox); + function challengeManager() external view returns (IEdgeChallengeManager); + function loserStakeEscrow() external view returns (address); function stakeToken() external view returns (address); diff --git a/contracts/src/rollup/IRollupEventInbox.sol b/contracts/src/rollup/IRollupEventInbox.sol index dbe4b1ad7..2e79f7e65 100644 --- a/contracts/src/rollup/IRollupEventInbox.sol +++ b/contracts/src/rollup/IRollupEventInbox.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/IRollupLogic.sol b/contracts/src/rollup/IRollupLogic.sol index 47255584e..a91b67643 100644 --- a/contracts/src/rollup/IRollupLogic.sol +++ b/contracts/src/rollup/IRollupLogic.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/RollupAdminLogic.sol b/contracts/src/rollup/RollupAdminLogic.sol index 98124550e..ae43a2b5c 100644 --- a/contracts/src/rollup/RollupAdminLogic.sol +++ b/contracts/src/rollup/RollupAdminLogic.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -298,7 +298,7 @@ contract RollupAdminLogic is RollupCore, IRollupAdmin, DoubleLogicUUPSUpgradeabl * @notice sets the rollup's inbox reference. Does not update the bridge's view. * @param newInbox new address of inbox */ - function setInbox(IInbox newInbox) external { + function setInbox(IInboxBase newInbox) external { inbox = newInbox; emit OwnerFunctionCalled(28); } diff --git a/contracts/src/rollup/RollupCore.sol b/contracts/src/rollup/RollupCore.sol index e4a5de79e..ea9267b47 100644 --- a/contracts/src/rollup/RollupCore.sol +++ b/contracts/src/rollup/RollupCore.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -81,7 +81,7 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable { // so that the result of a challenge is observable widely before it causes an assertion to be confirmed uint64 public challengeGracePeriodBlocks; - IInbox public inbox; + IInboxBase public inbox; IBridge public bridge; IOutbox public outbox; IRollupEventInbox public rollupEventInbox; diff --git a/contracts/src/rollup/RollupCreator.sol b/contracts/src/rollup/RollupCreator.sol index 35df7f48c..49e60d54d 100644 --- a/contracts/src/rollup/RollupCreator.sol +++ b/contracts/src/rollup/RollupCreator.sol @@ -1,48 +1,83 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; +import "./RollupProxy.sol"; +import "./IRollupAdmin.sol"; import "./BridgeCreator.sol"; - +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; - -import "./RollupProxy.sol"; -import "./IRollupAdmin.sol"; +import {DeployHelper} from "./DeployHelper.sol"; +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract RollupCreator is Ownable { + using SafeERC20 for IERC20; + event RollupCreated( - address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge + address indexed rollupAddress, + address indexed nativeToken, + address inboxAddress, + address outbox, + address rollupEventInbox, + address challengeManager, + address adminProxy, + address sequencerInbox, + address bridge, + address upgradeExecutor, + address validatorWalletCreator ); event TemplatesUpdated(); + struct RollupDeploymentParams { + Config config; + address[] validators; + uint256 maxDataSize; + address nativeToken; + bool deployFactoriesToL2; + uint256 maxFeePerGasForRetryables; + //// @dev The address of the batch poster, not used when set to zero address + address[] batchPosters; + address batchPosterManager; + } + BridgeCreator public bridgeCreator; IOneStepProofEntry public osp; IEdgeChallengeManager public challengeManagerTemplate; IRollupAdmin public rollupAdminLogic; IRollupUser public rollupUserLogic; + IUpgradeExecutor public upgradeExecutorLogic; address public validatorWalletCreator; + DeployHelper public l2FactoriesDeployer; + constructor() Ownable() {} + // creator receives back excess fees (for deploying L2 factories) so it can refund the caller + receive() external payable {} + function setTemplates( BridgeCreator _bridgeCreator, IOneStepProofEntry _osp, IEdgeChallengeManager _challengeManagerLogic, IRollupAdmin _rollupAdminLogic, IRollupUser _rollupUserLogic, - address _validatorWalletCreator + IUpgradeExecutor _upgradeExecutorLogic, + address _validatorWalletCreator, + DeployHelper _l2FactoriesDeployer ) external onlyOwner { bridgeCreator = _bridgeCreator; osp = _osp; challengeManagerTemplate = _challengeManagerLogic; rollupAdminLogic = _rollupAdminLogic; rollupUserLogic = _rollupUserLogic; + upgradeExecutorLogic = _upgradeExecutorLogic; validatorWalletCreator = _validatorWalletCreator; + l2FactoriesDeployer = _l2FactoriesDeployer; emit TemplatesUpdated(); } @@ -77,101 +112,186 @@ contract RollupCreator is Ownable { return challengeManager; } - struct DeployedContracts { - RollupProxy rollup; - IInbox inbox; - ISequencerInbox sequencerInbox; - IBridge bridge; - IRollupEventInbox rollupEventInbox; - ProxyAdmin proxyAdmin; - IEdgeChallengeManager challengeManager; - IOutbox outbox; - } - /** * @notice Create a new rollup * @dev After this setup: - * @dev - Rollup should be the owner of bridge - * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin - * @dev - RollupOwner should be the owner of Rollup + * @dev - UpgradeExecutor should be the owner of rollup + * @dev - UpgradeExecutor should be the owner of proxyAdmin which manages bridge contracts + * @dev - config.rollupOwner should have executor role on upgradeExecutor * @dev - Bridge should have a single inbox and outbox * @dev - Validators and batch poster should be set if provided - * @param config The configuration for the rollup - * @param _batchPoster The address of the batch poster, not used when set to zero address - * @param _validators The list of validator addresses, not used when set to empty list + * @param deployParams The parameters for the rollup deployment. It consists of: + * - config The configuration for the rollup + * - batchPoster The address of the batch poster, not used when set to zero address + * - validators The list of validator addresses, not used when set to empty list + * - nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided + * - deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. + * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it + * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that + * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct + * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. + * - maxFeePerGasForRetryables price bid for L2 execution. + * - dataHashReader The address of the data hash reader used to read blob hashes * @return The address of the newly created rollup */ - function createRollup( - Config memory config, - address _batchPoster, - address[] memory _validators, - bool disableValidatorWhitelist, - uint256 maxDataSize - ) public returns (address) { - // Make sure the immutable maxDataSize is as expected - require(maxDataSize == bridgeCreator.sequencerInboxTemplate().maxDataSize(), "SI_MAX_DATA_SIZE_MISMATCH"); - require(maxDataSize == bridgeCreator.inboxTemplate().maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); - DeployedContracts memory deployed; - - deployed.proxyAdmin = new ProxyAdmin(); - deployed.proxyAdmin.transferOwnership(config.owner); + function createRollup(RollupDeploymentParams memory deployParams) + public + payable + returns (address) + { + { + // Make sure the immutable maxDataSize is as expected + (, ISequencerInbox ethSequencerInbox, IInboxBase ethInbox, , ) = bridgeCreator + .ethBasedTemplates(); + require( + deployParams.maxDataSize == ethSequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require(deployParams.maxDataSize == ethInbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); + + (, ISequencerInbox erc20SequencerInbox, IInboxBase erc20Inbox, , ) = bridgeCreator + .erc20BasedTemplates(); + require( + deployParams.maxDataSize == erc20SequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require( + deployParams.maxDataSize == erc20Inbox.maxDataSize(), + "I_MAX_DATA_SIZE_MISMATCH" + ); + } + + // create proxy admin which will manage bridge contracts + ProxyAdmin proxyAdmin = new ProxyAdmin(); // Create the rollup proxy to figure out the address and initialize it later - deployed.rollup = - new RollupProxy{salt: keccak256(abi.encode(config, _batchPoster, _validators, disableValidatorWhitelist, maxDataSize))}(); + RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(deployParams))}(); - (deployed.bridge, deployed.sequencerInbox, deployed.inbox, deployed.rollupEventInbox, deployed.outbox) = - bridgeCreator.createBridge( - address(deployed.proxyAdmin), address(deployed.rollup), config.sequencerInboxMaxTimeVariation + BridgeCreator.BridgeContracts memory bridgeContracts = bridgeCreator.createBridge( + address(proxyAdmin), + address(rollup), + deployParams.nativeToken, + deployParams.config.sequencerInboxMaxTimeVariation ); - deployed.challengeManager = - createChallengeManager(address(deployed.rollup), address(deployed.proxyAdmin), config); + IEdgeChallengeManager challengeManager = createChallengeManager(address(rollup), address(proxyAdmin), deployParams.config); - // initialize the rollup with this contract as owner to set batch poster and validators - // it will transfer the ownership back to the actual owner later - address actualOwner = config.owner; - config.owner = address(this); + // deploy and init upgrade executor + address upgradeExecutor = _deployUpgradeExecutor(deployParams.config.owner, proxyAdmin); - deployed.rollup.initializeProxy( - config, + // upgradeExecutor shall be proxyAdmin's owner + proxyAdmin.transferOwnership(address(upgradeExecutor)); + + // initialize the rollup with this contract as owner to set batch poster and validators + // it will transfer the ownership to the upgrade executor later + deployParams.config.owner = address(this); + rollup.initializeProxy( + deployParams.config, ContractDependencies({ - bridge: deployed.bridge, - sequencerInbox: deployed.sequencerInbox, - inbox: deployed.inbox, - outbox: deployed.outbox, - rollupEventInbox: deployed.rollupEventInbox, - challengeManager: deployed.challengeManager, + bridge: bridgeContracts.bridge, + sequencerInbox: bridgeContracts.sequencerInbox, + inbox: bridgeContracts.inbox, + outbox: bridgeContracts.outbox, + rollupEventInbox: bridgeContracts.rollupEventInbox, + challengeManager: challengeManager, rollupAdminLogic: address(rollupAdminLogic), rollupUserLogic: rollupUserLogic, validatorWalletCreator: validatorWalletCreator }) ); - // setting batch poster, if the address provided is not zero address - if (_batchPoster != address(0)) { - deployed.sequencerInbox.setIsBatchPoster(_batchPoster, true); + // Setting batch posters and batch poster manager + for (uint256 i = 0; i < deployParams.batchPosters.length; i++) { + bridgeContracts.sequencerInbox.setIsBatchPoster(deployParams.batchPosters[i], true); } + if (deployParams.batchPosterManager != address(0)) { + bridgeContracts.sequencerInbox.setBatchPosterManager(deployParams.batchPosterManager); + } + // Call setValidator on the newly created rollup contract just if validator set is not empty - if (_validators.length != 0) { - bool[] memory _vals = new bool[](_validators.length); - for (uint256 i = 0; i < _validators.length; i++) { + if (deployParams.validators.length != 0) { + bool[] memory _vals = new bool[](deployParams.validators.length); + for (uint256 i = 0; i < deployParams.validators.length; i++) { _vals[i] = true; } - IRollupAdmin(address(deployed.rollup)).setValidator(_validators, _vals); + IRollupAdmin(address(rollup)).setValidator(deployParams.validators, _vals); } - if (disableValidatorWhitelist == true) { - IRollupAdmin(address(deployed.rollup)).setValidatorWhitelistDisabled(disableValidatorWhitelist); + + IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); + + if (deployParams.deployFactoriesToL2) { + _deployFactories( + address(bridgeContracts.inbox), + deployParams.nativeToken, + deployParams.maxFeePerGasForRetryables + ); } - IRollupAdmin(address(deployed.rollup)).setOwner(actualOwner); emit RollupCreated( - address(deployed.rollup), - address(deployed.inbox), - address(deployed.proxyAdmin), - address(deployed.sequencerInbox), - address(deployed.bridge) + address(rollup), + deployParams.nativeToken, + address(bridgeContracts.inbox), + address(bridgeContracts.outbox), + address(bridgeContracts.rollupEventInbox), + address(challengeManager), + address(proxyAdmin), + address(bridgeContracts.sequencerInbox), + address(bridgeContracts.bridge), + address(upgradeExecutor), + address(validatorWalletCreator) + ); + return address(rollup); + } + + function _deployUpgradeExecutor(address rollupOwner, ProxyAdmin proxyAdmin) + internal + returns (address) + { + IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( + address( + new TransparentUpgradeableProxy( + address(upgradeExecutorLogic), + address(proxyAdmin), + bytes("") + ) + ) ); - return address(deployed.rollup); + address[] memory executors = new address[](1); + executors[0] = rollupOwner; + upgradeExecutor.initialize(address(upgradeExecutor), executors); + + return address(upgradeExecutor); + } + + function _deployFactories( + address _inbox, + address _nativeToken, + uint256 _maxFeePerGas + ) internal { + if (_nativeToken == address(0)) { + // we need to fund 4 retryable tickets + uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost( + IInboxBase(_inbox), + _maxFeePerGas + ); + + // do it + l2FactoriesDeployer.perform{value: cost}(_inbox, _nativeToken, _maxFeePerGas); + + // refund the caller + // solhint-disable-next-line avoid-low-level-calls + (bool sent, ) = msg.sender.call{value: address(this).balance}(""); + require(sent, "Refund failed"); + } else { + // Transfer fee token amount needed to pay for retryable fees to the inbox. + uint256 totalFee = l2FactoriesDeployer.getDeploymentTotalCost( + IInboxBase(_inbox), + _maxFeePerGas + ); + IERC20(_nativeToken).safeTransferFrom(msg.sender, _inbox, totalFee); + + // do it + l2FactoriesDeployer.perform(_inbox, _nativeToken, _maxFeePerGas); + } } } diff --git a/contracts/src/rollup/RollupEventInbox.sol b/contracts/src/rollup/RollupEventInbox.sol index 10d842575..bb3757784 100644 --- a/contracts/src/rollup/RollupEventInbox.sol +++ b/contracts/src/rollup/RollupEventInbox.sol @@ -1,64 +1,24 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; -import "./IRollupEventInbox.sol"; -import "../bridge/IBridge.sol"; -import "../bridge/IDelayedMessageProvider.sol"; -import "../precompiles/ArbGasInfo.sol"; -import "../libraries/DelegateCallAware.sol"; -import "../libraries/ArbitrumChecker.sol"; -import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; -import {AlreadyInit, HadZeroInit} from "../libraries/Error.sol"; +import "./AbsRollupEventInbox.sol"; +import "../bridge/IEthBridge.sol"; /** * @title The inbox for rollup protocol events */ -contract RollupEventInbox is IRollupEventInbox, IDelayedMessageProvider, DelegateCallAware { - IBridge public override bridge; - address public override rollup; +contract RollupEventInbox is AbsRollupEventInbox { + constructor() AbsRollupEventInbox() {} - modifier onlyRollup() { - require(msg.sender == rollup, "ONLY_ROLLUP"); - _; - } - - function initialize(IBridge _bridge) external override onlyDelegated { - if (address(bridge) != address(0)) revert AlreadyInit(); - if (address(_bridge) == address(0)) revert HadZeroInit(); - bridge = _bridge; - rollup = address(_bridge.rollup()); - } - - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { - rollup = address(bridge.rollup()); - } - - function rollupInitialized(uint256 chainId, string calldata chainConfig) - external - override - onlyRollup - { - require(bytes(chainConfig).length > 0, "EMPTY_CHAIN_CONFIG"); - uint8 initMsgVersion = 1; - uint256 currentDataCost = block.basefee; - if (ArbitrumChecker.runningOnArbitrum()) { - currentDataCost += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate(); - } - bytes memory initMsg = abi.encodePacked( - chainId, - initMsgVersion, - currentDataCost, - chainConfig - ); - uint256 num = bridge.enqueueDelayedMessage( - INITIALIZATION_MSG_TYPE, - address(0), - keccak256(initMsg) - ); - emit InboxMessageDelivered(num, initMsg); + function _enqueueInitializationMsg(bytes memory initMsg) internal override returns (uint256) { + return + IEthBridge(address(bridge)).enqueueDelayedMessage( + INITIALIZATION_MSG_TYPE, + address(0), + keccak256(initMsg) + ); } } diff --git a/contracts/src/rollup/RollupLib.sol b/contracts/src/rollup/RollupLib.sol index 16307a58b..48e14e3e4 100644 --- a/contracts/src/rollup/RollupLib.sol +++ b/contracts/src/rollup/RollupLib.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -10,7 +10,7 @@ import "../bridge/ISequencerInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./Assertion.sol"; import "./IRollupEventInbox.sol"; import "../challengeV2/EdgeChallengeManager.sol"; diff --git a/contracts/src/rollup/RollupProxy.sol b/contracts/src/rollup/RollupProxy.sol index aa490fc83..3483e5963 100644 --- a/contracts/src/rollup/RollupProxy.sol +++ b/contracts/src/rollup/RollupProxy.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/RollupUserLogic.sol b/contracts/src/rollup/RollupUserLogic.sol index f0775f57f..2c3166548 100644 --- a/contracts/src/rollup/RollupUserLogic.sol +++ b/contracts/src/rollup/RollupUserLogic.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/ValidatorUtils.sol b/contracts/src/rollup/ValidatorUtils.sol index fcb7afebd..6c2843717 100644 --- a/contracts/src/rollup/ValidatorUtils.sol +++ b/contracts/src/rollup/ValidatorUtils.sol @@ -1,245 +1 @@ -// // Copyright 2021-2022, Offchain Labs, Inc. -// // For license information, see https://github.com/nitro/blob/master/LICENSE -// // SPDX-License-Identifier: BUSL-1.1 - -// pragma solidity ^0.8.0; - -// pragma experimental ABIEncoderV2; - -// import "../rollup/IRollupCore.sol"; -// import "../challenge/IOldChallengeManager.sol"; -// import "./IRollupLogic.sol"; - -// import {NO_CHAL_INDEX} from "../libraries/Constants.sol"; - -// contract ValidatorUtils { -// using AssertionNodeLib for AssertionNode; - -// enum ConfirmType { -// NONE, -// VALID, -// INVALID -// } - -// enum AssertionConflictType { -// NONE, -// FOUND, -// INDETERMINATE, -// INCOMPLETE -// } - -// struct AssertionConflict { -// AssertionConflictType ty; -// uint64 assertion1; -// uint64 assertion2; -// } - -// function findStakerConflict( -// IRollupCore rollup, -// address staker1, -// address staker2, -// uint256 maxDepth -// ) external view returns (AssertionConflict memory) { -// uint64 staker1AssertionNum = rollup.latestStakedAssertion(staker1); -// uint64 staker2AssertionNum = rollup.latestStakedAssertion(staker2); -// return findAssertionConflict(rollup, staker1AssertionNum, staker2AssertionNum, maxDepth); -// } - -// function checkDecidableNextAssertion(IRollupUserAbs rollup) external view returns (ConfirmType) { -// try ValidatorUtils(address(this)).requireConfirmable(rollup) { -// return ConfirmType.VALID; -// } catch {} - -// try ValidatorUtils(address(this)).requireRejectable(rollup) { -// return ConfirmType.INVALID; -// } catch { -// return ConfirmType.NONE; -// } -// } - -// function requireRejectable(IRollupCore rollup) external view { -// IRollupUser(address(rollup)).requireUnresolvedExists(); -// uint64 firstUnresolvedAssertion = rollup.firstUnresolvedAssertion(); -// AssertionNode memory assertion = rollup.getAssertion(firstUnresolvedAssertion); -// if (assertion.prevNum == rollup.latestConfirmed()) { -// // Verify the block's deadline has passed -// require(block.number >= assertion.deadlineBlock, "BEFORE_DEADLINE"); -// rollup.getAssertion(assertion.prevNum).requirePastChildConfirmDeadline(); - -// // Verify that no staker is staked on this assertion -// // TODO: HN: review this -// // require( -// // assertion.stakerCount == -// // IRollupUser(address(rollup)).countStakedZombies(firstUnresolvedAssertion), -// // "HAS_STAKERS" -// // ); -// } -// } - -// function requireConfirmable(IRollupUserAbs rollup) external view { -// rollup.requireUnresolvedExists(); - -// uint256 stakerCount = rollup.stakerCount(); -// // There is at least one non-zombie staker -// require(stakerCount > 0, "NO_STAKERS"); - -// uint64 firstUnresolved = rollup.firstUnresolvedAssertion(); -// AssertionNode memory assertion = rollup.getAssertion(firstUnresolved); - -// // Verify the block's deadline has passed -// assertion.requirePastDeadline(); - -// // Check that prev is latest confirmed -// assert(assertion.prevNum == rollup.latestConfirmed()); - -// AssertionNode memory prevAssertion = rollup.getAssertion(assertion.prevNum); -// prevAssertion.requirePastChildConfirmDeadline(); - -// // TODO: HN: review this -// // uint256 zombiesStakedOnOtherChildren = rollup.countZombiesStakedOnChildren(assertion.prevNum) - -// // rollup.countStakedZombies(firstUnresolved); -// // require( -// // prevAssertion.childStakerCount == assertion.stakerCount + zombiesStakedOnOtherChildren, -// // "NOT_ALL_STAKED" -// // ); -// } - -// function refundableStakers(IRollupCore rollup) external view returns (address[] memory) { -// uint256 stakerCount = rollup.stakerCount(); -// address[] memory stakers = new address[](stakerCount); -// uint256 latestConfirmed = rollup.latestConfirmed(); -// uint256 index = 0; -// for (uint64 i = 0; i < stakerCount; i++) { -// address staker = rollup.getStakerAddress(i); -// uint256 latestStakedAssertion = rollup.latestStakedAssertion(staker); -// if (latestStakedAssertion <= latestConfirmed && rollup.currentChallenge(staker) == 0) { -// stakers[index] = staker; -// index++; -// } -// } -// assembly { -// mstore(stakers, index) -// } -// return stakers; -// } - -// function latestStaked(IRollupCore rollup, address staker) -// external -// view -// returns (uint64, AssertionNode memory) -// { -// uint64 num = rollup.latestStakedAssertion(staker); -// if (num == 0) { -// num = rollup.latestConfirmed(); -// } -// AssertionNode memory assertion = rollup.getAssertion(num); -// return (num, assertion); -// } - -// function stakedAssertions(IRollupCore rollup, address staker) -// external -// view -// returns (uint64[] memory) -// { -// uint64[] memory assertions = new uint64[](100000); -// uint256 index = 0; -// for (uint64 i = rollup.latestConfirmed(); i <= rollup.latestAssertionCreated(); i++) { -// if (rollup.assertionHasStaker(i, staker)) { -// assertions[index] = i; -// index++; -// } -// } -// // Shrink array down to real size -// assembly { -// mstore(assertions, index) -// } -// return assertions; -// } - -// function findAssertionConflict( -// IRollupCore rollup, -// uint64 assertion1, -// uint64 assertion2, -// uint256 maxDepth -// ) public view returns (AssertionConflict memory) { -// uint64 firstUnresolvedAssertion = rollup.firstUnresolvedAssertion(); -// uint64 assertion1Prev = rollup.getAssertion(assertion1).prevNum; -// uint64 assertion2Prev = rollup.getAssertion(assertion2).prevNum; - -// for (uint256 i = 0; i < maxDepth; i++) { -// if (assertion1 == assertion2) { -// return AssertionConflict(AssertionConflictType.NONE, assertion1, assertion2); -// } -// if (assertion1Prev == assertion2Prev) { -// return AssertionConflict(AssertionConflictType.FOUND, assertion1, assertion2); -// } -// if (assertion1Prev < firstUnresolvedAssertion && assertion2Prev < firstUnresolvedAssertion) { -// return AssertionConflict(AssertionConflictType.INDETERMINATE, 0, 0); -// } -// if (assertion1Prev < assertion2Prev) { -// assertion2 = assertion2Prev; -// assertion2Prev = rollup.getAssertion(assertion2).prevNum; -// } else { -// assertion1 = assertion1Prev; -// assertion1Prev = rollup.getAssertion(assertion1).prevNum; -// } -// } -// return AssertionConflict(AssertionConflictType.INCOMPLETE, 0, 0); -// } - -// function getStakers( -// IRollupCore rollup, -// uint64 startIndex, -// uint64 max -// ) public view returns (address[] memory, bool hasMore) { -// uint256 maxStakers = rollup.stakerCount(); -// if (startIndex + max <= maxStakers) { -// maxStakers = startIndex + max; -// hasMore = true; -// } - -// address[] memory stakers = new address[](maxStakers); -// for (uint64 i = 0; i < maxStakers; i++) { -// stakers[i] = rollup.getStakerAddress(startIndex + i); -// } -// return (stakers, hasMore); -// } - -// function timedOutChallenges( -// IRollupCore rollup, -// uint64 startIndex, -// uint64 max -// ) external view returns (uint64[] memory, bool hasMore) { -// (address[] memory stakers, bool hasMoreStakers) = getStakers(rollup, startIndex, max); -// uint64[] memory challenges = new uint64[](stakers.length); -// uint256 index = 0; -// IOldChallengeManager oldChallengeManager = rollup.oldChallengeManager(); -// for (uint256 i = 0; i < stakers.length; i++) { -// address staker = stakers[i]; -// uint64 challengeIndex = rollup.currentChallenge(staker); -// if ( -// challengeIndex != NO_CHAL_INDEX && -// oldChallengeManager.isTimedOut(challengeIndex) && -// oldChallengeManager.currentResponder(challengeIndex) == staker -// ) { -// challenges[index++] = challengeIndex; -// } -// } -// // Shrink array down to real size -// assembly { -// mstore(challenges, index) -// } -// return (challenges, hasMoreStakers); -// } - -// // Worst case runtime of O(depth), as it terminates if it switches paths. -// function areUnresolvedAssertionsLinear(IRollupCore rollup) external view returns (bool) { -// uint256 end = rollup.latestAssertionCreated(); -// for (uint64 i = rollup.firstUnresolvedAssertion(); i <= end; i++) { -// if (i > 0 && rollup.getAssertion(i).prevNum != i - 1) { -// return false; -// } -// } -// return true; -// } -// } +pragma solidity ^0.8.0; diff --git a/contracts/src/rollup/ValidatorWallet.sol b/contracts/src/rollup/ValidatorWallet.sol index f064710f5..87c760bee 100644 --- a/contracts/src/rollup/ValidatorWallet.sol +++ b/contracts/src/rollup/ValidatorWallet.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; @@ -7,6 +7,7 @@ pragma solidity ^0.8.0; import "../challenge/IOldChallengeManager.sol"; import "../libraries/DelegateCallAware.sol"; import "../libraries/IGasRefunder.sol"; +import "../libraries/GasRefundEnabled.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -109,7 +110,7 @@ contract ValidatorWallet is OwnableUpgradeable, DelegateCallAware, GasRefundEnab bytes[] calldata data, address[] calldata destination, uint256[] calldata amount - ) public payable onlyExecutorOrOwner refundsGas(gasRefunder) { + ) public payable onlyExecutorOrOwner refundsGas(gasRefunder, IReader4844(address(0))) { uint256 numTxes = data.length; if (numTxes != destination.length) revert BadArrayLength(numTxes, destination.length); if (numTxes != amount.length) revert BadArrayLength(numTxes, amount.length); @@ -144,7 +145,7 @@ contract ValidatorWallet is OwnableUpgradeable, DelegateCallAware, GasRefundEnab bytes calldata data, address destination, uint256 amount - ) public payable onlyExecutorOrOwner refundsGas(gasRefunder) { + ) public payable onlyExecutorOrOwner refundsGas(gasRefunder, IReader4844(address(0))) { if (data.length > 0) require(destination.isContract(), "NO_CODE_AT_ADDR"); validateExecuteTransaction(destination); // We use a low level call here to allow for contract and non-contract calls @@ -168,7 +169,7 @@ contract ValidatorWallet is OwnableUpgradeable, DelegateCallAware, GasRefundEnab IGasRefunder gasRefunder, IOldChallengeManager manager, uint64[] calldata challenges - ) public onlyExecutorOrOwner refundsGas(gasRefunder) { + ) public onlyExecutorOrOwner refundsGas(gasRefunder, IReader4844(address(0))) { uint256 challengesCount = challenges.length; for (uint256 i = 0; i < challengesCount; i++) { try manager.timeout(challenges[i]) {} catch (bytes memory error) { diff --git a/contracts/src/rollup/ValidatorWalletCreator.sol b/contracts/src/rollup/ValidatorWalletCreator.sol index 325b2077c..ce801eb02 100644 --- a/contracts/src/rollup/ValidatorWalletCreator.sol +++ b/contracts/src/rollup/ValidatorWalletCreator.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/Deserialize.sol b/contracts/src/state/Deserialize.sol index 9f1cd212c..2339a05d4 100644 --- a/contracts/src/state/Deserialize.sol +++ b/contracts/src/state/Deserialize.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/GlobalState.sol b/contracts/src/state/GlobalState.sol index b9a97f571..4e682784a 100644 --- a/contracts/src/state/GlobalState.sol +++ b/contracts/src/state/GlobalState.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/Instructions.sol b/contracts/src/state/Instructions.sol index 196899c93..75452f77e 100644 --- a/contracts/src/state/Instructions.sol +++ b/contracts/src/state/Instructions.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/Machine.sol b/contracts/src/state/Machine.sol index 58ea2eb56..2ae9b690c 100644 --- a/contracts/src/state/Machine.sol +++ b/contracts/src/state/Machine.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/MerkleProof.sol b/contracts/src/state/MerkleProof.sol index 560e3913d..09c405b20 100644 --- a/contracts/src/state/MerkleProof.sol +++ b/contracts/src/state/MerkleProof.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/Module.sol b/contracts/src/state/Module.sol index 46d64de24..e21fb018d 100644 --- a/contracts/src/state/Module.sol +++ b/contracts/src/state/Module.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/ModuleMemory.sol b/contracts/src/state/ModuleMemory.sol index 76e64ec18..1f0a4434d 100644 --- a/contracts/src/state/ModuleMemory.sol +++ b/contracts/src/state/ModuleMemory.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/ModuleMemoryCompact.sol b/contracts/src/state/ModuleMemoryCompact.sol index 935fdf381..627154775 100644 --- a/contracts/src/state/ModuleMemoryCompact.sol +++ b/contracts/src/state/ModuleMemoryCompact.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/PcArray.sol b/contracts/src/state/PcArray.sol index d76465a30..d36076db4 100644 --- a/contracts/src/state/PcArray.sol +++ b/contracts/src/state/PcArray.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/StackFrame.sol b/contracts/src/state/StackFrame.sol index 465d63762..083376ecd 100644 --- a/contracts/src/state/StackFrame.sol +++ b/contracts/src/state/StackFrame.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/Value.sol b/contracts/src/state/Value.sol index 6e0a837b2..a4cb832a3 100644 --- a/contracts/src/state/Value.sol +++ b/contracts/src/state/Value.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/ValueArray.sol b/contracts/src/state/ValueArray.sol index 89833182a..c4239f6ca 100644 --- a/contracts/src/state/ValueArray.sol +++ b/contracts/src/state/ValueArray.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/state/ValueStack.sol b/contracts/src/state/ValueStack.sol index ccfe9ddc3..ce676bd0e 100644 --- a/contracts/src/state/ValueStack.sol +++ b/contracts/src/state/ValueStack.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/test-helpers/BridgeTester.sol b/contracts/src/test-helpers/BridgeTester.sol index 3e5895675..0bcbe00fc 100644 --- a/contracts/src/test-helpers/BridgeTester.sol +++ b/contracts/src/test-helpers/BridgeTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; @@ -16,6 +16,7 @@ import { InvalidOutboxSet } from "../libraries/Error.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/Messages.sol"; import "../libraries/DelegateCallAware.sol"; @@ -26,7 +27,7 @@ import "../libraries/DelegateCallAware.sol"; * Since the escrow is held here, this contract also contains a list of allowed * outboxes that can make calls from here and withdraw this escrow. */ -contract BridgeTester is Initializable, DelegateCallAware, IBridge { +contract BridgeTester is Initializable, DelegateCallAware, IBridge, IEthBridge { using AddressUpgradeable for address; struct InOutInfo { @@ -73,7 +74,7 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { rollup = rollup_; } - function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { + function updateRollupAddress(IOwnable _rollup) external { rollup = _rollup; } @@ -195,7 +196,7 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { InOutInfo storage info = allowedInboxesMap[inbox]; bool alreadyEnabled = info.allowed; emit InboxToggle(inbox, enabled); - if (alreadyEnabled == enabled) { + if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { return; } if (enabled) { @@ -215,7 +216,7 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { InOutInfo storage info = allowedOutboxesMap[outbox]; bool alreadyEnabled = info.allowed; emit OutboxToggle(outbox, enabled); - if (alreadyEnabled == enabled) { + if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { return; } if (enabled) { diff --git a/contracts/src/test-helpers/CryptographyPrimitivesTester.sol b/contracts/src/test-helpers/CryptographyPrimitivesTester.sol index c05698092..d587e1ec0 100644 --- a/contracts/src/test-helpers/CryptographyPrimitivesTester.sol +++ b/contracts/src/test-helpers/CryptographyPrimitivesTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/test-helpers/EthVault.sol b/contracts/src/test-helpers/EthVault.sol new file mode 100644 index 000000000..20b9b0f03 --- /dev/null +++ b/contracts/src/test-helpers/EthVault.sol @@ -0,0 +1,20 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +/** + * Simple contract for testing bridge calls which include calldata + */ +contract EthVault { + uint256 public version = 0; + + function setVersion(uint256 _version) external payable { + version = _version; + } + + function justRevert() external payable { + revert("bye"); + } +} diff --git a/contracts/src/test-helpers/InterfaceCompatibilityTester.sol b/contracts/src/test-helpers/InterfaceCompatibilityTester.sol index 1c6ae155a..ba6377058 100644 --- a/contracts/src/test-helpers/InterfaceCompatibilityTester.sol +++ b/contracts/src/test-helpers/InterfaceCompatibilityTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version diff --git a/contracts/src/test-helpers/MessageTester.sol b/contracts/src/test-helpers/MessageTester.sol index b8070dea8..1dc5cbff5 100644 --- a/contracts/src/test-helpers/MessageTester.sol +++ b/contracts/src/test-helpers/MessageTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/src/test-helpers/OutboxWithoutOptTester.sol b/contracts/src/test-helpers/OutboxWithoutOptTester.sol index 712f87c78..89dcc1e16 100644 --- a/contracts/src/test-helpers/OutboxWithoutOptTester.sol +++ b/contracts/src/test-helpers/OutboxWithoutOptTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; @@ -48,6 +48,8 @@ contract OutboxWithoutOptTester is DelegateCallAware, IOutbox { rollup = address(_bridge.rollup()); } + function postUpgradeInit() external {} + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external override { //if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); //test only!!! roots[root] = l2BlockHash; diff --git a/contracts/src/test-helpers/RollupMock.sol b/contracts/src/test-helpers/RollupMock.sol index 431d30e89..00aed3cfc 100644 --- a/contracts/src/test-helpers/RollupMock.sol +++ b/contracts/src/test-helpers/RollupMock.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.4; @@ -8,6 +8,12 @@ contract RollupMock { event WithdrawTriggered(); event ZombieTriggered(); + address public owner; + + constructor(address _owner) { + owner = _owner; + } + function withdrawStakerFunds() external returns (uint256) { emit WithdrawTriggered(); return 0; diff --git a/contracts/src/test-helpers/TestToken.sol b/contracts/src/test-helpers/TestToken.sol new file mode 100644 index 000000000..5fdc091a4 --- /dev/null +++ b/contracts/src/test-helpers/TestToken.sol @@ -0,0 +1,16 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +/** + * Basic ERC20 token + */ +contract TestToken is ERC20 { + constructor(uint256 initialSupply) ERC20("TestToken", "TT") { + _mint(msg.sender, initialSupply); + } +} diff --git a/contracts/src/test-helpers/ValueArrayTester.sol b/contracts/src/test-helpers/ValueArrayTester.sol index 8a614570b..048b76af3 100644 --- a/contracts/src/test-helpers/ValueArrayTester.sol +++ b/contracts/src/test-helpers/ValueArrayTester.sol @@ -1,5 +1,5 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; diff --git a/contracts/test/Rollup.t.sol b/contracts/test/Rollup.t.sol index a1158cd00..4f9231cf4 100644 --- a/contracts/test/Rollup.t.sol +++ b/contracts/test/Rollup.t.sol @@ -21,6 +21,7 @@ import "./challengeV2/Utils.sol"; import "../src/libraries/Error.sol"; import "../src/mocks/TestWETH9.sol"; +import "../src/mocks/UpgradeExecutorMock.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol"; @@ -57,6 +58,7 @@ contract RollupTest is Test { EdgeChallengeManager challengeManager; Random rand = new Random(); + address upgradeExecutorAddr; address[] validators; bool[] flags; @@ -70,9 +72,35 @@ contract RollupTest is Test { AssertionState firstState; event RollupCreated( - address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge + address indexed rollupAddress, + address indexed nativeToken, + address inboxAddress, + address outbox, + address rollupEventInbox, + address challengeManager, + address adminProxy, + address sequencerInbox, + address bridge, + address upgradeExecutor, + address validatorWalletCreator ); + IReader4844 dummyReader4844 = IReader4844(address(137)); + BridgeCreator.BridgeContracts ethBasedTemplates = BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, true), + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + function setUp() public { OneStepProver0 oneStepProver = new OneStepProver0(); OneStepProverMemory oneStepProverMemory = new OneStepProverMemory(); @@ -81,10 +109,13 @@ contract RollupTest is Test { OneStepProofEntry oneStepProofEntry = new OneStepProofEntry(oneStepProver, oneStepProverMemory, oneStepProverMath, oneStepProverHostIo); EdgeChallengeManager edgeChallengeManager = new EdgeChallengeManager(); - BridgeCreator bridgeCreator = new BridgeCreator(MAX_DATA_SIZE); + + BridgeCreator bridgeCreator = new BridgeCreator(ethBasedTemplates, erc20BasedTemplates); RollupCreator rollupCreator = new RollupCreator(); RollupAdminLogic rollupAdminLogicImpl = new RollupAdminLogic(); RollupUserLogic rollupUserLogicImpl = new RollupUserLogic(); + DeployHelper deployHelper = new DeployHelper(); + IUpgradeExecutor upgradeExecutorLogic = new UpgradeExecutorMock(); rollupCreator.setTemplates( bridgeCreator, @@ -92,7 +123,9 @@ contract RollupTest is Test { edgeChallengeManager, rollupAdminLogicImpl, rollupUserLogicImpl, - address(0) + upgradeExecutorLogic, + address(0), + deployHelper ); AssertionState memory emptyState = AssertionState( @@ -135,13 +168,38 @@ contract RollupTest is Test { }); vm.expectEmit(false, false, false, false); - emit RollupCreated(address(0), address(0), address(0), address(0), address(0)); - address rollupAddr = rollupCreator.createRollup(config, address(0), new address[](0), false, MAX_DATA_SIZE); - bytes32 rollupSalt = keccak256(abi.encode(config, address(0), new address[](0), false, MAX_DATA_SIZE)); - address expectedRollupAddress = Create2Upgradeable.computeAddress( - rollupSalt, keccak256(type(RollupProxy).creationCode), address(rollupCreator) + emit RollupCreated( + address(0), + address(0), + address(0), + address(0), + address(0), + address(0), + address(0), + address(0), + address(0), + address(0), + address(0) ); - assertEq(expectedRollupAddress, rollupAddr, "Unexpected rollup address"); + + RollupCreator.RollupDeploymentParams memory param = RollupCreator.RollupDeploymentParams({ + config: config, + validators: new address[](0), + maxDataSize: MAX_DATA_SIZE, + nativeToken: address(0), + deployFactoriesToL2: false, + maxFeePerGasForRetryables: 0, + batchPosters: new address[](0), + batchPosterManager: address(0) + }); + + address rollupAddr = rollupCreator.createRollup(param); + // TODO: fix this + // bytes32 rollupSalt = keccak256(abi.encode(config, address(0), new address[](0), false, MAX_DATA_SIZE)); + // address expectedRollupAddress = Create2Upgradeable.computeAddress( + // rollupSalt, keccak256(type(RollupProxy).creationCode), address(rollupCreator) + // ); + // assertEq(expectedRollupAddress, rollupAddr, "Unexpected rollup address"); userRollup = RollupUserLogic(address(rollupAddr)); adminRollup = RollupAdminLogic(address(rollupAddr)); @@ -150,7 +208,12 @@ contract RollupTest is Test { assertEq(userRollup.sequencerInbox().maxDataSize(), MAX_DATA_SIZE); assertFalse(userRollup.validatorWhitelistDisabled()); - vm.startPrank(owner); + // check upgrade executor owns proxyAdmin + address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 4); + upgradeExecutorAddr = userRollup.owner(); + assertEq(upgradeExecutorAddr, upgradeExecutorExpectedAddress, "Invalid proxyAdmin's owner"); + + vm.startPrank(upgradeExecutorAddr); validators.push(validator1); validators.push(validator2); validators.push(validator3); @@ -219,7 +282,7 @@ contract RollupTest is Test { } function testSuccessPause() public { - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.pause(); } @@ -227,7 +290,7 @@ contract RollupTest is Test { (bytes32 assertionHash, AssertionState memory state, uint64 inboxcount) = testSuccessCreateAssertion(); vm.roll(userRollup.getAssertion(genesisHash).firstChildBlock + CONFIRM_PERIOD_BLOCKS + 1); bytes32 inboxAccs = userRollup.bridge().sequencerInboxAccs(0); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.pause(); vm.prank(validator1); vm.expectRevert("Pausable: paused"); @@ -249,12 +312,12 @@ contract RollupTest is Test { function testSuccessPauseResume() public { testSuccessPause(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.resume(); } function testSuccessOwner() public { - assertEq(userRollup.owner(), owner); + assertEq(userRollup.owner(), upgradeExecutorAddr); } function testSuccessRemoveWhitelistAfterFork() public { @@ -1130,21 +1193,21 @@ contract RollupTest is Test { } function testRevertUpgradeNotUUPS() public { - vm.prank(owner); + vm.prank(upgradeExecutorAddr); vm.expectRevert(); adminRollup.upgradeTo(address(rollup)); } function testRevertUpgradePrimaryAsSecondary() public { RollupAdminLogic newAdminLogicImpl = new RollupAdminLogic(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); vm.expectRevert("ERC1967Upgrade: unsupported secondary proxiableUUID"); adminRollup.upgradeSecondaryTo(address(newAdminLogicImpl)); } function testRevertUpgradeSecondaryAsPrimary() public { RollupUserLogic newUserLogicImpl = new RollupUserLogic(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); vm.expectRevert("ERC1967Upgrade: unsupported proxiableUUID"); adminRollup.upgradeTo(address(newUserLogicImpl)); } @@ -1154,7 +1217,7 @@ contract RollupTest is Test { address(uint160(uint256(vm.load(address(userRollup), _IMPLEMENTATION_SECONDARY_SLOT)))); RollupAdminLogic newAdminLogicImpl = new RollupAdminLogic(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.upgradeTo(address(newAdminLogicImpl)); address new_primary_impl = address(uint160(uint256(vm.load(address(userRollup), _IMPLEMENTATION_PRIMARY_SLOT)))); @@ -1170,7 +1233,7 @@ contract RollupTest is Test { address(uint160(uint256(vm.load(address(userRollup), _IMPLEMENTATION_SECONDARY_SLOT)))); RollupAdminLogic newAdminLogicImpl = new RollupAdminLogic(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.upgradeToAndCall(address(newAdminLogicImpl), abi.encodeCall(adminRollup.pause, ())); assertEq(adminRollup.paused(), true); @@ -1186,7 +1249,7 @@ contract RollupTest is Test { address ori_primary_impl = address(uint160(uint256(vm.load(address(userRollup), _IMPLEMENTATION_PRIMARY_SLOT)))); RollupUserLogic newUserLogicImpl = new RollupUserLogic(); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.upgradeSecondaryTo(address(newUserLogicImpl)); address new_primary_impl = address(uint160(uint256(vm.load(address(userRollup), _IMPLEMENTATION_PRIMARY_SLOT)))); @@ -1214,7 +1277,7 @@ contract RollupTest is Test { function testRevertInitTwice() public { Config memory c; ContractDependencies memory cd; - vm.prank(owner); + vm.prank(upgradeExecutorAddr); vm.expectRevert("Initializable: contract is already initialized"); adminRollup.initialize(c, cd); } @@ -1232,7 +1295,7 @@ contract RollupTest is Test { } function testSuccessSetChallengeManager() public { - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.setChallengeManager(address(0xdeadbeef)); assertEq(address(userRollup.challengeManager()), address(0xdeadbeef)); } diff --git a/contracts/test/contract/batchData.json b/contracts/test/contract/batchData.json new file mode 100644 index 000000000..5dd4870e3 --- /dev/null +++ b/contracts/test/contract/batchData.json @@ -0,0 +1,3 @@ +{ + "data": "0x005bbf6d343290db01f0e1f3dd39a2a8d7a49681ca5f1cd844a616ec81325a9e848861aad0504a3080ebbd71af203c4428c2a0588440c954a50850c4fdbedd22b074ddc12f4768ec93dc9fe7e7f6e7dc7b5f2d605488a3ac46f95823ca9c8889dfbf4918a495bc0dda02a3ffffc30ab001734635760f0b9036d6a677a2c14f41123440d7fc2c2d9a0bbca4252dad252e008b1ea075de87889cec99c81793315d93fdbceed9bcda444f8e9e8c8d891c86e9e989f9dce49df6bfd2f7b13ba41b9020c134d9f0608758a0c336f6eadfd4eab75f830d35e5869cd51aacb3639c763f7ef014283e72078fa0e61acb63dce3720de766196a4a6bc810fa75735a6c10900812b25843829ae0516be8c6126730d58504093e3c68c026260604c6505c9ea19613318070461c6b01489ed29c713ca07b0c080231c3bdf3d41adb83f7f0e47a308e41f4a330073c0ecf774437cef523f801701d78de9267a5b9fbbeafbbcfffb9fb9afb03b4e778e7ff567fa3bff3feeb0e24acad643a85225e163bb7cff7fca7f7fcce9db45d6896cce35652e22278d0f7fed2e79fdcaabff7d1ccf6e6da1f536d6666d4c691d61adbb6cb1615333a1254a25001a80454241bcedfbd07f990a864cf13f2512c0a49379754e30760a416b3cdabb73584e78a58ef071038edb040e5c54cd7940b8d5959d13aeec18ac4f86c251b6abeab80c5f695ea0e6472b46d7414e02c96032c0cc0c202b4929cef31a865abb7a1afd093f6653a4be96e515defcdb9c80481737f000c70a3383aa01224720d370014956dc68ac04f18f377bd2d8ce8c6585ca611e6dfafc27ba624564d939ce1a6b26727701f0d00560222e3d8ce2250904530a263e2a5d7ccd7b64150dabbfe8e107a4555197d64e73308826fa4e3a02fa3c36108e82364a212801c3505d18ca3eac076cf219c4b2cbcb6c81617740eb08fa5f8d18c4325840c21201901528e019a3ddf495ac27ab52fba5bc54ef5c6dd34b14ef15bd191932a22aae2fbb3d7b700aea45fcc968a74e5face61864a1110dbea4329743c8183ef033d0cd4fe8912fd207a1593a0e0b67161658de02894eb87a057bfe8e4409d4f339e2a2a34ef8553ddfc3040b97b9704f71f0414f3d1c8ef936cc70740725f08f0e56ebbdc67dad7ad7411a05fadd3cff6db28959b6b549c8fcaa2b693d4fa2f06c03ca789c0b597ff2f1b98788362af20ef0992d0e8e0c1e18051799d79b72aa7df851c9d1157825042c1b5042bb2ac3112b32e4a3c77029425373f76df7e86721dc871cfd21e45a1d6925fedd1ce8fbce0683da40b54368a5b960508f2d0f7c33652603787bd2f665ca56c0c5b76cf0d843800163290f81a4806c280d14500455311376b791290f087229d66f8b2a54c803a49872d9c8a4401cd2900fffb145584001f6c2c1d872a40bdd5def2c5964e4cc579048be642044f1b855506b0d987d58c67aca376d1f70f4fbafa8720b206421591e460a767583fb0d2ad8400b0d42c8c9fa3853b292a619d53f8b56e1de22360530b6773ebab916a04119a1ab41743f9010aae55664696352240a6c611ba362ca05c3bf55b007158a59dc1c56223df75e6674e562c78c36fca666f4354b410d285c594c5ef2c2fcdbe27cd58cdead8146866523677200a5352e84fb1f36821c4f7c72053904800c4934e0778827d62085b6c088042870243b14481a32051fa10b6d8500085ee7b71e0002d47489196721da54ae211a243ee4be97e45aa03878596b23d21603bf684f6b1db6f4b00d5d14b62b4a7eda75483b68040574fa9b18ed34f8b1763c2d847616afef7428a434e0930302e664d3f20665f3f76fb4dd72cf4f7278672a9b69b71bafa4fb4e1b2afbefa6ba700ba714bab312a384d2c52704ea61c155f07ee47e3a9180bd3c8447f033b25222bc7d634197941e5608157bc826213723ea4b16d75a79407b7b69f84af9bbe9d7ac1d51f2113e9f4400cc4435fccf991815974d71735af21fbc9e86631d5dc404bc45a18417c58a1fd33218027ec65270e095454c3f2a231fa17a0329681cb452fe2fbd3e42993f8e25e99bdac17be9f958626ea35fb1e5e44c7cff96695e818d67b8a851996b8dda2e2ead6f28a062e57e0d7043fd42ccce94424a4a1d1574a945c34769129d3a89ccfea42e71ccf90a7dbba1a8cb0dc0743d6222dd6bc4ffcb0ca2b782942e39643bb48dbc4368088ca503f16bd98caf373b1098bcda4550a4258cac09506eb80a7853558d853888cd0abf3eb33955d24f9eacabb044e912724942d9fab844fd102acfa77c36809b27fe00f3b70dc074f4a823db5d14f15fd71d0101826e991b1e4fdda76b32627b17f3bbc9d173aa04612626798fcb300b599c6b84d9f5ecdce85e069330651a7b9fad3040735c7331a261818084101279b92044b89533d4bac297fb7fb144b4664beb91af37b6b236345da3fe29d3364245cc8f21bcd9be5d7bf5d927313101978a694744bbb2c936ab4de755424f1b1dde81cf5aa77644f2f056e02e4b32576e73d8132892414f27a1bc283c55b05fdfca7a7376fa029c38566596fe52d056a0fa327ff8cc4d6963567db879602ee3bc2a0f49edffc7f343606856e76934e6b2d17af439b0cf39e077a9570466546a71414a4b759876b4ffc5a277899021e49bcd92a8e1cc1835d2095b880aee1b38209dd9073352e7470b0d9909064998d3593274b178cc41b1535fc35817b91306237e5f4cec4b088ead88d6a0e07ca77b51747d68a9faadb1fa754cdcb74cdcc3d89365f25ebc5a29873982ad2d6f09b8b448da5f86162f352c3dc84f42689b0a54624a98f04b92cac1de00236b585bcd9418c83c29db706275ed5068ceca21df5a49cdf52c7a5fe7feddbb9583b153d6cccee0b76c30517ee68891dc00742808f5dc85f1d1fb6f70bf2f617a64cdf4b081c8801cd66854903a38d8ef01b257a00275415b9b859322abf9c7e0632005411a425fc387435a2ee664a60fb23595f0d397743c1b6ed61658d684bca61642b11b7140b1590f1046b3f326d204b34951ff9f7d0a778a0bd68a22ba45dbe1aaab093247d98080fdf72e2dc8b24aa50e74ea35ed0f652cfb1afd1591445074280b6182a7e715ab3c8d42a13ead0e03ce8adbff7f3807b2df611c0e6881732030dd83eeff7271455a65df85ef31dd145b25b930c76dcc8740867119cfdd31407ed5643ff07e83dffa45903bff350978764d9a8953bd46c2a13534d3b7866a17c712c65fd61110bd1f98154e2b84e0ad4811a952683cf2e280a2da1f90c90944ae3c4b245b23021d96f2ab5dfa02ac12f210a7ac77351abcc5caf2c191807f3bbf76737cebb7f3a626a22dd4df19414cc3e4111c9878ca6a4aeaa393dfda07066c194873337dc615308d7a7e3c9eeb5c89dfe84311f8b0803c4a4e548b64423231201329f51e4c3289b3d406a0408341ddf60490976c491793dc8182441823092dc3320d5322efcec4f34a5efbd00d0a0d6e5f0cea753199615c5e891f307633e862b2bbd4608e47569bce6ac507220fa53e79120cc2e0f6e5c8157b5b93bf64ecb6474004572e1f8c8f23c1ab6f677de5f4f81d6718e83536800f2ab67e95823d4c6177c49cf0034791781ccf5ee281b15297a009c3702e335390c02aa060500d07b74c71808df53c357f893015f14a90655a9a9eda76e1787e8c01f5ee5b5f31095ecd99ebb79df05062de77bba02f10dec178699b79bea47cee6ad8f611c6d99acb5f988f11d1fcb9607fefff8dc808b64c190570bb51820135a530c0d241a20a3b3c31749ee6196c158133b5c7086fa8976db3ec0058b6e3a72cfafb39ceb09c00848dc4ad91560b9465fe1c7e5743c4412733b91b4fd8552ee8187ca9d3ee5d3e9093200dc2f1c422b422ca5f6c6921e9864dcb2cae716e0662729daff12c747377d02e21a9ea229a2ee9c07416812e5c764c7c9c8cf676940f963f297f20d5e34f4acd1ef3c4f8346089bf6b3025200c46f796b1435679ec4a3ec5a7feefa84115c53bfe61b07b35cded4bf912ec8811d502fe35c069ae88a282d13e6ce0a1a3d6c562fc3cd6dc4ef8973eac4fbe8b2a26b8ac40561d118c84c3bb2dcca1dcdce4334cc697a2f2d53917c33e6e5b9b8205e74dd771cd19b8c10c71e7473c7e5c6d2c5a3654baa00b14a4ab43ea35f422041ce716b1456043acf020ac00d79b8783e6895d49db6a73b593d0efdff611e235e46e32b8c39d7006196399fdd2bd9a8968c38408df0407061bf2a9e3a02c25261ddf374eda9381eec6cd11f90af742edc5dd73802861517c871d0b6c9c009e4ded8a7c157daa05f65550a334beaa25f4909e980d832b3f8770cb42a5908e20ef3ac39d8fd23aa5464f334bd1bd1d6f3757d74df0912109110f2a882e4df35c311ec243215b215891086a909748041b74154d0bed5114f10232122c52fcde70a056fb8a22bfb49fa812dfb4a95136f9e7dcba1abe2b648a4de80aaeaf5faf49dfe532ef7d75d4c1d9e3f855431a66703196987ec6c85a819336aebcc38eeba22ab1b9b7201459d0c0e313316bbd65c88b7dea55e0e7e08b57ffac1faf6858974fdab8968b251170a8dc2a61a43581040a180734597a9fe0327364ddaf5bc154745f631f6ce30a260efc1d5af6c3e1822d3056521ab83c7e1a5ce2f8acdcb48b44a6cbe6ec1062d43a4413c07d010cd2d50b2136355a8d8449d4a93cc026fd70cd32d1ff3a113a80f8280536d5ffcea07054dc26622a0e317d7518d21985bd34a74c6b05ef3fc6d589980c81a0673f33bac313ee0d7ed57e22bd0f33116a0eeafa8c38f093fca110156a7d0aa2db781eb0b21b4d005263b1498614c862dc3049b097dfb68db47246ccf1880924fe2e89fa1dd8e7b68d048904d359032c0088940527bff1e002b0ab3c0d73781841e5595286b365c23e1e95d987bf4e43e38b871a9644811670c78d9eb194150e3a908dc6450b7932b92fe5d49a763d27999961f602dec5adecc16161c80826d7ba25014b4a1877ee7442b38ca885eb1653573de1ddd881fd48cfe8f2c86c1b3b7192566d4b2b20daa92b7956aa25891c9197a34aca22b5cec452bf36f358321dc8baec0a06a360430c097f918fdf23542dc22e02c81df0522c4422a28f0c732c4742b4c2319272a861840b7473b07c5006fc0bace7c4bf23c6dfb9627d5411e1516b7fc0cb635e4f96737873283a99c266c5a3d8b0d1d721ef984d7d01099e061d829e96c967536a718fd9dfc3c5bb5cd356fe3f2e678f1d6ee687cd9c5b7d9d898604a2aa017a32ae2ca9f93f6b83c174583389afd373944d49320990d7bc2b11e0a6b71f46842c4d04d25baf81c2dc44d98082895f7e4e723620adc1e5f110f8f8b0758497f990c47785c113364527616d29b76a1985693d9f65ae6ebf82696ec7f071f8dbbfb0f9d399ed842adaece20baf60e67bd4406fa6ec783bcf187341a1b29ea673ff85ae602f6e72041a3adb2e83439f38f440a5131713374bde7bc2e3b239d690c08b7e4a092e8b013b3d228f2ab65f6ecbbf9f5a18f22876441b73c142ccd6f012296ea5de8abe84fe9d21374d15fbd278788f67227a3353db0053113d29b46f3b7de8dc01cb699f094cbd4f92d461f053e1f4f1d7db149d7f83fff832e3c8cb594e5f347f9314a681eae70925da03dcb2866b994cd5859ecb85258e059674f79160e74cf2df7adec95af7765f6f140fc77b15c49975093fe6e85bcc7cc008cce85bc7e2663b7fb24dcb17b544398ee9bbbecd68c5eeea07cfdf5a11a41c5743bbd75a7beb0f56e275cb0d577578480c4a5c252d2b44f81654dc8f74f1944853e7cb5d5503ab64bd75377700a8eeac9ed888a71ea6a351655eaaf0c817999f39c0143fbc4f5cee8e6f1f96aab50cb87ffa56caf4b7e68d70e92ed8166649e03ff1520c33ff7d8f7729c5cf3148a2cd83167919f0822b659a642e6d17b6323ae5d914f159bf152bdffe2d4030f7bf6a167614893aefb744b146c0d0a6931ded8feff6d5f12b618f7e24e3d62654482f0744af46465a749f2d6568a07085a6e3e9f998ce081852d78cd5595a11e25b629e93a067f9c7eaf1e19cb7868af21e98adeefd74dca54a4e8e32f20e816c0a018abe7bfbab57618f27abf45f295a143866648570fda32ac88baa991f6bf2d7bc04d94dbba5defca8fe00fdaed9c325fd2bca91392e68e5fea1b5ae13fc3d59795a1dbc4f79cc6f72eba25fa90e9a6edbd24c47b6745747d46f710a54dea8a1985f56104ce74a5aaab10a68d7c569a04cef67d0805df3b42f3312ab79a2cff72a53ed1e3009d31d9a709fc1bafd3999d53d4c940f5e7bf10ee6e6bd34fc1367de4f2ffa58b9fa4d7416a8c5aab97ceb76dc4efaa14576e2e4e2f0aac694d4e23b3fb5d4b2ecb14ec38a2d6e8659daa27c1b445d86f24007959efec1c62cb5c8da7234cd879c0fad04244a7bab4034baba964b990d7dcbee1b56660f9a652275eaf1a43cdf26e393698f4a68977f438d85c06c0006e65b6fca669f68116bbddf135f4008831f45672c3d18cdbe05db8e7492c5b7b003b12dcc85e9d44b1e39f34db56280fc0f6fb1571ac8c9135e107cb8f2f64b950176c872d41ce2bf64a6e72c0a47054edd5b6280ec9fae9f4a3966232f481cde6f54a0ded02dcbf60748ac9028e6a9483541053ab5646d1d23214594feffa0ecea12dee58abcbb99b66cc08b0e2807d4b9a7549a622284d85104bba54b91e12d847ba9e80f3cc632c38e3f1c3d65f1e32e84441a3be8dc4e632ab92b0a2b4ed4fdf09bf203ac474f6c76dfa2f41cd311aa149359bca8cc5a10ff91ddfd5993e25ecc3c9b9ba766fba1e3e0dd00ac6314883be898bfa3e386e15a1724f0c0fa7fc56a8c36c6c3bc675691fea72c33d24c8023f20ee60c51667f3636da940a2275fd5d64d34a6684327391ea47f6d83b75ada94efb39a6787251b735b569434c5d77f2e2b634a87b839e6874ffaa401ad4dad8af63e28ae7b7d1c83c1d0d407097cb3184ee57a7936edf7dc2068e257e523d6469f5580d44fdad5b4d6215f00b54d2aa0836cf53bc6c8d8d6453b0d85591c6bd3c25e10bb1c1931f49ea122c069642260cf2f85843368676580d6059fd0426c37304a969582f0e19ecfe9046d857441cac6423cf9648c2c88651a6d27f08e13b733dfba578f1f765b7d3a00c570edc08a0a005a284083a3207194f122415aa92554b1c10cf51a2920c61d6d631fa9e57b8034cb2f1e0d58fee3ce8dc57f36877047e763dbc79efadd40595c527785d00f136cd3c858bd8079dc4b6bb40111f0a2cd361d49b9da4c39e22be0f1f14cb896d8d4c24ab2ccf449e41ac6552cbbcec5e64eed108fc328e695325b993e061e297bea399959b36c707fd50ae0064844fc8060e56e5870a019d0999bd16f4209b902c52788f78f2b2a6dc8a1412ef7b3073bf1386adf4e0cf608d345b4f9cc589f61fb67aff2d67c0af5a4f37ebfbb0f9cfbf5cfabe9b22ca9bbd4c1f1328dde181cdf6d961b564fe2a67c778acff639c91959706ea2234577248653794c80fb4f00f8223db3e9dff94df7f0daa6ca16576b9ec1c8ecfdf9650b2694c61b8add7cf81fe371606c91845a7a1cae329e0d08574382b8e88da254824a296d56c222fe6c97004c7d84f7f5516da7e27685a53c05c7356bce08c2fb4b598d9715d7bc3de55bb77ab7a2e0913a7233f8417ec5f754ce7ed4628ca151331c2a65b63a5ce88a414cfdfd6afdbb30636e16a6136858d600e7d3810be8a9003b0a7fc76d3eaacb302870dcadc90816b7f2f51cb99315ac3653f42fb8230c0ba14affc3ffcc4210157b2969a4755eddb0e41455f81dcc3ddb7a76f4bddfe3bf5fbf6666dd10a0a6ef2328750702d4cc46fea3a6798c31c37eaab2f3189b6e46421f882dc9138b387fa954a1f60ebac0fb41d494a81f087c3e92f38b41e7ff1f222dc2e549065ccc17bb4ddd6d8d6a259c944e15d99f52eb22000e410f267ba77907a6c07e8fd117b31782013d7d3655584f654e06e3fa8269581928ba9184e25c2632ed4314d6df3fa0576dce9cbc1c789679687353d42dbbbe5d56c1bfe5784f9d6a7be8ef90ce41f9e9a073338660cb44edbec9e24e5f9f8d7ae6b0b75d7990ddc5ec4622dfc75d68b6e51af2094dbac2549f7372de4591723bdeaf398fb2652042c6293a690008f4ce1826a6f8909cff4215146d2fc4c42b8d081bfe19a1798ea23807b0cb27d2822a28d8b6331f2f86eaa60f2d15b532cb720a57112465dd2f51ed1776ca10331d7a8ef6dca9f65dc25c352c1bac8e885623833400daff5dd7127e66297d71b12ba7f846d922392f1d2513c762fd61b60c70049cf085694807d19b467eacaa641f3f26ddefd45d17e18307ab8bdb220e94ba6f71c310d72666d07330905b8a8c9d54bb09e59d052b3f26abfba9c5ca2030dc63d551835498edf1af43110e7a347870a9fc60d97c1798bc768a1637e4a17a839b6cc893bde080f9721a35b6378c1855fb09e0a2a42bb43671f1080564fc0108e20146441d1f64d8fc9625df9339345519626a2bfdc66b0c1e9ce895319e1a7e3b9b50f9affa7f0977e034201cf06197e65ec49264cab0d94101c86debbd653f3f59a2f206b5def04ff66d9b45e05c6128b8a6b2eb2db3de2b8634e88045dad49da5b71af52346b3b2dded902199b9068507b5db163fa40b3c788d7d2ae585cca55bce6a8fd0193f6261a6da27df43534f80d6e9f58c1e3a06e900774a1c8f26f9eb080ab250ea3de499248dce7d7f23025bf650a5ba91b5a4432519875ecaa23af9f32aee41561d6036e057348e94fda23114df0129002fe34719988310600bc70ccf20bd57cdf1964508031e87a64f56658981e2b204f04fafdd9746b49467a7cec377810db11a7659a46c63ac5133bdd956200bfa9405ed17dafc90215464f0848aafd10ed2900ea5e46a9bac25bf9c396fd2bd020e9e6e1379f42077289a53a13faf8cf759de8a327abcdda1a9cbc4499b5bc91c7148e32cb118000392536b2f8a02228ab58547d0a4cde4999f82892ba7f6b81cf45520ca6e4aa11c907eae85a705e9f55db7d462d865dbc20c075685a903c7218a45323ffe5bd5764677e9de97567d9feffbad2a8fbc0ba76da380193505794460a047092ef06a134b4521000770d8854897d5a90e2c4e74560997e24578d784175d893eebe06f43ec8bcaea000f33cb3aaf9625d73481aeb0cd8a63489e21328ecfffe9c267b0983922b3543155a0c0105c1fd201657a93aea538a722281d3663e67fb4524c5001ae122076e07865865fb61e8fd481c6f6996f7e803b4c8d43e4d7b167ef514175dc6dfa5c4b96d510c29637413995e48cd476e45f0d2e5499c904e4b2043088416b2971e21af2f0e1fe43280c898e8827a26f9fd47cf9c124cdd962778a42af2a30381b13e198d6c8d89ee7dd12a24f4457c7ac8c42634328a0229eff0a24cc93a719b7412d51815075b3e055ccb72c34d341022ab869dde915ca76a71c3174f174e643331a000392ec7a3d1750484aadd56ea6652688c366eb12f7e7fe4ffff7d554dfa270d8d406cc1f11ef63d8068c1729fe5f4d6dce9e7972a7012ae01ea0b7105f823db3e9df61505035c468ba66fc41cd9a5cda1cd825ba1970dd1c1c7fbda5bf213a5d667ec418428cca2725c03b40b62cd232f11bbe363db9bb33ae2812aa3eebce86cfc649fce734120fb957841ae61078673ba4ef9bf530588500db1fdd9b060ebb924b852c70e25a2ee8fb1be8d803835ed32d71877f875aa9f93aea019b52310696650582eacd3a835ebec1f1e66771de5f79a34e6937ae0e443ef0b1a77d9fdd56d0afc4929c5e7a84d1913077d604dd23b5de0bd4060f2b833e6958b146eb87b247a79f25c15298c969959425dc7a2a3fc20cd5336dbb320d5ec2cf0f3a9031636097bedc10f540f9d913b0a8dae3f583b4a1041540efbb1d37840055f24716a6f50f68c1dbec8bae2e0b7489db1b38d4703ffeaada91f23244b6f48101845214ef906390b873da4fc372de7609f9dbfe494fbfd33346c885adc48fb55a00aadf891f9399abdbbefe65f878241a4ef26b4359f4d2896657800d22eea2de9ac58bd90e05dbcac3ca1ac54316436b45fd8e94b1cdc6e63870465f5a247927bf51b4d0ef57e74fcce9a432699b8204ba7756415b461bbbdff5810171ef86e92c02ce426d1ef478b4fe9888b55a80070f2d03e2505cad497174b49e00964cdc014b1195de597df1d56ab78a736d895f0a23e26aca3bbc0107e5f2874f1758180059d2152559df125a635499830c4aafe6173253faf71ba20fd5c369257fef8b4954d717e412d74d5fd67458dffb80c70018e0b01c754b42eb89e7fff0bb1591b0ad0c62b281feaba32c0937a6faebef03f45200cb1aa6c66cde6d7b2574459996f5253f5259cfff9e36469af35dd7ca9fa7063b2fb3a160dbd674a45d55a51607d7429bf19d056f8554202c96e52c13313c5417eedd30182b08595da78c0cdbe8846f27c63e85fda23f3b9a207d257f397daf78b9fd51b1f5beabe66dc88851bd1487ee0e22f9981f69d95271e7fa36c4aed152808dc2a0b911076e23e3c23272453884fa0f8f1a4abfd379c84e180769db2a5149671b60815cff0f1526ad4fff7aaf16840565e40eb3bfbad7dae4c66d5d1d86424c6f468eb77b8177d58f81b79cc1ba7f10374805f799932c209651937e1ae30cd8cacf01baf65c0e58a9b9e76a73a566fe71108636e7cf50890caf6ee1e1c7fa7e6a9d71e228157276b6a073b7ed902e1053f8ca9c99168a26f825a6a4d0d76170208b37598045401b79c1455c40087e51a72b40df87c942be79f51c394c7162bbf3cf8cc02fd7ff156522d8c86548108a598bcf3f7a3d9c765b835fd4d70fd674ad3c45c026424e1cff20571b522448c32fcd6b8f3a760a4abf6c8f7b2462e72fef3c070981915fc20664e77954e960a0327d0bd2c7e270d9b68e26312d3fc65bc39561673a32b3349a77015a5f82f3e1d9652004a0d2ef747dfacdcda84a01ba73afee241be7ef8bc87082dedf1f9aa64a862255a60051b510fe43c6d1d1d87f57031b6b8e9b26f3c1a539039a9dc5e4407e88f650d32ec87c1363cf0f17d15e8ec0337d4718753f019ead39a1a48b90ebefb0d89332495fd4f5b63b513081f9b429b32c0471fe80d17f013a8ec3a324b0b14aa575ff8b34b880d45d000d8d68bcee2f5cf267b5bf7a834909843dff41556a4fda757b7b519163eebbccfdde3b42484eea9e274f8d5a922c9304ac76fe4529687f4d82e1c085329ec76afff13a91043b5c98e0fa969147a35031986643c1ef7cff7987bebc3ff908753ad53f11a93dc5ad3eb7c287fd6dccb0355416a2bee72877b2aac5b78379b27b79ad1fd1f652cdc679bd2aed9615762d77994180c90218dc145027a3fee7174770fa376f56460811e77a54824e9baf2dd932c300952d53acd3336759c9117dde9f59146379199f9d4e80c596c337d986509a1fb82c4e7b521fe8e554c0748b1a2ac2a60ea4cdd9dfe19e02b10f4e43fbf19b07843ec456f8e50c60fdfcb0f5fb7434f25b67e1cc4047edb460cbc111008091e421ea721e4e5b70df0aa95b26347e1fbd2d0302409e10011a22a150ba44a30750e4400e26a120048f1e75f0779b7cbffaaa97576859df9123481548be6c59972dc2ae23a7f9096140fb61c837d8f14e5bf8552625ff9d3e9bd8b5c879adaae5c99b814726edf9ec1cfd90fca777d90549ad5fad45eb3a398647f8fd16f882f6de2e037c928d134aa859786881c72fea2c60930886b02e78ed7328eac7a5197816eff080efed964084c501fa61f4d1f9de6a2b84b16e8cfb8298dded3114f36f5eb103c56fd1a1820eaa3a5d303cb3fab35e43733e0b02dc373b87c189d56edf1fef3242382ddbd6c0ace88f4d207ecd365961c1490bc487b40f0250b92d9c4374c5a2e02f8526378d76365cd983ce0ad8d9416181b8ac9c5b234062652aa5f6223873cd8d9f880e74aeac6e7f4bb532c1bce11f9962136acd1f7f9c989c2697f3c6477a60552a50a27a0fd2d3fcab4c580f9e00e07c0803cabb14844b7ea4b9c92b67cb2af3155a95eb0366e36a64fab7afb4ee3ba4c5a077a6b060d11abe052cc285c542321aa8df0dcd45bcb08beda64d9f288d467cd9533943b251a0844bd8ba7f815c2a74828080be800960047ad8d8e3a47eaee002c71b6bc9fdc74a001e6e5fea6600e3cd26230d25a59eea17d16fac8d2d40936798ecf8fa77e5e8438bf8401d820721e1e4fedbbfdb7fa6fc9aef23c21d1353f86744a0f2bfb517a93eda3a650663f18e36e20424d994f2a26f044e49cb7bf753a9107f389c704342b33acc4ca06647e80ee2b304f2b4f802359586e5ea7459bdef35209f3a890b19cc88b01b6689838ebe48b5fbe2264691105299fc5b31bb78142015607ed57e5ca19174c0bd3e9bcfa4fc11084e79972f09d98bce40a17510ed820cf2cd1ecad85654e55c9f516d5a7b978ca67ff265c7c5af243f11794b897c7c5a97c278f9ac9260f9287865532932adcf2f26d97fc7a2ad38080fa1eebec66847f2ef806a2b29b320851ab27d126b33f429181b5365a935a398be588097c1c7c525ab3d591262627a48829e46524fad8ba95f14db3d0c0312b05ec6f6e858140ee7095fa7135d90942c7c195de64fa7ca0786dd825af5be0080aba806556f7f97cc2e673cab6f2f60e8b8b48cf1cbf1968f6bddcca1c83e121b522b36403ca781280432f6360829ccc51302a367f246275f3cfc4c2e37aefcfe5e8411f50397ced95316dfc4908a7f8a6021f106f7d8a81ae565af2d3821f08875f020de47b959543955c72c9cbf38037f6d0a6b85348f6ba71743aed8350429c108f4e36dc696f604edda0a09f5598c16e8936f54d86f30197a373dec31388268da128420b2c9c908861df9439e35d0b0ae782eb48d864c21e45aa3119201945241cc9c33cb61817728e40475175a1a86dff0bf9db386e1a2689bf6bf85073125baacce49782ba6b4c817e733cf2b983a7ff30094bb1fa3a7089c1218fe8104ccbecbdf9a6a28e1cd446cd175c62c02b924c207ce6ed950b06d8e21e63f1e2689445cd9d382f2401c28978010c8fa9d75eb32228063513d76f396a62289150f176d1cdc10f29152c37c1c1296b8fff8048318e81f8c7e718e0d429a66909253827e742004e82f34a03a94a2fe7b10f73d9036bb99cffaaf0d2fa565408f0e0f7c804f66a10508efdd8694699ec02098a22a0e3954d3e3195debfabd984b2c79dee2d936afffbccabd18cdb4c6b27898b0d3a6cd71da88a00465a9a3fed07f9710efa3b94e85dc728e1afd8623c07a5a6cb35978b35cf70db3b5ae9eb05bb9040fdc87f56617a83051ff16b608e7ead8e37fbe04b4ea4a04a339db2b3fa0d33bf6c667e38df341fea197e7770fb8ebdc29ee3346ecc254bc7f96373473384722dde4222732ebab03d25e9ab81ffcff33a683cb2b12dc5dac00a828128b902e10f48e3059f65940009d7d46c12b5929a27c0513a6633e37baddfec1be0d269baa9d67d995affc005954d603bb2cb8330d2ccfbf9ab94cab5fd1d78ef1b52bb05f6f617ed77689087b28f1235970ceac9b1d7dddfa4c3c88ad03d242c32429c742ac2b74866c499e900037e1635839f095d1360bcdd37abed4cde9f76211999e875f7cf69c4583a14c9931f621591d6cf2ee99819f8fec41518625ba237c03f1bd73509d763f65fecc8484fd0b77e425bc9a94dfdce4865124d71e5f1d24f67cee9573692470488174956483a048305f105863bf7c7eb912b708c9f6a506c672c4b3ba8f587cdf4b56d31a5854a2039df134f2293cdd7e4f09c1dd5e3e91aafc5d5c7c7fd31f69ffc399bc84a55553df74ac92bd6c3e2cd9fecd78fdf036c0bcbf576fc69c445c111337bb2db9c329cf3fb348edd16a2d7051adc8faeee19bc90e1067bb3772915e9a3ee3071abff4584b7957ad7cdb605e96ecd5c9381c7a69985106e62b768c193f4bb04ec231d0e722d01edae6c2b159cf3338906effe241587545ebda48c28242996b574e36f4604265bdb0686c38d13b0c9fcba672a3ac72ab68d89e91808a87b05eb078bcea3e572f5e2d23f882f23e25f87d8203d45a0235cfdcb77c97e4c9c7f3aab3b72d9febf1179f0766403e01407eab864954f56b8a3bc777b1d5944538bb2ad474c722c4daa8b96895bea37a1f43c9ffa2e449625e3adaa481b976a1683772cd070cfb7b3538ca688be230c10816403493cd57407d8d23b7418d8ea26038cf93f10a37a2326b700f8404f83621510df1953182f579b4a6a41bdf3ecc7a645ac77e385cdbb404f5eb020e45ed59b95be5a2a828996cd5f8713797142ef69d64e5f70e34f5cf548123cd8423f251aa7fad7f60bc84fdce2afce7cf2e29a0b9692156f00464f97c0eeaee3dd4032a86ffd7d5ae7e859bb103a2f0e654b0f817b0b30af49a193a032fbc7dfb6c0df2ba162d5cb28f4827deeee6d0b1d9a93f824e14ee3ceddf0b341df69ffeae831eccb46acf74ffb9af5e9146d78e7fe640d9ad66d4189eb8f1de1c965b72f2c7567e50d95a915c968b067399143b03412ea1dc70bcf5cfc96b46fad05ddaf9025777862c8e951d7876b97e95a8db0d75bb86647b1aa847e2bd274536b627342f1ff8630a0efab1b80187705ff3cfacacef5f05fe2c71d3860b7f389fe50033f42e3bcc3f59916081f892c94bcc8442c806272b9bec7f7798be8f01d8b0dabd6ff9a9f193e6e0030a3572996433f0a2219c8caa83ce2c3137a12c67e782d0bd0eb0add2efab3ca17ee3dbff49114615cda060490356430f4d449aedc9544146ad86a5f182bde22598a4bada389dc82cdd48c68878bb3aefeee10eb578768decbdacfe5d260b284a3508ea5e3c9da7e466942daed76732e5dffa1951baf8cb8aac1753776e9ec5abeaaeb1b58becef3087db1ea5212737cf6506a89415a568a2a9d5bc61abdab0e58db214e80a7d0c2a8fbcb7ca7d572b61063aa012af18b6e640ad7338dd968af9248097d4368b8056d9adb91294ee0f03dccca9b395d7a0d6d8dfca43aa31b20444fc74d3a9b6001c35a1f05eab541c6d015fac67829830dabbb6ac41959234f9dc1f7d68eafa765d909feba3a162f666b80bc9950b65cf456396e4e5b6a4bc3e771a8dd38f0609ce9573f1c08cf711b21ba2ffd7565eef1f98e331ed3f144bbdc78d5c0ac04c9dd34cc2ae96fbc70ec41398134e1e89fe065e2f18ea232837637d383a4303dc6ccfcbd81597bf3d210d7e99b6d3cad6a29a21075c622fe7c3d86ef61bde52dcf3b7190f4db28e2b4a302e966aa5426c2b03359fd0badb219db6b6ec89ff495e6e6b402bbacd60b610ff8f989a7e64ae8c83d4c52f3c175da1330ed65c69530e0a3f23fe09f4540ccfc26c1d3c27d0f7ad3cedbe76a46bd240df4c0229b2a5cfdf92fd1e842febd9deae51463cd837c180751e4caabca2b1e0646accdf1f93eb21620979a79ba5d673bafd738109b54c97308ccc4e09433192e9a5b84d8f0c6408cc13efa1faff20b838b4c36391e118a741d0650e01a34676a0ff0dd313c9e9096fae42773a8318aacd9ca207f2b2d69869d2c2b7be514a9066f5dd19a7d9b30d9dff20ac505ce8fef061e8c5cdf4279aa9749607e1152c85b5cd772e42e83d229b295922a06736d3c277f706323cc110829d9c58a560982bfabef51c1c76967a38847496d5fedff786b238be8814f22aae2f0d6244913a6f6ccf9b04773007e25f662dda74666c110cb4a3900e0bda023cb9b2dfdce78bdb54f51209be26781133ebb2ef4e170bb9e0bc7b00f96c2cd2edeaeec7eb2dfe09d5a0e06105c020a7e516b5cf8669c69eed5f3705f5baaebe16f8f2ad1e996bbc622cdb25bfa1bcd79350b29e9aa79786b7adc8fac0aab7752030710cb0f9de4d9721f00bf2e33cfeca2d0acada4baf295c99481fef1cc0af495cfa25206808f805ce5ebb558c3067b8c49fda698dfd3bfeff05671daf597bf1b7eb2d3977f708d457eae3bc48ea9990f1b7cd050a0d10cdc83303969411fbaca7f3acf99f2a03ee44f87eff09e98ceaf581ed2eb10d410e286f6c896c2aa7b8f9c41152108058276145a0e244732d5cb83e5ace94338d095b2464495a5ab223ee4d110fec8c724e6d2204f9de16e3e7089dfb8ff3229555171aa9db3fc8e4563aabbbc41bef91079b8998601da8d7bc324cfcd93d2e1c3ac33002e66b4c2402a57d2bc35de5475d13706280a9b469e210f4b887c6243769489c0c24a8e5b0b9a203b9f503ef438a4eab4f16cd9aed07bb5d16144604e307e636212f9c566102916d6902d0a9480b6112b1b6f672a4a8d67a367c658d064ad668aa72198ce0d6e0bb3b4a68a92c5c783d2123a60bdf14ede1efd23d17c48236fe21462e6a7aa37a1b06058872ce4ac87df4072f3e461ee02751175c12457571b9abf32ba647f74110159e7cbf474077e3b66f56f1bb2831c17745356f414bf07028fba8c9ea598d7035430319c0536b2366da4a1ad7bf4e3c8186b8c618f9f338237bc537a19b9a6c6387b77a3d467c49196956240b984e641721baa1382817c4cf0d5a708a664adb5553db35f73c18053b84a6acabf8b818d205619248c043dd6d2e04191d1565a569f11402d86eedbc315f4fa7bf6cd586433e61577c1202ef1c6f3cdf48047847143dc12bbe783b34fada726dfbd1d3bd826f4d66a74ca32df7dd121382dfd3a948272cc114583f7b49c81a52347416db37c109edc82dd220fd4169fdc00ce42f0a9696ede246fded63bc1fe8fb5630e614d0fe77a0ad9f2000aeef05110026b67f7fc77e5f0583d0725fa6a2becf4abf0fe1bebf190000bb5e60750eb0711674900274792a288418f4f4c9f77113e89d0748df0e82bac74fdf199a206c4a406501a23501a9d783f40e20e767b0710c1fc319682abe13cbdb99e38731e2f2fca1ce6f19301ffd92a754f4398fb50b69e23bb95baaf7bfc3b008852fc315111ce9c3c35dd7df25114f791f92317a20696db92fc3b1ee01b426e4f8e7e1b8633f05eff0de778913bbb3c4c4afe83e69ce3313cc16f90dd3910346435f32c234e6666f9b8b19789a5195c190334cfd2e71c73857222752375745577411120918ae282bc751f5c35b55701667d0d5291de363a22df8437a60a3376a5ff349089dabcb7145f33b0969697364337ea4166bcc5d19c598a480140c6a514e825edc366b865821dfd6395dbc2e0757233ffcb7ae05844890b1373624a566b1aefad63b0c496fdfba3a5d3fa407f77c21757aba3b769bff106cf96902f7021ea027a59daba60527110267f47e6af255e685143cc083fbc0b9c716227eea7ad9d3054118215cc64311a5b92c02bcf91441747116f2ea884d386d444896638bb40ec7bb5b25f2d443e4eee1686f94ddc7db90ce5dc843bd067384249dfacc8286ec78fbdd9516a9bd58e1f2829607b406951269931a26ff104c59677b9b5c99dee045e9f834ed8b27dbe889e3d8b84eafdf02ffd54784b0a19d440ac3bc3dee22e701e09b8c5fea7407392ba6a3cf6008ac6cf5408f975828242ceb816a2e7215977258a39151639716242d0a235f5a220225954e229c11692f43dd5a7dc236738eadc6c2673d70af77fdfa49b524a47d97def3f50c3c7f7e160800021408980a18b4797793c72f229095f70708fcdd7beb517105959369b3e7cc10b5b4a15890da60970198985f8ef8688c56d9767df44d61720b3ea2ceff252993b09ab8d7d693191d9d8630e0ca48a52ba836d58f6ca78bfee98110a0f41d3c5e6d197f5007a0d6488f9c21e00ca5a11ff758a430ad8f511f6256d981c4cd48f35d5b590a90352d0a355d3de2e3fcd5494aeae2021be4e2c5ea4a4a9fa8406a08608015d53326a5af3b2f2d7c0f34e973909d244cdb89121e6f5762357d25d7b0f43e40c964ba3ebb18a62c11590f27acb52a83d1e50a1535ccd55283d2686e4c974355e09c03116f90c62097676d79bee0b908844f25c5510419e1c524c200eae9dd01827a29ebc37038c05089a030c1481bf9cb9248cb7a1a7755e6400ca016d926594232e681d452e9487d4735ee2f5e08cd357e27802d2062696d97adac19a9760d7239472aaf41338cef8dfd318696351002ec00f6817788ce1d30dd175e14b5c440bbffaf13363786e2219f48a69e6ab6968038f92bccfbfaabfc16c4a8b37e5ac3f1db298cc34a0f4f5e7efa6d09c794fdd90ea62c28ed6ff2ab1af32d82161426273048490daa504eaa8c0e30de9fe716f70af97b329b69c7d3f6ca849556f4b9074ddeb24dcc6c5d0636be5951aa663de3fb45cd0adc05b08512856fd5409fc00e73a3606a07b45a49eeebdd2159324f3977409e25e3a27344a5fe50263ddc439681ae78263bf11c7fd6eecbf1201cb9eb7e87668cbb7e403c6dbf100ce202b767793ac8937f204e2f7f540b4d9689a2938c06eedf3e9ff638e68fdcafcdc7465cab1619429532b5bf6c27a4f10c43388cde8600fa8a656dd57fad2bad8c71b7946acb3e43fe455422d98ac29c6c7f61a14ac0421d60c2978ebee825330cccb108ed370dbe11d9cb185f09d2a5a318a9b1daeb1eee600a6fb4a2a3e2de6777585ebdc0f7d235d82c1330381557cb0807a0571c62d79f1fbba47f9e6014a92ae47d58186600b327f24ef7bcb8ad1b908b9339765c74da5f53a92ef31c9a93dd34991df7e233b66007146cabd026a77fb176686989cf193daf8f083675135d511effdf51130ea90d89610cdfa9ced3b73bdcbd065d1c7942640f883516bb0701a4b9b0995cc8d1d27d000cb0234ec7ebb8fb3bdd6d0825d0faad7d4c6fc01f5f4ed07f1690d4a15383d4480fa0fbda27d04e54a8c4d2e4907411886caee64a5dae99a35c3fedac4acfe091497441cf81e8e374f754b4b468b38c77d8f501a4f25d50a9f19d13a5811b0d2e1d1b1ab02e28eed08911edd3912b04ebea5fed1fdce68c2e8009677b875c6b5485cc8e92259008378295070b38930e89551191033ff632dcd34d776010567a76ec0d44e6fc38ad12e88c5b5e087480d546c3bb249436463718b21d5dc59f2a8efa7e60f61ac40f0fe05b5717426ac7d080efd1f4f909b11f3bd7e47c968e58a48b045cd44b544edccc8c63f3adbb4e2a68a64e6f57ff73e449ac6619f6fab011d8f79d6d7cb6e3febaf27ccb642142d8809e44f214fcdf7a9d5bf4e0bd532a365bc0ffe8d943f03ba6cf4837dbc9dc73f6cd162e6dce00f0a1c2192bb7a834a5fc605cab8813514cd590fb97d6ce21b221c3bda3686d1397fa190372886f50823c7df127befdaa893ed9bbe26293fb7141846302fa05028857d8e597917278d2279ee4f79cf8a6ef303e3c8c36048c048822f62d42b1c194e8f06a408c3b31c7988ae502b62efd37e89014964746c22c4f1f0db13cdf062853315c1f85bc24de5429e1bafcd8c6d8319b79ff11faf1b33e5379d9691c3621e83f0ae7a09490803c6ea1329160fdcf39ef283fc23350c17dcaebf6351df4cd5b7e950138292deeaa8dc242920e889d45d4f1be551d42cf371c8372488d62085a85874799b5f0233281222ac896d31012ada9dba3afa8f4a1e1fd95ceab8d548b1b6efb0753627ca3079745ca81f5e5adaed7ce9239f23fc8dcbd31472ebf88cebfca1ffd0794f11f929a3a7622a7edb7b73dc664c0cfdfa6d9db5e9083f5bec3c3897dc479c8b3eaa43cc80882966f27c4f896a828d52312dbdefafdce8d48f4957c7d17ccc71fb7e78a4a4e11655692524c06453011ee6fc2e57de3cc7af7272d6890c636d5d8c17f64f4791aade7aec7c74327faea132827f574b75c5bf8d090b056134bf577afcd9d0240c1c770b2a7e0a841c766250b35ea0d9b3340985bf57bab083880d3b393c52706358eca4ac3f7f0e3f2f50a19f660b774d4c554bc7e353b7d7b49b3ccf97d17cd7ca4110c47c17b13fff6a715055978cf592db3955360ae22d8fd5cd4b2011054f21ce5c936871086ab1d02da256fe976964cc427a5b31947fb5fa2e8ffaf53b8fa366c5aa8bb0feb79e89b9caff4033124d73d77ea7acb7fdf48d33f0d5a23da46f13e96cf5fd7902a18f7c6dfdae0423e8de002ae0cc6ea6850dbca01fa01f431a446d6b7d256d416055b8777779adaffb4e250c80cbe76b8f6f4fcf010ed95083c2904d4c75b9d25cef27fb1f19af8f9b26e11bb98582b32fe6b3e3c54641a7717eb4090b33f60f45f801a41cf7a9d2cbbd6bdcff73e22b0af9b2c49caeb7173bc12fe1a2f1bd3dfa72a3341719d72f3f9702d92195cea97d95e3ed58a7cc22747bef3fde9561d8a1cde24686caa1c6409d049636b20e946b6ba9f99af2598fb39d2dd7212892ee472f726d0b31adb890c8d452b119fd78ee81db6723eaa7a451aedfdb781e4488dae2d191a219ac529d3249df695349ba08575ffc0a2d95952b508354cd549a27a7cdfed11b9e031606d669852fcd88ad6e9c4ff7e6450a1efce55f58ff52478464c3bd078bb2b3ca40bbc6d3e4a4da6c6bf18042362282812b4b6acd28c372ba9e236ee49eaac43ec4add32073ea8f53cadd93d06bc1a6c228506dc0184fa86d2459bdb2bfdf61824eb9fedeaff9f190a9b79ddb2aa366364bc720af7fe0201e848c9f586fd99d4b2f10cc1802d07b789c42cb36f834899e5b1adde946ec0dfeaf438fc9272811e18b6fbb5b36fcf7e3fdc21501c5cb7cf9e5af947e34b895758da54bf2cc3981762617745dad181af68da114cdd118ec88cf2496a5b5b931ab1d3452ce04760a8c59ed06fa685eb5ab6361ffa4e9cc8662d27d5afc0de93d3f8bf93f99a93f9a3b08bd5ced8ce03498b9f4f599403db16ddff137c5813554e8303e41c1eb78a4527d3649385b0f595f7cfa7c22d4bbca18804216c80a9939546a6cf32aca25c981d511f72dc90d68185c20d7746473da5cd3a02c111f8d21f93828a0f6fed8b6392fc75d489abe1079840f955955fc0cc04428217512f9ad3c4e37fdd0360c0981d8da79d5cd1d8a2092546fa8874e3079adf6c473f03e460859de07befa739c0be405cc3e35d98d96fe403f18324d33b8dc37c582352f9bb0958244d531ef1ed024bacc2d47eaa5a04f7edc440570fe2c9fb2f01ffb56d2ef470ac6fb0a85fd8a36c513b4c0b501dd67a12a7b131e543fe6a01ce32c72d855e103fefd955c7e36297eab18943ce8288cf0e6393fc900e42504e61867d336d558ac6790524596d8d1a15f3a397b97b158527b4a9d61c6ef63864131a39571663040d3df4b4d3bbcce363eaa894c47a61e8a779518b05eac8661e599621a0f7e20bb47a2a150536621aa589c96810197753a39c99da8c70f9701b85c76a75813d00a445389628a5a3d52e4f05704c92279efcb233e6a086f2428d19f9ac94b1f03a7d11a1b81831ed34f5f392c0de4857a7b36339699c618f17a6339611f5fc4fea91e8aa001def0ce41e02908cef4c0cbb3c895a4fd42209d3a6e394fc2d221cfdebf7597a729b83eb609a68395049ac16216fab06595dd5ac932afb894a9b971067e3d738715312e8195b08eaf345d294050b2b3d1cffd0df9f8cfb7293116259188ead3f358f8e822067a2b816e9bfdc3130316228cbcc11b56ca31487210a383782fdb8081b164d448e2b8ac1df09c7f7e3b4b086df9ef6e62c4a621965d546caf609a6f03f265964201aede980dc8d1324f781017b67a401b8f260465353fe7b6c274e897848f401271aa44d562430ea67811a1d00ed6b67b04c1c233a7abd5707783ae78f544e8a8b196ef2ac8c890a3c45c5ca34ba0fa87723ec82826ddbacf081a683be2f5a99196ed65133f845712af76dc711c782178658a8d000a72330440febd1210920525d1cdd7b1eaa37906f8e5ec90a3b41ec9b02e6491fb88f251e04b30a23f8ec0c5b64d8be7896c6628d82b8d7d518b6da6a6fac77336e91ac74b69398f01d7e92943b0aa2e5b4a6ba8185b447512e4c09985cd61731d525b4a69c4bc3089687058df8473b4fe0d9e9247b2542afd563c62a892728d99e41f2321453361f2f4f647c04502ec47ba94e66c20cb2af4fdb7c80718673318c5d4cf46e2895b67d53899f2aeb0205011017c4c7a51a138af0e6cab878c56ae9fb5d98925c4b5394e85179cd77316656b53f6235d35578ea848f42b775cd4e10e08858996db19ef61a393ee7ad918576ac23e4ba994344eee7804e9b780a11b908e07743f9fdb0988dba76cd8262557c79345ccebf2183d42affdad7fa8e6ed0b39350453729b291f7b38944b5493ce5e1f0628a2bb3e40d1005868a19246605fb7f336680ef9816819113721a93038c0f144530533a326a9cd47f511f5e543598b52982f5f052ea6e5d6583bda7debbc00d713e2e409e976776a94d2f546b7a0fb08cd7bcec967490f42390238d45aa7721471e9be2108fe31a3c3cb14938790d231793d6c1a65dcf687b58032329d746cd6dc27bd4b8073f40ec920721fdabe8e99931487f494001c174fcd66bb81b44fade6124695c9f90a56147b8e3279d478268535ae9f119d57ffbd6bae6cf5623069100e5737ff4f25f2924d21d5d5bd2beeb119cffcf18eacb87628003ee3fac1b5d755063a9cc5fcc22d302422250e39f30c351503f2d68fc53afa22ea6bc0d17cad04ef24f29d479794d2424e2a90d901a00031250cdcf8f2fb87ea6f95179fe3adfa62c2189320bfcc37dc1c7dc2be7b699f613f9fabd8113f9fbbe26c6dc52b8f2e47177c93031ab222ccca2ec095341830c78ee0ed81ab638270405d7726c11311b3bf0db69ec37461dc18022e3d9907c260bf7a5e9878a0965804850d527930ee9820eda7ac98da7da8eda4508ed0c7ec450b62e27513a309441b6be3846d44cd0f17a740f677e611abe78958f2c28f2628c8eb2b0e35a45247de93aa2d129bd38d7a480accb2c968534c0d6b711a028e7d1c49c492bc0ca804910a65acdb82ebf24c936820dd5cd24745044d5db3553478451a6f95196fa8ecb8179b1db6863ea1fe01701bd4e371a67041f04a8cd58954d2d57ace1032902503a0db1927d5229100b1d00fa344a14920a2178f1ab418612844d1a75d6ec0584f3952c885756bc49e1c8ad49dd8e22dac6f9bf180cae76e93b4aa9fef10c75bdc214e97b18fe93f1a34be038cff595642490bdfa299d738a301b1d1e06e4929ef5b5d94c7c80ee53355ff2a6f0805ef49406bb2915d823ba699707a542caa8aad91adbfa86f490374bbdebd249d15634a1c37c6faaa1e72a9ea98f07fc3552fb97c5ee2a2419ff1ac887a9ee9a290d29a6b6a3e7bab5d42ba902dbd150f4239022357787a163fb6464202cde5a4dd90d45c4063f7bf67d407676d9802a630c37b52f2f6e424822a051fc61e1d07d8d90e4df4f6e0223623b1780c41263fe5c019f2dfa53043e0656efaf06bf301ab5ca0d83e6cff38cbdf1671510dd29c069c0e86b9dd0e19b46f36ea8eb01c086921fb132d1b905d394fcc45e28921e96c468302826ba446238f37b659492ebaacd3ff4a21d1010ba575df5a5eafd8356417c18042eccf7b9cfe61398df3f124623ce95dce8bbafecda46ed082005d245e429d8b9236f31aaf6ac68ef42811523a8a6f2e5b2327d8ec83d2699ba50168de8fde9acd67888c8ac4f6ecfb77aab893f361473a8c615bcf2f591cc22381e3c4a7dc9a368d425f9c7efc2812cd609144c167a7347a6004d3e2e1e35ac936ad9067b2d90ad7c3bbea1bd600ebf72e472f57ab3eb8f07d146a178602f8c1615a323764887796059a42a4a4887a00f34e2ce20ba31454a88ccca67695a7afa5f3c915309fae92ff0420fc612eabe998e8638d4ff880cc5951d643a01b9dff50da52b336fb55b09aa83e13640702065380dd0e8b0245dab5c05f8f885ac7b7058c124958096ea612c182f979df6b1bbbf6351e0b99a54c78a1df0d62931283472c6999e45fef58d6565f758b518091756d5c203f73784ffc4d4efa6b81e36e58981b0c25bc8e3e0381ecc67b59f1b689ac8b444f2362b04714c0d7810c1e4837954265e6bbc09f87b6053640b7ae1dba26a3c50ac8453ebb6100d756d74df89846559b789da04365c59f2232f69f1a680bc6f5c77fed4a59672ed6a31a9a01648676361cc8af9fe4ffd5c38d223c2781fd6041974cf3b11dc8b17907cb21820a131e0b553f98dd144e4d863963bdc106047e88d0c24d9cf29d4b323d1ab7aab8d3c4f92311254f8d959e1ac90daf4cf9dd0f31120827897b197a0cc44c957c8b868ca83dc29978ad424ce05b67d0ffa9fff9d488d62b50169e4afb07852be7ee6c9b6fb1a03f327cdab830edecd883e81dfa87cf8658cff907f527f1b89a91882a4c47a031327d2947e813414269ce75a0a0e8400cbde0ad6810b22da3fca4d5495bf6470bcf99bc63a24cc8b6ba40e2c1a0d31d901acd7870bc6feee94f7857e608e8d91c18ad18c161d83dc752b42c2f8898d3cea25b1cc05c86a9cf3c0fc7a533acadc5d6040ef84e49e49003d05d4d7be5f0555f621ee0704cc189d32c8fe263c4d8bbbdc610e531a392d9a229fc00f240b0a857e493dc13dbfe22cd4620f510a8607e113cf2df1f8b1dda10dd58fa550a77522e721e656b157f8c47b929be70621ac646f993354f0c9ffc73aaec94c990ca48d95bccfb204f0a8a6f09b65523fba4fe79e447cff5ad29cab77b593176414406430263d8cee3bc04d7a9ea734d338f7d16b8bfa672823ea8d3138da878d3f49cb654bbb13ec0195ee28df5138735f0b45147ebeddad623bd456d9c2a0b8e7d81f5e7b8e4d01f4a99c9965fb082e6947684993e312f0c296783e4815c2086465c10d61782865b05e48167b4fac7c5bd50a51e6c9518d1baa2280970072191e4d5384f81d4bcb8631c80bfd1ea16b5fb5b04ffddc02819900c30219e2046d4c6eaaaf73b1f78ea268d3db0522271223b121d3da8953e8c90797c7b47bef70df7f6a04b7c50d75a1e5f715f662c766175848e5204db8a585d0647ce8e13b357a958cd6439f908f2305792273d5c243926c8409091289f9d7f0b1ba8fdbb4f882f311f0c738d1c622e6dfb50c8d20dff3629bdf67edd55057cedd10b388bc84e72f29a9b52cda9f1d75d044aad37ebe023c87099ebd3f6b471d9c51ab34779643cfe2ca66d42e4343d02f7dd114ee136f60d836af3c0ccdb3902a174cd6068db6585d876e333bf67880ad28dffe103e8a1613c4b3fdcd6f90aa01df06097f3b495961b2cd6e6301f8ea669c454dc090229558f77c5115fa3a9b2a6da722713a60843bb76247504b6d3d5b73ba6fe4d722806b26647589494607b5fb0d361503f5f1fb2684a0f0dcfd12eaff89410ee765e12519bbf8e03399bfb5af0f4e05434e8a723f7b80543321ed1f3260fc090b60324c843797d92a387027d73f39e95631796b34ac44412627e5b9e0f3600c02200dc587ff2bc0aa7ea8b31d0a8bb2df989cc7a742ffecc2ec3ca1384cc157d99830dbad34439d94f6009cabfcfacfbb6e0a898c19ef342d96e9e8078e44d9943fddde59eab2f06648ec1f6c9df9aeae69b115594f1ee328290e0468e81a57cd1adeedc9ede66b74cffc99509138b1630b245a753e822bbd69c07ce670d983ee0448a4ec0b92ba8662fe4fcc357ce5635386266ed0d2e8bf6a005ec5f2eba71df370bffc76be2899496f0137efd2d8965352a7a5e6a3e505eabd2e3053c09b9758a244b08e4e75588c204c8609bc4e5a952219eabf450653ab8df636ae5be64ec4ea7f9cba9d0feb89e81b83f37d45279ff06cbcd7625825c91acf2e91c8584b8952b921cf2ecd2c86566f48677a5d85ca58b958413a0fdf9fa908650fb02bf94eff3b9fc0968803bbef954ce4723d95d62b05dd7726996c64ad5d20d3db0536ea70ff683de52dad34312b8711fab57f3d018d8662a6c1b4bbf8f35150cc28e405520a146f8855da7fc4d1939e357d74109b5e437c4bf64b5bdf7fc4c69cde2cf335e0a2fb6fd49e30854b9e3253b8d9bef487530607742c2f3133607b9b28cf90faf42d66ea58b3a5965bef6e9a26840089c7c1d3bff6bce63d8a86318f4acf1f7e8c793ae174dafe747d329ae5260b672ed3837974b358d077eba776188feb4a7187e6c0233b9db580b2e365721613ccda692d86b990d83c25ba6062ca26cd288669606ed4f08b2c23ab5e4109b501a560493956b77c254e1cca395df7c18aef9dd6e2b5dc38c043ab9a4a83100d0481b9eaa311eaffaf6f73a2e79ca922d723cf1a8749b5aa02df3234729c04e94187003497e653e9c91fd23aec7a3d64bcc74b965fde585efea9bf39d388c5102fe962ba2021efc11f4ccb6ab8a80b142103c60037fa49e1fdd25ca8bc4e5ff095b5f74de909edc397b1506d7fe09c6c2152252297665f572e850c70ce558e614605070084fc847e09d42d9280cca25247c840af377e0aa5d7a6cd84705722de8e0ebe33324873f1946a4893c8276ba5eac1ca30cecf6b01e55cd04e62cfc9ffbb34e8b98ccd48620de251907f4964658a10b5819bc7ccba5566adba003f64cc261ca2d44f0b4aae20c32f80ae6ce1cb9405d9a7c2594e10ed0647f45092a87b9456e80b01a4fe5e4b48549197d4e29055a371519e1efd4a5e0d361b6dc4f782e15b606ce006843e28cd8bcca52e5d94d6e85f9898d9de40972142475562c14d31b9f538cc156110504f0211f264db96c7c739dfb0d472ee11e13558bad9ff2667488770be0ec53ade0f33df7b86331507a8defdace556ee701e8f71bc1580dea09cdb08f76b5c6f27e134f25fec535dbb2d3668da93413fc74e4e23a053fc43c2519176191a0a8d9e88a6ecbf7cb54dffc48629a067b0fcbb89f6a29be4e21fe482fa2932b62e1df21afe893d48c5cf1d77f7ca5cbfe5bf0c051bd739e5a95badfcc10f502e2862ca6a7c5a99193d95fd33e4a38ef416de805b3fff8eda097a8a3e31723493dff3c347d4d7b4a80d58dbea8cf977b0b496e2023260fad1e743a7cc85f440f0517298c6202d7747842f88320163e8bbe18c85b2eabbe27fbbfce4cae0ba3e0456c6795f124d2edd2e8eac761cfe7c9edd4139d4497b9675032792d8793b1967572e18a346ca43480141d8a62cee5b10e1ff413a2517358f5694c857d39a1184d54ec307ddade8283789eb98e2ff36e433406fa4b5e2c2ad298cef092f62177dc70a5ddd52a37ec2642f94c2656210541ea3494816307cf3a0eae5f95025481bee753686ec9d243d8537ad0dccad70551a66ee01b2d622d0cc820db7ecd4767b992b968b2fbbecde7c7c71197dec3c3acafcc6d25d1047c88902d07b648ebcaf38ffddc2748f2119c303771f748b01b91a3cad7f9916debbc7d0a559423a0749a5e77630f62a12a29672ca737fe197738ba72d80cf3147cd902b54fca3940cc501a65056b7ac309f93b37929fbd97402513fdaf1ae6cc7a094d6f60d17cf4826cab1e91fac39bda0a4554532a87716afe66980b9215e9c81abe364de5fb655c4fb373e31213a5d85c12229e7ba6f1642193a8a15d5baef42c2caaceb61e0bdd431f6f79107202b40f0d9694066b732aa79bb7fa2318e8c72ebf98915121e737d34ef10bdf8a15660130198ea48b81626f7236db4001d663b8c328631783e65ace0feb8a6d61fa69d1da292e358a8ba19cb332fae166569a4475499df04306f8726ae5a6a626f7989d602063bd5ef59db96d3b5cba970cc1a9b5158ea37a83c86e971a6cce874db6ac77283122b0c10eca3945f94fe5d45179eaf97f665025f1236ec1f56bafc488ad69434a929dc74976d522a1d2e39f84948dc1957922efc6419beb636809f48e5bc486cbd20e897b111c78904e3737ef24710d024c2bd4650c6d6fe447a15bffba7ef90a7700c8f8eb5d4171ba6c6ec2915891904003e497c9994438fcab8443c6e8d463ccc6695eccba60f4a7123445ced51d8ba9f3a3b80dad5a27a9366fafd864ec190f1ba9c713e6f0723e3777e3a602a3211fe7092170a9c94a2d9b29dcd27324ab1eeeb0f37527ef9a43576719b2ea5f13c7db9c8ad4ce9c738b84540ee561f9265b90352266fa966a8eb88aa2a8ee9c86e7e3fb3cee794bb1d7af1ab303469cc9335b92b688e070f64e0c3dd20f5984efff8aef8c379038a0b47d539bac7b9b04f571865a95756ee3fbfe7ba8ba04d03b592e2071421e2b431e32d81b485e0cc595219bbd98017446b862ce5b59ca784dbcb335417a9ab64ff8fdf77460fa705c4251ab7a2a0c406cbbdada0ea9394f8a6ed94078044c040a06877acd2501b3c710257ff9e50e3a951c92265ce7ddc954ca09ec6bcdff1c829a56b1a9558d958557b7e5db89e3090ae3609afba609274507c9d11427548193920bccb0066ded2ee7fffbfe8ff20d6f0617bbcf2adcf1d0994e33a686e88a69e621feaddbbc00a8147cfb1b207bc932f0c0ad9e65e3531293a0ff2a2961041b6e4482e0d99af826043f614ac0850ffc447babf506608f1785bdb7268d7404aa7e72045dc64dabc3eac39edc22e121076ef96507c24427623f1f1e5fffcda0e1b08dd203e5b0f885155c915c633d8e9828d1e0c6fc9cab908e88f1d7dff60d757e017fa6b823fb76cb8a07fefac78a06edb3f07bd3d191498c3308cd0ac6033ff27773f3bf1001474349bd5b2712dd446b2032140b2086859b5e7ad136603951f683d5f51e492e12266e3af9cf88e7575790fbe1dc08f4132e024e452dc67a64b511985e5801b96528d1ca433d04e6ae9880feefa5dcbc91cb9acfe453dcd57092969fea244fb4890f8065d3f5c8608efe7149ebe3da9a0c1f3168e8bf58cebb1324ba57e16f1a847eb8d259db132922b035ab22f5172d3ed535e6c0334b219312702da0c639972ef6e11c6f5c9d5ba047e705163f531d4e3b4c2c1f90f8e2e7059fa684b9dcfcdc607cbb06c0a0b44e3aa2e2e71f2abbe10ef9bd6df85ca77c85a2c1577023dea72f74aa54189b6d479d4154c15f985249a6ae251973dc39c2d6a310d4188665a49d65119080134014ebb5c63f6df5371923a2785af41430bceec6e3f052491bff67ad7fbe24802eeb164e9844252fdeddc21f4a6a231e7e307aeb3bbc63ad26a7f060c6f8000c03d47e64d18cd24728b85480e5490578edc7d31509c1994e981ffd3c50f3ca52631edab6761d25e332a372c82e4a9cb6fb4ccb4463daa6c8821ad19233598c886a87a08e5053d97863c613525950f45bbe8213b460bcd9d3e0a8a6e01f4a3b9b7c2b4563c63665d4f15576f5c6004174d0246b26c57e165d092df82c835e8b83e54a32c565b542614962829be81ccb4c200e04942eaadbea06e36db1660623af4888c33d17b926d018a1ea35767d111479d9d2d40f7e2e3c0e53586a5d6cac88c771cb1de8a26930795d5026940e5d8ec1d1165418eddabe3e129cbed43a4fe4739b94fe99d0c9adffa8e0a8dbbf85d1aa9fe6b4da48ee69b6f85cc92621bff00d0f3f800f46158b034a5a70d497ed8ff6e6841cee8a35d5f3165c004c7f3d69bdbb5158bb4af4ca3fd458d6158eb33028ac653d21b0a66093937dd54e7c6f24f248ecadc29d5f2c18899fa69c4c615740d674e486626d3722b3cc65525133dc911d47790a8f773806baa29c00b804985867f714c55e706f30ef9e59b8b349ad6df06f1aecc5df520afdbcda851c079ad3780dce594fc28d504560d84a3222caef6dcc7115009ddca7b86b955af6fa8718404628d4991f29ebf2cd4771c6b89561467a77655b99e0842446627bf9af2f44a38fc530379e692d291afb5de7bffc1380b9f106b3153ec3acd962efb15abe9af25a339811badc2b4eddd216d23343b982ebf6b81a5f2459897c03ec4b6ce3f39442a0627dbb7c297efb59a65614011abd5b6615664570ae640abdd2dc22e58a5a0b4e0cbca8d4ca4e74196cc215517741140cf6e547ed6cf88dd5db0ab9075112b6328e6ed681c19a5dab4f8c4caa354a2a031c8d2371a6dc897673704540d616280e273bd4d16e4ed18eacaab5a289625b3a4311b09472663838d7a4912bae11090d536d7fd8798a57614ab5631e3a190abbd6023eb2d845c4c33b2853b711c962b16da866d5a297f93835a6616468ef21f2759b6f85b9c34233527c73c52c37ad81beba3d20400929683db27fc4a19f41ab3c8f73ee2cd54ad789656dd523675d5d4683cbedd06c0da8ddb98f74776fed6b6a406b45f23ecb2a2ed50cbcee717c02f9be6ed256eea151c9722370355ad218d9b8485a85c95b05b4c51cd22e6187a948f4cb3d7fd54504c5dc3916a5674deeb78eecdb7fef50c3a5866bad6329ff67394fa4d2d1e2dc3482a238df19262cb07abae33c5f732ec7aa9da249c27ce4d0b54dfb05d405e7b1085187cd48ca58bb67a47af8476365ed6aec5f0274f1aa1aec17e8344eda159cf8f00d1fe0b812b736006054a95851967da7657362125d8ca1ddab7f45f84ed5fd23ffdbb49ef472c106502c6d0f77f970035110bb0ff539395fee00da753dab05b4eae1b7d72c54aeeed5fc9bb42ba2a276f8d03510714683a9401ac4635697450565e73d5c19ba8248d4bc3e45a046db66ace6378ed3f059fc9595a994b6a2dd326251d73d96b2af634d7a06e43d385a4d3b65f4d4f2ce126cba76a8a96b4d3104b6ff36f18ec17dd58d8d57fce8ca3599c1098e4f0a1ebf0dac96fb5991aacdc59490a2d91937a2a2715484dd6818e36040851e135b16aded8357ce6ce6adfb26d0beeb76ec8ddef45463c6a2b6323af5f74f603c6f8e8870847d0970a3ceb7f75e5bfa7fc77da35172102f774b391eb0b63fed4a7491a534c17bc17ab25670b90782583bdefb6ec6270fa471d35eb6b7ebad4d30d3bab6c91e568b903aa6be4bea163ec7f67ed95eebb9190ffa634e73262c4648e0ac2f1ed34f10cba37c468c03a8795d1d501b1a1907fce99a1cde73aa171504f632b0f2afcb04efa90efa40d800d38b09a29d17fa88a338023ab708d2f8fc0bcdb1eeeeb690bfac5b498353eeb896e45cbbf54f48500ed4c199e9ac8115d54d01e2338b85ba74df85f777e23e0b4490818cfcd0f8f04014cf763f42d8eb2caa66788c9cfc9c74ac7d5ce0cc7fc1a1879e3412c36191c5107b87f1dfc5457c345a6d23541c32cb1f5a5b783a1d0b3b77e7e51b57db711996e725fae5f4fd959d88ae246f3a5c24932ded15cac32f0b3f97a535239010ebd983c04ea933ead5e754fe89ae8afc7961391039ba9870b40eeacea7c3fbe50ad452e8472936e5b3697185191efe38178a324f06d6bcac0b7b31ff09698810bb85682cd82804f2971077a21da8b0215ba9247bc71242b734f6a152ee0eaee60c132beb209899e8ed7a3001e75739afd35795bc2003f686934dbfca760afb623b821183a63b3f315646e45176c48ea77a6c1ef6313f68d68f2936d3010ecc781c59b619e389dc5955d5d5e2ba33ea56f3bda13a0921e0c895b15d48ee7aa73ec383bac3e46a78f735bde943356362963dbb194d3cc4c2790639fcd2dffd3dbad6b4a964e652c22e39d82ea0cc3da3911b972ce0f27ece4749d51c1b012a4d8d044f1099d43f19a4ba85c0c5ae69a1642b4012ff6de074a9b90a28d9b1b2f2fe611a0f7f439c75dd7f47c57ba33ed6a45e977a46870dce3efc316da2e882814f405b4f59840cb4c893402426a0ca4d528fa5387101b65f669cae7ff05d1d178c1bccd220b2a29531d38b003d60129f6199c287da4c3c75d96d61142253b60cdd3c4ed806f510a2f5538790b0471799424586ee060f77b2c0a9983c855904b01fd1eed6d71ac55a68a5537383689f4caded71128d424a46c9209799b5f44d0581de3a7fe1ffce55c8e7f138c47ed0538af002e9f6d447eba076d9d217f4c83ceb1a87698d11bd3d9427b70ce6d8951672b60703dbda332b2378b40a189ed2f0c15010462cdbe232a50a07dcbc4a75ed204cbcab9ca213c84a236a84a1ee0672e1c021af31b9870e3906859d743e8b0c5b0daff2c2d2ca93c91c6c00cb976417cd718a8332d682130c0b376f5a0815b12813d19bb4fb164f036a4a9fc3469b98c21225039549e8f5f093030f8e01298314c6c431ceae3f52e1d8f267c0e278999f5e09b4d4be4a7a2f8541af4fc0811ed8d083c956e505ae8be743682cbd301f95044d7d1356159b1d173ffb355ba18c8b401293a08526402c6d0b7302b695038e99347bd19ecbf0dfc9b8915e4cc6dbeab8fae5fe4043530251d82b6698df7138e537df78a4e4f96468e7f4ec763bd98c006f9225382baba78806902db9fd2396d83d4d2d6e5d958ead0b64f3443533abab56abee1da0e92396202a4ec244be62e6d9d8579eebe9d99ff22252d161f3e033d5e3cc6189c1c200e0bda6ddcacff26db63fbddf5f4efcc882a155dd8186a595fbd9c834e6aef136f48882243fd248095269af4bbb0b78a7d7a9a41c71bb505216cca339e2b40fa4f6369cfde7874e3639193be3381cb059e9ef2324a928daee33c5b7813bb8b439d048bd38b21937bbf9f71bed332939d3fbedf3afec5ac1ebcd70015149d689ff50a5850157e0ffc5559d5a7474cb44796650274da3035e891826968bcc591045e77dbb8e9bc32fda7ba6accf5e1c1f43cf67bfe1a53829fca8a70d7355b13a9168d9a66b6a041da7459729de26d6ad3f0eb670d68b60d624a273b9558aa692d44e41e0d911c606a14b87aa53af8b24e5729bdb3b8f72b611ace222a856fb6b5b3da5dfd41a117eb131381382f10f0dbff6adc2d8762585eef5188cd3948c395a9724c7fa6a34a928826edcecd792d9fc5964fcb58195f7ffa4b6ba9ac47ad8e7d0dd45f16d137bb8410de39ec337114dffe9ae2bf504780100706ff824ab19d8b75303ba0d7dfa06ef4e0f528e1fec4c19bd1370423bd9b88692d7473a1b07f3074a3ee7beb10feb5511a390440d9e92bbef06a9865aa511b37c457231571ec55fdfaddb88f677b75eb02a9e30b10f9f65f55c4b5f749d4b40f6792d6605f5180f908cb012c129c4395ffaf1d11bbb037cbca74df03c62ac73f3c622c5efd6d364999d9f5f3ffc20b9350c6998666ccde81585ad967e07ed8a97c5fee7389033c5b04fb25fa1115f1a626acf229dd17e16de623a60ef0c8cd3c3cc7e1529de2c747c0c02654bbf06d210488e1511259b372701cd89bcb7d03bedf7d13dc0c1432c59d0eab5f116370701b2249dea74e8dbc50507ce8a5a5d297bc590a6ae392beaa837c8e7c5d97906bff3f9c0d799bd38c0a9350b5d98cce334cd9dadef60acbeed72cce0744932461db6d78dab88c61daee90cc9da98232fc10218362e0fe7b5676ea877ed8569a05dce696354812d1d2c04c88a8aa25c960aa4eb3120dece597b4a998efc8eddd689b746f46c51a53e2a98c520acacaa6ec865fcd1e9df7605edd5c813aaea2e3e437499e1e227cf44eba758d09efc4022b8473b611f59323a1c01a352518608d682f830d1d290ec78642c0a47d062a51965676568033cf832f84ceb88f1d69f4dde4f9679294449c4ff09c54e7bad7fc4a4ef6f0ae521f638ec779951543837c060e0b01f8be90e1c7b4882f8480d4b80a32a96e4113b7942022c4c48b9048984b78a9d06af602f6620d968bf149a6c61deb7878bb74deffa1b0986b670bcc25e3d1248f6a9423a53a84fb2bb7e1262161789b250772495174016ff1c7ee91c886c55fb14be0d77f46f80da32064ca62baee169f887978e84f3e8108af869f1c29dd9595cb7aa6d39f7ffe0440ed476928f41ff73c5b9af84b50bc7426f77f66d9fb969e4edcb00755e4bc25edcf6dc9070ae48cb59d4167eee8642fa89766bbc21137ffdffffee8a5fcefa7c82cbfa947fb6aabff2f83123416544cab1726935a5d9474a6aba1699d3d4a5910c64e43a39812a28203a337bc9d3214885dc63cf20ec8cbfe1eebe355ce22268eab1fc4115b05b37277e101a8489578392609da9dde73022b98e627a17eb126d70a880b4f0acc74d10e43e319417f6a8a3a8ee62e0b347b39c2118d35f59a9a3c4e2f8168c1e2cde03242365672051f72357ea47b2794d2af3ef5e9a09b243e4ac5725da9a858617f8f28527ccd2b9d34dddbf322e2dc5956fe9c6c63b0d95b33e458311c7b7cb72df3314d68154cc1e5dc7a933bc919dcc5a85b9599d4160277f41ae5a38b82df63ada73767f230bcdcd3ebc9439d2bded373a64f7528b180b9904ef10e01dfefeb7a4642cf40012024441e18a8296b9b983677319e4d6899f5183ed4d0aad6bb46d4f1674fc0ebdcf9f83701485c1f5c02127f49f375aab172dfd4dce03fbe2d4ef1a0a2932cc9fdf107772fd8a9edc4e869ef014a17990b91d508d5ecdf914d844382dd9a938f7f56a749641b468be875bf8b4cc895a3b248bc41e2ad1a614269216a0a9e9b6eacf19b82212ef1458a2f1f90b4aaf4ec754112b19f13758c1722afd7b392bd747cd7a74663af36feed477451c29281fac3efb979b36185ab3f6b6b0a1034677cd4e8c0cd5ff24a1f9a23e1c28ec6da3b8a9da90ae940b5c5b09cad5864c3d309aa295e8215afb9b100c701a2e68b93a28949f59ff757aaf6c21dafdc0989e2c5afdf6f58ace4544583873f652df147d5f8f89d10a3a9efc43a84bbe407c40eaed6f5f9672924d446fa258d0b3a104b584a90778f799f2534fc6b10c695265b5731ce593fac8f0b1f76fe5b7a6f70debcc8ea4741039222e9fefd88afa6bc3121f2663a6633b7711b6384c35b890fa33cb6dd86f5e4e72f82e4bfed45103064bb4ac1021b5d4686a7c0849c2817af3c220d5e425e24928b1e5244c320fb7ad103f07d30e7fed4bc3165c03b5055851e37b6001f68188a3dcee7d2d545af9d100166ae55dd0e727507aed08761728cba9a33e865964d2396f24aea46100f9afb1ad883d86e3bc61538a1a525798e9b5ecf8ecbe26f6b5ad371f2855a6d78a1a1ddc7d924cc3f78beb859bec98ce05a65a1246d11b7fe5d9569da863a361fbf688c90712d9f990cfea3280476cdeb1d8ec5b47b522ecf1ad8e6c53caa1e0a2c7324629547c186e7c842e80c81f06d34dafafba971ce5b09966cfeef0b2d81a481437923e7e8a1e2976d573b9bdeeb7264148b4daa5d2098620adcda8fb15f6decd711e4eb52192a5e494fb411069f7b2bf21d58d0f6061668b5d3008960e036bba4250ee528ade0d47cf028447665af7a59addbd830a46a8dcff13e30ddb288eb30b9ad2212dec408bf11c8d9833dc5efcb74b55244b36a80e89c0f61d04440cd8707fe2fecc7eb5eee2b131ffbf53e46fced2dabbda1e1bd022ee406e42282f99d67702a4f413cd7ebbf29ae9f500857b2d33d65a13d02f3b001a76945264230b25a331d3aa82e7c548933c97f62cdb4f581891cf2b672263b825d1034b6953b9b9aa9ef20c2ad5fb4554b1554da97b83363136dfdd924374e2a1dbaf1718bc69df4bb1cc026a4a2bad2a6135507f67c1e9da3d5d1ad027a39ce4d8bcd9e28d93e3e55c4746cc78a1cf02e46625088b4ed8b8a3ec379cd031db9120539e0884c328f06820db1a97ed6cdf67d7e357e2efbafed6717518a39971513ad1b545661574b6c5fa71644ca0044fd019f8fb8781b34c6cc1758f1dbbebda07cb52f5e1e47b71b59dbd38bd38e7b53a6b73586d5b7c9381c5d2a43ff3ea88859390f787b8523ed1b4ddac338fc4708ee92dccc934c866ff7007568e01ded140ae2e21171302ef87db9b95811e839964e8c6a75147afe601cd0c01ee070301d885838b8e1db51f3b554ecb1200682d9cf0ce2739bdff671689264818930a3bfdbbb3f6b5467e5dcfcf1c3c47ecde8ec00dcb8636046563761a1b9dbfaf2a72869e6bc383588cdba2a8abba0fdfdf7b37f102c922ac0a594bbcb6dbbab2a2d321dfa83de1bafffdbf6d984acea007036ac3d9ed591d7b965f650e0c0fac4218194660841ebca90c7e36ba6804da5bafc668e4256dff59e567c5e9274b2c04af5ca325b247c21fd6b85ba778806521e61865418b076f82d16fa2c2759726a6fbcb2ed3fa3b09c09b87674005ce1d847b5eb6189d59572425cf66759c1ff9edabc37f46d013393aa070049059e15e92c880eda1bfbeafa7afecb9a4dbb0c67696e95e7a5928fcb0e287f3d2b88918f465cc2d8403a05c1fb2f003f3b0de5fa5a066fe7e8e96d37ccde1827d50bfed06a2a4df60df4edf80724f4bbe2b1e036025793b3a1c150171583af3a84e09f4cf4564836aca670655ae45c429d0305d7aa9d8e3d0ec3a0da5c7ae319dbb7ae5f4ab360588dab08316b49b54638ce57da9cca70982a7ff85c4bca4c5c778a2b6dd8223fb932cdd502ff113625c8535e5e429de06fdfdd689116c3215364322af58a54b5cffb4b2aafa16229fecdb8b2dd2aab6a98e449efe95dcd09fe2f15964cc6ac41f16fbff24b9a832499307bac65d35251a375e007441f2da77e4383900c4a14e7896aab72fd6f8e5e6a0907fdb93c25ae53f130a29e2b468e3df166c1214b54847bfe09934df8ca7f3a91859b4ef2b3e3a3f86d986a6ddd8ca5181a0fde29ec1495f9421acdf2e3111a9585fa5ec4cc614fd6ce333f003f5d9d59b8c4d785b8e8cd0df1ed5f1364cd25d85e2e53321358e549818d0a26107596854bdf11b3bf242b558b20a8afc84179386dea0d52a70e647e966a44e3ee16edb5ebe0279ae280b74604f3b5cee95a279d3a990ae4a970b1a148a67a76892146175adfb166f49a9f2531ef62a63c2dfad93f9e02cd05a89a001692dfabd7101fd80211445d07a55571780e56b7f58905958356d90a21eb5d5563a76a0e5688f3fc4da594d7bdfe09715634c3534e127e21a318a9ef160e7f86034fd67d9feacb2220d380b1eceab3e1d313eccc491a5931d32662adb7ee48156a40b3270968af8f189f3477e6067d51c519e01025224f054644fc89d896bd22c6b6abce2ffc40cbea425f5119018ef7c5ea4a19724c123d8322bb44271f833fb990e471f39772c13815a4273aff7cfdb2c26c4df1606ec92596449074d3871fd08e4464c64e937666503fa66a3b4ee1d392fadedcbe56677b27f25cd2b2b2492e67a3f0a328c8f3d9b45900ce968772abda11e7efd3afb8239cb269124c3011afd54f0e3684f3163cde85d7de529fc67222d08ebcedb844b2ad77df35e711a125f79afbd7eb22c6ddfb6df2cefbae12642cab898f2e52fe4b018342ab00c2db1383c9ca31d4e31e78748b6919717372f987041b49e9fca9d702635df343b472548ac0b684021aa41cdf35b888c34c31a4a82a6635cc1a313919b8f8cc349406f74bad1daa5261cf118d06f369165693c4af6fd3280528ba3d2f7c5260beca8da959215f339f5aff55ba6cd8909c003703140526850d0ac083b60f506055e3946e738e2c05a4bd80a1537a9814ee375734ea9a34e5a7920e97aff949a3968e7eb699057f1e91bcf49454212d7ec7f7bfb76bd5205f2874219ec7fc2de892ab3241ad4697c40b396d0641d04b86faba69a282a63bb0cd23ad28428664fc5aebb40dfade736fa4fea16968fa65b284056058e9c58700550da007dfbfaafd92ad4454a0882fdc058bdef596209253faf35e4c96d3b60cda5749f8d1ab6dc9a13a46eb3a79591b8413818765a167af70ff9deb98542197e47c4a36f54ebdec0c759d4a7197a502f312bb2af2894f7b989ca9caa60ebc63d52f7d8c0277574cd86b8167fb877e9aee190fa09fddcf10faf594fb43994bc3d2e630b9dffcee9f12b11eee3e3fc090eaedaeb9335cd89bf3e1e7c2da2c87d9660e1fadafe5dcd8c12e75385bbfb16d70f3c2215aaed29b29fd5b32c3911d6d9995f3e644478f949c21e01bf17a63442924e2f3e52f7eaa3f95e29263b94dc48cd8a2cb085240f58019fc8945c6ff55e2c4b0ca6f5735c1f2007cca7745a4da2597f40d53ca5f7ab47996a6b6b3789a6638ea935ee21214d9bdf67c2d89da11857223a2fe43ed1188721c19aaa3b4b223719916566f4131911645de112af4c1e432914645044f293bfe3d44ceefe7bef44586dce3ae371cf6da325fbbc529628f53cf3f2df1137cf20d9f238bdf43e715137f3216e47c1ddf20ac3280f9f9cbc392d8970dd578ba6fab2d44831f91f5255f9f5d45d6b2dac87edf230d20f7bf1c210ca4e03f81265a7f4cee6aa6425ca42a828055e3fa1ed5328f7ac33dbe9063a1534e5b344762316c11e171a6b5e0c80e54843595244b71e0ecd9e47316f0e739085e5e637c538a984468e640e7e94d129b879b60fde32b8e944917100324dfbddf49fb9a814ed7c3c4969c2bee9470626b1efc89d37e8d8dd81e17960f05dee160c640ae77ff11eb91ce9f6e7fcfc05ed30d93e1c2ce33553b33c4efb9f4d82b2b2cfa536708fe23daccf75a93cb10fd5ac2b2806a706a7f59b0df893d8f213120cc1c9e760838ae68ffd70074c58e4f66ab13072387aff29d55ca475b08aeb456dce53aee30e8b3571ae0b871360b95207226cf551e7d9da0f89dc54adedb3d70fb5399888c8b84a06cfc00cd87682f18d6f585143fc500ab10e2a231c400fd56598df8f4947782c51ef35b90ee9f440abb5bd275fd747ca7497dd265d31500640f3f4758232b90c2eca9b9a37d45bbf56f1373477eebe9261f16bcf71f0fcd29334c9d6d9bd88b607c11de41a1cd0915b191d4f9c6fed2fdd3bb04d236a532d999e8381a3ca4dc5d7bc0560df5b9048b7be60ca006d7f28f5ec7734f351e5821fbd8a35fe0e59f8be0d69d698141e243d484237f1eb4cc2d3bc9964637ca4f8a61af359cc52217beda15525040e8b7f9fb8fedb7b978614348f00c27c49e034cee46143da0165c295a300638272d3e497a59caffef6648fc68d25dfa72a6ab7af8ed3eec6f569e606cf18a0f50f9e2ab31a2146917ada84e7c0bfd3af7c26d33fbe6fd02ced52e7e339ec10465613572341f348b0bb2153c453a4bd27eb6d720713fd8cf1a1c9e5fdc0523300f2319921b39a04e0113b7a0987e2f965f7a977f8cae61b92786591d83e6f08ad5c417a6f76e0163822ec8dd4af5a573a0777258d0befba816ca09835e16f9b158d301bc211b06418454cc9daa7afbb25a148e51091fc243b602ad0008d5478eb95789fa7691b6b78907b3ba21bd224b2a51a95be20c2f449311d61834419f4d153c847f0b9388e629a3ac45866eccd5326fce680ad10032447284025ecf428f703db8b3e61debfe0b6d7fc062149cf93d9ab5aac243d1bdbcefb915422619e5e82f773a7538bdb8bb1e7684ef2f5035eb32bed3d47826af2cf8cb2f36abd5c1316e9bf405b24089b33d3c59a1016c61d033266594747a09da7fd68244348102d9fde5c66796ee06a9199661bb8854658d85be648581d19cab3f4d878ea28a610f011973cc19ce591cd1852c3e675adfd977bd8991214a5719c47acee2f7a7251501dcc15fd779868e4da06c2257b12ee38a21d1904b2afdbe08e92c6e301420eac2eb02a707a8cbeaf14f7b256e20269a86776316fd3e84b2be54037bf622616340405866e5b31a7c2a229483ff892652495642cc68eed860dd6790dfcd015c5c1711e06fb489175d1608f91bb9f310e558af6bf9de42254e17a3524b96811964056e05334c98691b934523a61b8d6c56a7cd2fb2f34f9573e87ab06d0145ecbc52f92b780cfa4a71e1e7af40bafe3f9dc48487f9c1521e668f09d4aacbebff61c98778ffd5356cdb303b72e73e780bf0aef75266bfb3eea799f7c0700b11ff79341171d1c00fd7421fe66a2e164897d116ffa803ea20b5b7bc2241190d71e07551f126357c8fbb70a3b65d03b0f66c7d7ff62b6e88d7e58543da6844a292db25555fb9d15a03be95088628054194909131607f143afbe2304e759177a327d0e6fe157252d8325c64655a14facf0a0498061f2c8ac4931e02817370977160942dfe713491a98de00e0b7f284f4a0d31a6f7de7f1cf9ce3e47bf8430be4ae062c21efda544b37b6ef345cc98c82a875f9a7273f8998dbe0cacde606c023cbcdd5b35f01f91a7fb143f26092239c87350c28aac87c62e16eba6889542f2071bd162ca435888599605e12f1269257c17e9077d1ed1db7b87f2f546d14176e5958ed1dee851affe4d41a632583ca787240b78d755cf0ba7dd9c30d9b8200d9653b0bb9a4714709a374591f2ffa90658e4f0e9425000202e5c23196b012ae4a5abbf45491e4bb0322b0ea08c1dd688991b3134ebdecc7a492f37bb47585c8bd46586cd29d61efd538202231043606a83a8edf7492ab61092a7af122b36aeeb8481f9a09c85e386b5bcfa1d6d4bfe1d4e1d77b96c312ec0b34e6e86698b5e9fef423fdf62fda13ba7f75245918bcaefcfd7bfb440de918a6b79c5b3626b080bb8edfa8a4d4aa2705c59252337e23cac11572c74c3a45d3a0303bf681e2c5c2ab28d289d75ff1199fef1a10861afa3e4377ae44252a3010ade3879d039c6aa9faaf1dd9cb0416db82d260603c7fae3a73eb4d9e8dda6bdbfbe57ff8a19ae3972f09dac2a3629b16d79f90ceeb16d426d3d135b72f41df740c1450c00fafaa4ca840278c2a8fec7f6412b21ebee7985823677fe76a53b9e4f4afc8c904ddad13e0b2ebd2899330bc2502c33ab4924c7fb2db9dbb15aadd95b128b67d12b4bbf6fbc9822f499886896884b1a11bbe4e581ebf98cb474a7f29ca4b2ee0891baba7ae4f263849246bf5f04d651dae6bb608a7465b4547a486bef7b12cc98221a9cce849c7e39d0e13fa33d6ee6955c10c12f68932f06f7140ecfc525649fc9477c280e4ba4dae27655d2de673e509a58c503d0fcc2efeebedf98a27aee654f34e5f32080f6c825f711b76534626f3d4a88f03cc067a94c8ea3c3ee02718dfaeca15c0fa8a16e82d1a0987e065f4073e1a3aeb176a5ffc6fe4eefc603dc3a8554fcccdc9ba5c0caaae2d6a7bdcc895d2d3e593c47086a0167e1d58933f89f9c942ab121e18789b57f8dc2f98d8326daa5add316c14ff9d9849219e4152c0049e83d2f245947b0d0860a4201c52ea6a1f96efeed8f0243d3f5d27f7fefff2bbbe86cfa95d8f0456aae29c400dfdefc6b1d91d2baefa32a5e400ac9b547351bc0d845226fa5b7af506a80b2f104146d09b9ad3d7bdfe6f42c50c0cea81643f6faaa1df3536c259de3f4bb5f9cce3ead650f3893dd0fa04fdc883036421d960dbeaff9cfa290ac51f7af897f1a8fe54ea03f9a2ee42b2d51b36462889c6b78d3bbf9e3bf3b9c3abc24c5c18c4a34c539cdaac87ab4de5c235fa888845836e03b391a2e9a66fd5b4b714da69c82e62988dc1326aa476d0bdfa74355ca226d2f76341cb96648d0b80b24dc17db8277bcd2dbfd311dfeff459d039c4a6813761d2820df7e0f7de45b0979d0560d7efb6f94126d9b645c30278f21cf05b3a1605bd18fea622256e3cbb180b9977048feb68a8d45f96ca012512b8f258eab400828398a07c000c1f845cc1857667fa5ca19c66d18b8a741b271c9cba44e64e2b317592cb2d596005933a7dddce453cc20eacfe901c5a3305d7b7333c0ef444d4bc38aeefb6ed88b179542c1b6d9eb47232a8310829ecf3bcf37c2e1690b8e9baa572e2dfa2f66408ae34e64faa93e52a9ba065515627cc36c874f0266438c05f526314b7dc2b9c9d21dc450985b7a919ebcc4601eaf3bcfe7b4457efa46c1f6eaf18742603fa6a859fa2aa6b255eeb2b359deca4611b0ac5c6d39c040c53dacce53a40e6fdff3b7a55ddefd5e1f5757e8a0e30f2bd2d4670905e600daaf31fee5d18ae0bf196491001f8f03ac9593e7aee7e0443b6b0221cccd3f7df461587fb2ef23d3be2ebed7b83fc9b4e505540751025fe63b5c05c9c02bbf8521ba38ce6eca2ccdc005b86bf557b73a910226f8d6fccd6967c3042dc42d6296dbc29bc3e91c06ff9fde5e9f2cb60fa860625d71d7e8d97a7e4488f65604aef41a636f8b52c3611f021facced0b80adfe7e23f0bec2cb7d73519d87f05ef312c8e5a44998089d0378bff12fa8e1bbb862eccfe93a4b43cc4d7c01dbd08fa31371743b9ac7b7ba73e05b7f0bc256a935e04d4532ec33c35a5e5b1ef73da9979e8936e3cc7c1625b9e096b7a8de05062055e1821af3a7aa3b6cc9895ec40d54c2ea28b5f73e69ee071b0fbccb77a75276a0a95d85b9f46cc9f13ad2758fecb89b76e8eee74d6dc2aadc8d060a87ee9c1bf8438c15f6b8925629b804a580e847997a406307fbb1ac0bd728be59d082418f35b9faee4fd1dcfe6d85d15301deaed1b72668f1766b59c491ece06be72c1c338ffbb72931a63786666acc5d0e17467690f3ee6b729ea67cfcf787963d51bd7d56ec00f2735152b02febc60d2ded370fa8cc28ee01f3589258726d1ff6a8668ee3c1143236b7640b3918c9be71831db65c2ad587ed57201520ff587c15bafb57e84e1e6fc4d19a9be0d5d5019ce873ce89d39cd7cf8f524a4251a2e04072c88ba58cabac586235ffe4f3b5c8bc0d3c2a7d0311b924d80010e422f108a230464008110e40101d9a1889c52dbff17abaecc8fd2839b9ddf538b75d49b1e1a4a69dd8f9826a2d0354d9f29e56d8c00d398e7a1b2a4910c51faaa9c820f95a7442cb33b1ed96c461b4f517572bed524fe96ac4b3818cfc17a2dfc1344080640689fb60984862225748531c0957134786dacd00da2ab13821cb3da08f45469aa500bdd654df93576e7af7d4e80489f7781f1f43c7eaf98b9cf680ec55c4d93f9c17b8a36f0a5455046b110b60fecc44a291c03f791ee206c4ad518a2815bc3a5c9db0c1ed9808016fff5296d85a250823edec2022d67f9bf52ada441e8008fd14ebd89ed495985dfe8f978b39609bcef7eddd33a87fb78f24dbb0ee4a2313290e2cacb88392b9066f85af67fb08791eb7679c842bcb54c87391a2367dad5af7755a616ed2b26a4bd0c5b79b20f94b24875847d67ca56b605bd9329c841125f92e0d22962f87ccd95c9b5bc86a2f7411d9b283f8eca40459839427f317399736c20e17708334084b62385b91f59f44198c82b1bd9429692b24df1bb98f1912b94603aefb263ea5794ef8b71458047ef47a0911fef8e24a15a54a1cb3edf5d03d40294d53e32668839f31817985c2640d050d5fbf8dfc2b7aa9485c28cd44bcb62c95f77c3fbb44bdc6b87de15098f3b6895c79b535c9c18d04537bdc3b0617948012fd7725943ddef6151debf76d1ebfd993237491432c71b089aacb7b575d03252e2254d3eb633076068a8ac3475ad53cab7f1c4381d8c47320a551dc64c3b0f5a2f18a5fbd0413565c8c733c1ee7273ca82bc774a0913fe1b01ff2d1bc8058b7ba26634ae7ccf9e0bc63adea305c7e294c7fe6f5048dc0fe922a2049dffe9587fb02ca2d0fb7ae7a338f6c99267d59c6fb6b4c3bf8b50d1b0c0ad164f973e627339c0fa5dcb0bd99005bfdc5fdd223cd1c5965b48459e2aa1b25ee9e207a949f0275cc46dd9588512dd988264a552d40d99d86ef59754654a286238658571db464f182027a82f0d19592c50738fa2c25e0434bb2226fd943c227d6a04284515b55c33d751dfc9d620d8d95a1cbf05cc07288c82e414e443cec2d78d466ab528dbbf50507b015e1293538278867c74b28469a601e516280221a63ef275b20e5d339baeba8a281ab662a3f142a98966ed40ee82482105692be64d18d4acfb6b893faaf5b40bf8faf725887053980814f602c5866d094f2a2690e703f8b6abf0a638c90be0c82f621c28053ae05500b0b96bf80b30e90067018a20504c0e3706ead68a2878d5f414afbe90912f1864d143b41e603f3ec8c610645a5720e54485350a02c8064c3e7eb6f50d9495a56d49960bc08b1c1169da41dd6527fc31991516675513c38c79a24c709cd6b9acf9a4bb2f02135e4401397ce049204d1bd359c3fbb6624bfc072a168ac5109ade8ee8a9743755d8bae0c1a6f8120467b2aff3389d00d78359f12107aa1475d97253929041d2d89bc678b5a97088516e611b61cdda3ccc42efac5aa1c79125f1dd2310fe3755f907478969b5366e07b6d7fa466f8bad61f110eca237accd46df4c024d4946d3b25151ac8d9a82f2d5d6408bbe8ba1932726a496ae61a23cda546ce0a57bba509bcb6ea83a8e5336142d94823f4ef8cf231b0e60d0a94499e5e900662fc1b304199d9c47744b4d00456f627448f398d89113dcb4d841d51c90a360df797b08c9d7df4526c697bdfd19e70bb82869d9df8d866f015637cb77eb30c94372c62fb0c199b719f05874eddcb663c99baf27ad67045deec1ebae1295e4c3483e5df71434c0ef05503e537e76d4142565a168d719151bf773e5c5760bcb3046fac510508505bb2f362aaacef4bc5f5e410f3538d01af231e89136cafa5e88403e694a388ab471a49b2a543642a0d5ac039c5e26c5f4f7add1b3c34bbed6285ad150f3261e9f63bbcf29b7ebe1ef5388260f6780af0d46a7fd9116f5e8ec63e9974178764894fe885d58ce02adac9e44d40892e56d602f8189e43ac53e30a0f495cb88dff12bf4636411311a1fdec0de8eb60a1d6f74dcca54212f4efe05326099cf64c89452a4c6fb0a57ccd3ae54c5b4faaf468ae8b4c33f7a2816b7ff32dd27298f42933a527d9a8aa14a99bacf9f5fffca902031c94b57e907fb18eb7048b635a84530837f635b965be356ea2a40eaba4e81838ffd4eaa96f3ffb9ec142508ff01ea2ee4fa2e578171c59556c96f3b6630abb85fa41a748f891ff9cf0ad3968a6604d88c46d959bcd19b3ca79cef91e37cf746bfaa8a86d0193f3b80806ac86e5da6d6aa552c3660fd7c11a17c35b792d6fa2cbc9cef73af25e9b03824b3f4f56acf6fd812ec5b0c773cdd78652a7cfc628ac257dbee3028aea2b722348a69c1305625c65203aa7f875078bc4319075f49f0d512bac173cec0cac4b747e4a45fc7aef84e19773ec49fd3e4e6087680a4280f0fb936319d353cbaf0225039f41024310cd280197d3565056b98e57d6da8167ff15fb3299d92bdb27bb552de641e0932dba71a7ea9a9439f011cf26f4807992a4ab7edb909af0a570a855f838e0869aeae610b3d63c282b0ab6531252bcc20a0163fa91f8dac4f6a735724b486d8e1621eb5fe810be9760b786ed6179df8b9685c5af9e725caa42e509493d1536f7d68319233d9343c4c5d38099b5309468864c926b924d0a0811ec60167f28de787a013f43fe2667aa6d2f0e2955566ad77f194abbf64b8016e2b7d68843702d60e559d48ccd6cd4b7d4156b23d49a46ec9766d0c192c8fb213707d86b67ac7f78fff4b037d31b3779e2897ddbd014ab2eda37f7e94a64e5ebf6e151914be1f798b518d283e46b9163ca0897b5aa0a9b41141505675cd1fee5cb3057154374a40b99dc6cd4a93b8b5807f2ea0bfa1e7e98a4dd45fad17958f28ca942d6debe2ca0894a26840d982e5dd04797780bf1d949d869e080bc6530449f2572870575609f8ba6ce4a3e60ecaedb6b1fe1f3dd9a0fa586ba8bf89529a27847add1b33c408047a06967a97063e312f35dfd71aabfde01301862560d6a8e222ca38bc3ab9db8ef050974e7e8f05fb164dacbb0667706dc5bd2459dbcb7e068e20ecb1b8e76fa431cdd28030d1e7d15f0fc06f835e3d904938cc6fb702ef581be136237773120023a23835e991c57231480ed94e11691ed8538a89574aaf9a230b8ba68fdc40a863bee5f77e912f153b2328d8db4bac5fd48a51456a4d39f4458626ea13cc67b968e40d034c38941fb9b28b5ccae69008f1d7f68a7441be06eb12447fbd5692cd9bb3bb0930ed3bbb0e388761b40650230b21b3f922cb4cf1aa0d4035fa5cfc6fbf1f24fed294471dfa7dbd125b5a0c5108df9f8126b3922fe6167afd81b02f9640c9972ed261651f87453a619784f4a84f39035875ecbf72ad0e4c4f97b4b9f4ec05b7e9ec0da722891dfc7e520f30d328faaec330fea231e1082fcdf9d451997663249fcee0834c181a7e45300e48deb271f6c0c61b458fdcb722bc078aa4de0f6f5f43f8515f6a0e2a9afe9fc1e6885eec10853e0b0ff567d4d8b167bad9e539404bf26b78cb9a134d1a3c76773a2621eda1d18fa574bd6cc536b020035783431543d17728ba6446ec8dc8a7d63898bf1620605e99646873d0f12d3638bbe7063ad9326dc05b3dae4b4785daf0148a6382ee4e85dac9d5e261581078101d414f4627f8ef87de2f6a48d186dc87b52b68330c2d3f8a94a5cd2e6ff32ae727fd4ed0789ffd4051e455f43bc91a748c2ab3baded005bdd1292e8cdedf8b51f76ab31c4388a1837e0360c007afb5c6e1d8b782068f3bc37a26c790cdf38f986508665cc68bb3014fc5f378c0592de4ab1e74f81f41ae349589e0b89b9d74d7092d0eb4e1aed70e74d60177a89373e1d20c1b42d6b6a1d7905e331a5f7c23f77fe63790e18009704b034ff5c31215157ebfeec2d31a4bb3d4c3746505ca7e5d0c1dd1da3b5a3a1afce407e342625dc8e7decdff65c7fd538ec45ec5acb5aa6b49f0b90e15e109d603272df52a8c38c13b6bc4477814963eef463835977e8686d46ea7fafb4d246e6317e9cd5066db84924c7c48597b2c6f476b989ad4266524a9034dca60979b0ab4f9efb5f045a4368bcce9de9edb22263c85e89424b9c399e97f2386b23707dee4f23441598d19d4a680ca25f14e7e2755d79bd22f12311c41b30e93448863e7a59aeb21330454fc5da22eb0b403fe6b53a12f23f00d0e6ceb7419af06f777f442924d4b92829378a6987b87a55c5b2111e422379104c0660f327f1accbf0093b6b0bc2358cc6f4c3fc0221dd6acdd204fe379c34a8d270047fb0ed9e8e08d85daa1de2145e70ab1657f7005f74d1b77c4ee828b987f5f4c3f5b86087a8f2866acf2efee3894db927397307c737253b0a722f26ca0ae3cad804b07654867d9a0f0c2d8ad9c388612196bdf781185f366a3c59736d83f37752f72d89611bd2b5666fb28335bae99962b139649fc1a72bc498463a66d43be890f9821877107ba09e3cb09cee01cc0f1a552fdf7225be874239b93c920c25fbc776dd87b1c26d83922c191023aef56db8435cf24c4ac671649f1cf5fe852eb67f65f8b3c1ca96a17fa4e232b186df6fa62e9fa9f679f1d4414fca0601827820446caa3824996db542c9cdcefb1b1bd2f7ce05c8d7736c1f9c17dea82eb7392ccd544670307e5d6c68bf6888a958821afc2d8d18395fad7167c7b559e04fd76ffced3b0379b3ab00174e5959bcb639961169320a6dc85304e86892066ea31d26c6149dc95f795b8dba43f45ab87f4cee12aa6cd1e159c15d2dde2e0c9c37f7af66f9a5e5e1849bb432b8e25379778377399cd9de35479793d07e0b08c0ecb5d485d60bc85244b87ada456573f61fdf4a8f1168fd25ad1abbb3eca734aab5fd0fad71f93edc4b61ff95702978af2eb98bd8ffe350e080afcd20f443a2aeb730f448820d3c424a1000415feb2ef941964f1b1a635bc0011aacf3bfa980fcd82059dcaad6181bc18e665a15fa5f28c667ab55e730ba3439be6d69b9dfc777faff4aedaf6695c0d0547d43bb4d6688e21d8fedf2c7a1a4334c0ab3feb793cb14037bc8b6b891061fb64737d10e543fba235b63a90d9b9086e8094fe3f2857e0f47caf019ff02eab92ef1b7d9c81076f75ee915ac888cae3a47707665cb9a01697aa2491e92aab03641bc766a155320e6854798df1aa4e2acbe3df65b995da4d4d61630a132cbf2e9d459cab25580eb0202f95c55f0c5cba1d3c7d3edd94d63bf5af4149162cc3dc7a4606ba958f17f582412dfa2d0c4fff48a31b705f662a5d8b1321fb912168d2af68bfcfff142c799a77740176cfb0944eea960b5dde8b5c237dea486b259b78db74f568e80b643116e9f5ecff25bd165b35f9cedf9b7cab3bf2857441a2aa3ce19ff2acc2643781a1513a30a7e4c774f89cc8fb5ee2a8a4c30e7cb503e76473efd35bbf1fca11e42069a136c9e67564a2c6b95521e4ec4a1dca5be40502eceb551aedb70f7bfec72da686b1bb42a05b2156ed221ba7b5f8a5db2fc2fab5fcdcb2e60bd15c1c7cb25cd10bed969d30a84146ad349b5d7496c4370add2714f33709cff31d09bf1424348d673a6db6ce39b03814ec7dd40b5ed919ff3d0cbc2e3fc255fd7dff1315460d12a1c8ce9c53e3b1d95e1ceb0beb1d80584c32c42e207b7d3cc55f35b9c5bd45e965d452a203af20b879a250b08fac451460aee03bc137ababbbbe9f291e9fe0379894da4c573168726782174b4dca257798cffec0f813196be8b294fe84a8889e8c3c54ce77f8c763285e2e61856058a0a92e49a82f49135b538d5b27daf50664a0e11bd3548df0b83e2dc0629beb660612bbbdee4da4242321093dfbc5592d754e64666ec4368d2ea6782ebdccb49db9b239642ed03abc855da0e82a9d128bc872544356179188e19068fda06657b6473baf3eadf0891169a6fa21a79c2568f295c7b2eda3b709f92a2e71a4ca4b62fd46d4fa560a32b2f0da1048ad740f31e2a43c02413b84a7ecb95517c52a2edb002baef3bf2bb27fa26606c0aa44f48081e1cb68481b063113b0c638ccf449e9ec6ef36c03ab6524bb5ac48d67ed362e22af21f0e8b600f0b1fddccd39b8518ce9665d869818658437beed79e937bc4ad8496c2f47b2cd7481ad812eb6d4723afa30654aa56eca307af95d413494fcd28d8a99b00bcc96078b22c1571bb213c1a69046edb923135edc7b091b7ed1811567893b1da9a8b5cb91dd7bed3baac9d446fb175b8381462d4235f4fb697dfdf792c68660436c360e2b9b9a3ff62573bddf6df1b52fc6a873f0a6db213f4797395d660bb98d07e571801f2e0c6730fb3185c4e9115ce961c463a4e118c37f8b920301a1847fbb89c48a5d603e800163d79d3197ee9d099ee704410ebb9b5cb8bf1a9e14c23ed07db5ee3f0ad349e3c4f2bf153dee38a98ad57b327b309be291e8608bb285fe5408ed210330f0a49e8cd0c7ac93d0701fb863b4dc5330d78aea36ebf693fde74a5b841cc7712ca838f7080175c18ea46645f5bdca8558ada75700dbc995af50bc98d8141b0abf66daf8f1fb0ff4c0906aabdfdf80f02bf37369f31b15601aa5b0d2a90a43c94839b084c8a483e5ed8283ef3883980b1643c1b6f94a5892743282a50116f887db7ace65c5efac01dbb6d1a995af63d6dd15d17bccb8fe7b5e483cb90cea62eb70e866cfa12305372ad8ba9e9f1d000344919da60e4cc9ef5c7c7938a7b69fb04999bafbdfa37d3ef1a416a1a3cc7eac02b4d272fb7fe03467a8a8a3e4aacc66d905626d67b7e8f2c5d62de353a3e7b4feed2c0418d8b6b45f92f8583f6c3c59d82f5594eafa1f1800585d962e42877bf35c0e7df98332664bc275f94b7967f0e705822b05dd40085004dfddf9b8742a268a6d72e4dbe2d0bd38eaafe0f921b58d84f8dccd92e16110d0378da430b9c67934fb8c1c39419a454f39fb4c2691b7998d0ef6e0151114afe982d00f46cd5f64b42018f0790dd9a87fd94c821a06f2dbb122cb1c269e242ad9e3c522d5f7e7c22df3ef0f4064550d85cbe14117cd5f14c2d18d6a61dc5af33d9afc015b83f2e842b7334888b1c207bc7f411814d2941ad6b2a2d14fc7ddc9b707f04a82fb6cef7f8260433e1482158136e1de5f3c1f4aefcfb2585ecb7f77b0ee81f230a4675b7a94fecac7f8961300048d5451781c9a312ccd46a576294bcee147ad6a93a2a20e28e98261b71183fb0d22ab5dd5b5a9c31d3c3d96ce726f2464a0704415885ad034a68941213169a1835f8216bf87a3d461198e67a61a47630634d4b4cc03ed1f2180b573f2ab231bfb98ded45b6d074b5f8ffb3694ed65aae173ef853967d93d457117a41008f7c13322403931f7d46a6ddc2994b162548c7494c285b75f39615f6cb37ed3ae9950c5f1c810cc1d4d42b0f4624217b5ecde005c370df8a85a634f46405d70ad4ab2cfc20fee36bc915cf1e3f6b759f3452c27b964dc044a7974283f17444648c259a0681b15215b9ed43f2547fdffbcb5971ee3002cacd33bd5064171bc481314ab12c1dab3280c88a7350087e26988aec937096643a5e56ec9a53565262654c3dc72cae7e51d9aa88c34b109e8d42bbb37a9ab34a66f2c42475689f628a0f88d1502a8e0dd4c126cf90b10aed9f65923de49bbdda2be2986a8fc7489137f69daa7f12a66624e25f057719a700e3efd359768baa805369ec2014423bdc986eb539e3693f648f9dfd5e3b7f0a2777def72cb1c945895ac2cd964727f8e4625df7d199288c4b381216647f5b32e18370032aa1d93a465944ae5dc3924457e5992cb74f797e6a6d6f7d4bb0aa76aeb01c57e9fe90ca283a3461da8834656218a6ed3f9e94b92da59bfb71f5960543f6e24d8e5d8e10686307f9a54d976cc4d434a4cf540beb4e82eb7207312d1be10609deaca75a745c9cf74564dee1aa7906f58f9c97af9a46d690ec1b2fddbd084cb0063cf8f1851dfe96a72c0b2930ecb6b0bc41a798f7a19adbe837c3b65c740cfcdab48c2acc1a0cc9cbcaf08a24cc018fac6d7c52eef3d4ef78110368fda8b959503fb5946f3a81b68a87c76b13a933bd8ed678d1d9cfe78507e58ad407177e31b750d67b6e7fa7cfa856bec1d9c255e584cb5d2fa2734413a292337ab5e1d0ca140884df6ce88cad283385f3cbe7c2065c058af6d4700dc94b86134c4837827b3c2c749e68f2f9eba4e478e1d3a9304b7643a7cdf7f6a99e24a361ca0f33a27e7eb52941836e6269c0da14caa6765898cdf438a80d49be976894f7fa03bc72c4a710c6f475b1a454c28dd464e78a1f0b1098b958ddfadef4c7cd07b640c8980e92d8323c87a3933eed9bd08ad05749b499e76aaeacbd47d0699aee142da07918c710520695335d4ecc39b42cb9ad1c705c8b633fea5d8c09ff7cd5a51eb6c128e19abaa782783604d82a805a7731fd157a8c5f1989b418a80c85120ab48b8353ff5651e2b7e0998fa4557465f33c00bfe03b34575ff5330a5b6e7da3cc7e26967026df4cc181363b501408c27390ef849e6d43aa3cb01f1395c09d74459021c1ddde76a3eea63c563c1ce69c482aeada84906cb08ce1947390d0665c0be36eb93ad2e694bdf73b4e3ea2e14d42a433432186024d45d338c78466676afbef89f3687f598f0dd0bf6bebb8a90527d3fc5fca51a206156cb6b78ae80a32e88307e9cf4fd023dbe7a12c4e9f849513ecf82fac09dd6051d2837d10f3ad44fbfc1d576bfad2f6d3a1be256f241c6bc41d975751586550ff9921509ef5277015462423ee7b4ae90d7b9e4fe3336c5efc05cce9858c9d2813d0d0f5fdcaf9092bb37221ea59514597dc26d3cec892eb56b1bb15f1162f88f2198369ac1fb854aa7dd3f2c3b48e926038efeac7123dd17becf90a5747510390ee3426cf59420c966dc67229fc3b77b1b6d3da072060de31849e5cd9593f79326c2e3ab2571083194be194a5933232af687b51294076684cf810f02e1389dc62add7ee950b1355e5e872f0472e6b8ed321316d7ca29dc832c9dfc4d420cf531f7d8f59796e3f2844fe2380b7743181ec80e2510e98bc5da49ea9f71a7a0d6d5a0c09536e9832431e5a06c7255854389b2101476008a323882917f484be00ea4c4313e97f9933ba0cd38af9b8120e2a95238f742bf914eee0bb9a80aa5442505e51bc91fecec09d09cc4a793dc20fa38c2eee19ea1a3e0b55e5eb2021e6d022e9e6fae0df0bbe62d7f2b3758458fd2cb86d5b4c4d6a3f5bc92c282367e63da142b19b1cedf64ee540af0d776a875ea2045cd10b6db192ec581f3597419fafc18564f6747c64bef4a246f31af28bcfcfe27819d24c253f08cf62009fbf4efb3150383b7e0baef575bd6c66cc7a8a1b84ca407a80354167c322f7699126e7a996ef2f695db6a512686c88dfc15506c57db2294c7219c0b9652a3ab845bf9790902e5f5ff2274f04d5dfc0d9aea02724bdc36d1dc7bc7ce0a6b47b749879b56f71d7ca5e27b5aca3e3dade56ce6deb5555bbcf950fa971b9682ba6e55b942feb1005db42ad4ee3ef2cf068da224960025c3c174aae020f265025248df01ede361491832befa6e4e188a9eae7b7bd3a800e2cc50411f6fc87011b92c65aa356f14ba9364f5092fa35f35b41d0d4beacb1580461c8742cc5f8fc47c45ce0751533fd097746c4dff9cd30c4f8cde83c9905e60ed059c93bea79f87d06a9371eb8970524a3323e4ffb14c782ae8b6636682a9fc6584eb801600342c036628eceb0d2d91ef6f0cf624b91814fad6ce772285a1183fc10710cb630fa93f461c79f810a27e57b678e4c60cc2c932f7d8309776712e1012b6ee5ae1ab645106cde7329282d501c85cae66ca58579077591e9bfd22ed9f073b6f8a9c0dc6e497adf625d15582989e3299b760b492c80d5c22b9f08fb3f6dd17e1f22d50e5dbdb4a3d25115e6e351183706b41df6025256a0190f3f2129f25dbc4a6dff02d9c820e37a09b571437a0d390bfbe8f3b266822c78fa406675b8db0a719c31f1eba1dee94369e8a4fa1e83697cfe3cfe8616643f8dc1d3a4bb6092c09c0f3d12ce41b1126599d3ee624b9399d97e9d3f55c2c54c37fd6ef66da48092e1b1621f620dd03387dac26ac49baf766070c9745f6044e052df2a84cfffb5ca04974a3ad357561f4353d779976b77669174f4d55bf838ab816a1a3f50e414cfe373e6dd8433f1bf0e630c1d0156ffcf71bb70fe8e7e20775f9f57958bc04ee4fa65be3deefe495a39fd869819ed08232a0c4d000ce172e084e0704e2b3305065914123e355c969ac5437c5140b52b2ff0110ce37716a755a8d57087a0db821d2868a6f5b7acf4a468bc22b21b1376519ba6d3c4b00b4e52419446021d4d78fe86408ac4f65af30f488da55aab6ff9670b90935d63b20f39b6172627d3f1e708e14cc928cfac07ae03cf968762f8f07efc4e7afe4631ccdc499e6e2ea506088c8a9d7a87e14d27b3a74975e731f674cc1039b5b3091344a7d266182c0dd027cadd3e8dc2d20e86d857f541b25670caf6bb388d32c5a2f09b72818c0412aef75ef84584ced7e2dc7bc25a3994443ff20928b049f9c7a402cb09aa63d55dbbda335fdc35ceeb22e4d0fa114dba4de5c840de47cfe6f98d0118e9bf0168a4a3aa7814687e205bef4655d35aa3fb7d3090a693f34720c40cbe069a537985a6c011575eafbaab8d19e4e98832481d3ef50f04fdcb2f16701522aff412d208bc1e5b9ec3548bb6d0172882eef5a956aaba6815b1bf769a446b80b6ad79573135fb9409762450b439227ab987225da48e92a676c1235d25331e8cb62d6238e3aeb91fabeca8fa40999f0ffefa4e9c53807efb33269ddfb0ad694b8f1484d1ebcbcb1925300c3e1fcd71e6a695afa75d66ca070feaa7ca357b032abcec221155bb4d1407023a869d4a46742a0ebd4b934b1b99effb2a27d072d5fbae2f1d09bd978bfe0741e165bcc7dc4ccd1a62dda7fc1d3eaf7a70c37e747bbb9638004e647b999e5bc3ad9ef9fbfebb631847971cc5cacd11200e6bf5f6027ca8c2fa3e319b6cabdc5cef0a56ea6ef1ad8a6d39e3b740ed6eadcb1a773467ac58c4c8f3543b96854373ada5239a318876b07e1a7ac5c1cc36bcad036b8c6af51314cb346a794086db40411d33329414a21574260cd46f86b08b18ccea6547c43cf10da41f8818de7af63763f063d860f105c73b1cc2d7faaa4c40b8274e564edcb80c0e20e13719703da201140a3212df25588585f959037a1178c37c75a4eeb5efcb96783235b29098cabaa93bd3ef1b10f0e060a0f0ce866bd7772fe6cdc343c56165b3546b4bc647bc7644472fc183d500ca394c3e910c55c18b4645d818e67de4f67ea7f1c5ad42e06f74819957f977f4604d124fe23063707f7a5be0aafba22f96bd408afe4490355bba03a65a653c6804e3e9518ec639c63fa418dcc157d4b88bac7969ec72385bc2c370e8b7e46646256583341f628e162db99ed11c4f7a379b503dc76c46205657464ce283aedb02308792591f4cf788a0ade4c536ded81be5ce79573667e050af9344c2d142d0ed56a25c3b726cd7cbd9ac5c5c2059e79cc0babdc57cdb9e31a54d2da1adcb73b02c63c74352edbdfe59ebd9cf7d31b4dfd2e9a13caffff25fb9ab8d39ec51b4774d4f1e60b8e8abb598ca5822ac242677adefff116c395fcae430220a0e74dc737c09899f1edc4df3886da7f27f0c95c9f9b17ffe794b07875af1e4517f4e6792a56a8f8ca3ed32238caca389d619d45e3b88f84f09563469138fdbd7cd7a7c8f3f25be1fd7df250d0746899b5cc178c3d2bc3fc92dc034cba0697df507e61dae6b659e604405caf3ba3daad7692280bb78ba3be12af4f3bd9eed36e87df57220f85bfabd7cc0cfaaae68ec2cfcf70f8ef2c5142c3b3f42534912c2304492acdc4c9037a809204766fd7e824aaf17e4800aac165a87fb4c93522c2f49932edfbc15d0f9f8cd6870dc81c39c69b284e9a056f5785289496b4750c7b005b5f474551bac952ff289bfa44a15a40ed89c3ce68fa1b40da789cdc384c6786b5fc8a828fff202b40d07ea700b3e189b2fd38a57e77dc16d2926c6ac4a0dbf1335da341925ddbffe9f2284c90bd08fcb63c7087d201ef6e6c7eb1e17863edfc51b887adecefbe11421975fe847879fe60ea8b83d5b54da37a7e2488f66e049e51d1139e7e25753745be1ad2bcd288c15c1b90fe8ecb496a51beb0a34004fdeb1504a9320163e8d31b3b81b0dc63be382b6a69705e070ba572d48d6f0e40fb81fef7e70629da9e20e1f9b124a6767784e82476add814cd6603b682baf785cacc7f6872fffe143e6382ff120af6ffd152d22ebdee3b177ab3206afc54359fc7f63fdeaa05c1f9fefb1799726d11ee5fec854b5949a01c41f25488d00fe3ce0693977e5bb42ed21e79104223470350bcd67c0aa5699d28677853557ee5b527ab5bc57aab7a98a14793a75d34a8aa806ad8226c8d7c9162490686c7103db80a730c81402f9e48142ee3aaf012f6fc7417aceea0ccfb49480f8480c55fc0a5929ae70d74ef7e1f33974e9354ad58fff68ae5cec233639d30e8d1a804510a8ca16f7229d3171f6173b85cb73718b32dd85e5095f0218101f53f7466e866eaca436853f17303df224a147bda901bcbc4b38fc7daec168fd89ca608bca91573a31f608432f9e0afe04b0e499f23cd96f1f53ced0c72692b088dce0531b39fbb84f9ce30e059d1c75836022bcc17a59d0e93c54695c3035de77952b1f7bdfa104f9d9cf38299aa7e6b226c9e613eeb0bd0794b8afff4ef70671bd5faddced6162a5a85677492d930005cf191df15b80798bfcd0dfb94ee2fb54229289d7a6e4c73acf76cdc32d284a2f3c07e1232042c76e72d49a5b7ae8898e709b5c80f3f82c65f565cf2f1cd35bee7e365554279ec68b3111929e825dbdd5b75fe6978bfe23b46bce9cab14dd5a6ba936613cbe13ec8f189d0b779d51b25e5ef5bcde3f93f9c7ad598868f8ec4cade4e0793b87fd22c841ee095dd5f6b7c777d57c33f700bcd7e2dbd694a61fed521bf40fddfa66d3217399007f286f998ddc2b986fd98461061a30ef0bbf2ad7bff42f9f228fb83919eb938f31f59191c70669739e8efef26b333314a1e97ea2be8fb0726876c6865f74e55222d22f8a29a8256ece4d01a09d7348c35d5653235ab7f3ced6dc6875329712dbe9767e420030bf8383f0c6969c37de4c536cf28774d683d128a4cf7759d52494a8fec896802f99a1509c64e973b8eb9ac570e95d38a75a534cb22e1eaa1dcccf6f8a90897fa12b88590377eafcc7a2e596c6636e7e71f1260b48d0dcb529fb41ba7baeb9261b54dfba513f34e42773af6f46e728ea6b7aaf746b086bdd70e72980b7e561827183e3ff24029e9010f02775321f6ddc5982ca42d92d45f31ac07a49b6fb87d3d33a471eba8102a6a433ca5ba7fdde57d1b29661edde8070d0da1cf8e071fb4d6a378f6fbad09afe328dcfc36b7200a56546b5e2fa15ded5ad682b4922237f0e3eaaefad0be7cdb69e4fb9005196450a9bb3c899d845179903e96db1970d34f8d7dea48747ee784ae9f54292e0d8fdcf205e8ebcd84c0e8b4d0bea3057d0c78b1a4f0cbf5001282bfecec3b024e19ba2f02cf7c668068297bb0d1a1d9b2fe7495b4520775b4f76803307de3d2dbd8f5070d6ef02cb72646fafefbf87d62d9c3e178f27f647ae0fe12abcc21166240106f3b9e528c69dafbc033d1f3caf08d17aa3bab6733bba1c43836d80a6a0e697ff6b5ffc4276ec4ad3816d3cb612999c97b5eba5849d5b276a8d9d64345fe02647f0136df8bf25b1197af1e27eae349ab6e74d1cdd472664c3f4c74cbd4b6d03a3f7e418da746178dd8db86f8a05ddd2f96caf35a25858c160203dae19d891861bfc7ce18776eebdd8552b70b45b10ff8ff88e037e3de71d9762320d91f92c0241d3bb36a22b21bf888ad516ad0962056308d24e8b85ed05db11c54d7233ffabbeb7718dff0e5d74db872a47498918e1205f617c8a7318613ea6624f5830668f7ed112967d671ba3b177fb1d2d2c0ac34547b4f9313c95bdb0bfa6badb096b34ff45a01f4bd52a6dc187b914c09c2f1471956366f64324ae1d8ed4a12d1bb0b426090c11de0f7cdcd4c3204652e3074520bcb40a2c7534b853ff1d80c210ada224175d96b70ebe69c1eb1405b56dd609291ee5780e5f2639470fccf18e0f1737781a5fa5915fc82d94ef7f713ffa1700d5611d35e988c63af578b355d8828b056954885fa9587509c34ff69a0bbfa3319026ef88351410a90e93975c59e1b3aad76c73f43034498c38457cf871b95636488a4750938a05e6da3adc4e22268bc4dded189982d3de1e80715eab76dd12b273e210e8920ed332683b0d303b3c4df479f1c7501fb88f7ef701a8205249d3ebb232226e616f24f534fcd3f6efa3fb25636362705e1620faaa8898e3022d221483bbecda76a34ca27b944508d4e25e4621c58d49d28fe2588810a737895943b75758fe013c76dd8259b0b71c34bc3a109fbe105714923639bca991bd1620e9fa28bfa1fc0bca30c9bcb71ad6a811e8511bdd019a4e46d48fd90c18d7eac5cf0db121fc2b403059aecae7452cd0aab7064773fe714b5e3db410678c8928f57c5d51bda370af7bf8b363eefe6da148ceb2840662266a59c08d66c447c8a7ce379eefe44afd013ba51754f1ae52537af12b7d637e518a1c433251db2e2b3e62dd6a1d091deea79088813b07d9bb9dcf1a11edf5a1b196d277a7d35ccdac6ae1adbda12fb6477c537b5fce099f01f1b836afe2081609826da65c1982ef1fd02a78ab4da7d2b93e4bce7bdc9287fe4d82cf4716904e81691701dcb17517d2cffd968948c4537d29d004e6ec39497f94e9b6472b0cba4d4457a310d8f4f787fce032f2328aeee67f7a80f03d8707221e984bca83c96f4321e9860a253516d07ab793a83f92248a7b70fc7889bcfd5cd0b25e0e0caff444f63fe1ab16ee2e176093cab989343347bd0e4d98135c533a414d03ecd3a97686a08c76ea96b36af278d472dbc78d44e793a6dfad695ea679e5a188b26dbfac890f3f718aa7dbd12c3fc69a5f81041d8d0b3c4d420d3eab31cdc19a48a7feeaffdff1cf2303d4aebff6b161e69b3f84511af7fb686929ebcfc979a269f68c64c5443e60ad01bbfd3771163e1e013ba18e7459fea67102fe2df81c321c576a182b4c14c7ef9a7cec818274c62f3679147b039b74168d54f6966633aecc1e2e5ab18f2289f43033a8ec8dfb7cf21bbbbd4acbc62a577e18489bfb711b00196378d9338a83921a4e019a944d061e170c6a2e6dba340f77cf4f7aceb7b7a9549a8654a7b2a45f963982f856d2e43d110c115796ca745a67bc015783e0c79b170c53e06bfef8252081c7c8c963f583421c7087e0b47908aac56befb97c894181d689a2f48468e85cfb5ad9c232866a4a6dea41f6292dce835d27ccd5b6cf5fd239f61512a81acd24dc96429200158d5b0a30ebc1ee564c6ab8e665eff4fe047f62891ecc650d27f9ff61ecc1432ed927cf75a989915aa1584fd5946253318c75b3ce0a4bad69f2f197a3112c0df3126a8d942643a644c7ad4f94a4a11391b1f93a59bcf64f4832279a9ebed406ea9159b85bfc75caee8a078127daf0f86c68025c6176932beabc84b6a92553fd4435f874d5a6d64cbf9995bc6574680e97534521f147fc97c3b815e03de7ec377b428018e18aae66563fd4f753d581f6974a63932ea7fcd974927cd90a0ee5c6d2e2de015f736a469f59b40307e5a2649b58ce2a0041520502014e7972dfeae94199ec2f8719c231f28d3cc27863dddfdc0271e1222c90c15067c03bd473604d44866244fcae51c28174458119245b04c0bb3728a0edc6aa34b4823bc86533d087484b40f6aff18eca32352d3d4aaa1974d471e81ffa3962b6a03d61f9f130348b31a125449d73fdd36855d19839ac83e29a8d689633a195365f7e4ef68d729665cf53555d5c809a0cdbaaf66ca59f7833f8d8f35033d08812617075171dc885fe9c9f5f27346402b864cb13366183dd3969e696406767e1d0045cc39e3da6240c8c8d3cfd871985659c82c5890ca18ae161ef5d95d7c60000cc0c22966ef672f1d2b364dc5fd7a408adf193e00d94cb2eb3823cf9b01b2b36bc0b20b0fea4313e14a7a80e161fed53c7f07210656da72b074f8702bf36395f456b84ce29d5d2f3787e7eeff979b416f8cc5cebeea914ebc492abad14cbc886e5f43a8a0056280be8bdfb83cf733cb8776c1515c9c8fbf7f35cc669b338f79349da420117bf59102cccf2a4af2ac843d5c71e96bac9d78f8c845215194a5ed7d70d93573c71117fbd633467205ee56abb06d750b9168c9abf91ef8faf529606e6a90ac1447aaa4363f70d807414727656721a039c73d20741802871390f040a19c880a07e0166664e492f1e377168b55b0a4db603b887f66b7c0a36a1d86bc98cc107bfeef6860be08d87c457205f777cc5006848fd4f4ad7756d31eb825d3bc9ef9126ff90b9d209f24de318dfac859f98a840ad621840beca847f050500a0c5890baf0fb2734116f67277fc887c875670e0c7e0dff30a85d8243aa9e4784ef188e8d514c680ab752c142b36b176c76b689ad6ad56b6c8aee5317dcddb67582ed5ef7df6437e6edbf92b589af698bd43fd51b269fe931c4b4b4edf5c0906868f76037c5e37d5d9166dc82664d437ff9087bcce0b966d2562ce3b5a204367466d8028ec37758edae68f547ab6fc7f7842c9d6874bd2898abba309a567403f60cb0b75249786762545faceb8a0799b43c53059378f2bded9604adf243e4bd55a4674d50dff991c886f8327568c4be5f9609a88f8ec5b635e1dbc586b184838b345cb63bdd00da98027bc29f354a508795d586264360dc968d46056ee88e6ff054b5e50902fe0ae6e3216f5bda226e860e72ba640a1c55e141880732bf0adf4850a7be22b053ede0169f4f4525995b339120741f185ab8a4c6ea80566119359245fd3ded6b26e064665bcf1ebdb48156bac9f652430f405f89cbf9ebba19a78dff81fef26fa848aea3b33e37140d38202a874b60b409ed823a9b85d757a09ba8fc832dd5ab41b7174f627e916257e02586f9c29e389a6dff53e952f784ffb86d1da26114c0ebd2259722dfd6940d2ca42e4bf6e2b215d96dd3a33e2f885c71ba34753e4d88402caf9d347eecef98335204817303303485bb0c69ff58727efae2a048335910cd067228fa622bb35944cb8c7792fbafda21e4b3d3d7666b8e471ad08ff4f5b1117fc8c0fa138ef4920066b1edee2e83e67fc86e155127dad8f38fd702ec9a92391bcae96f5f19e5e31ebbc095efa99c250dcd0b052261bcfc11283ef13238f129ce02cd86257e25403a2cb15d56e7402a1f0ff40a3cd982079f6b1aa7f85ab5f10faedb0ef5bfb6cef3a7e2febc51ab24c1ebc113610984075710506f83c41e804247cf49045eb4f71af344208f9d6dd320c819a4a87b1a9aebb717c6ee8b36f0f1c325af8714615777c90cbba06ead35331ca4d5cbba06050832387e051ba782209c5fade1c366dc574c028d7cd7ec85677d46a6e8da612b1371c7acc45ec340c66c0dd74a0c7c62a805a19ae4dd949aed3f859e11d1d9eaf5c4452ec35855cb3621c8150442c6dd22b7c8e3fb7c88495fd959d19f0ec97b1fd5bea1bbdfcf6f67ece345ec3d53ec9e206b1ea989f37003c1fe06ccbf348630b583aa065e63a3ce7b651b22b98a2cb6f869cc6ee301f7b26a4b349d5f4e632ee0b83b4d410c1d31ad3306512731ca9cad89c8ae8cad2e3098fe31fda061f71350beab79eefb0b5c5a003ea39dbdc28ff167cc50c03d2bf98a2f61e333ae7b2ce0b64581ffe2e9f91f5ccfaca3600a298bad56a98b10705ebbf869bb67933a9a160c425af8e67cc9bd7dd92ec3e37ee5bb92b3e3088eb5b32b2e8d9db236f6f36544dd077089a128cdf9a06db50a802b8307f2fedbf64e90b454ceda64403db7c6ed7f00bc624d50ee8f5e9634750653b6f81f5df8b1ee53abecacb70a357a977b07ee60a21848e2e3fdb3c19f1fd5b634e5d88c6704f5bbfc334b83c50402895ca819ae61bd4f10b111ba70837b18a480ce5cf2d0d1e9e462000cf0e8abae565276b13a6ef9f043868f6dd188721612835fe37d4e22ced22a953106145a314390879fbfd4e6bd8d0ce4d81ed36ef7382408e939cfbbb90f5cf7217a43e348e3c7aa288e92dc2b79876a2df61b6647b82183c3e77bf397a8f62d78cb9236837f8a2a1ba9e82dfb2eb9431cd8d6a83e999175323bbb14c92e6205edd32f78be4800e5a0e7fa75e7a2671cd4353ff4057453b3bad6ef3be4aefe443480cdb895311d95a8ac50064fc342793171249292b01949e634789068a133e692436f7b900471fb1ecb1251baf14ee1611008eff31064d385b12bdfcfd952115290327698eadd4a4d673d82c2c7e2db24b114f600f2a1cc272f6b369233f9cf3f8ad37fb098dcedbc7b971eb0b3a1e3c7b669db216186a5336d0b339dfb4b532cbfeec3ca87498a0bf30e63d7a9fb7cab99f74ccc6bb53dbc234b8fd88095442e1d6ad8f0a62b72e1e99745df76efaf8d58af1fec79f48e9797ac68a46797f08041bb4d1a8ee3ab82bbd233730390e8912dc43fbe7d5ed43a38ec12510cd48e53371fd1fcc383250803b836399d951bddb0b125ccf6a1616a61a740f96ab1d875422f4bba046a9d209a64f171b34fdb87d2a5f258ca01d6cf0f3b02b819edc734f46a75219abb22b04bb5b6e6c7a1460dca4862c96f4f206ccfe2cd76fa81027b49836f16f6de2ff282a4d92751b8cbc1e98cb91113563cef18b0a333510c5dd051a15930a0b004a2be52eb64549c5a73462047b50ea34befd064d117a47d2efe1b59f31569d1823d6af8519972e79e80f1dbbae1df69b7b441fa17ade0c59d1028560508ee02237bff3519d097549ec9045d552f59cbadf6ad57ff959da97e612b9e57b6ddcfd0656b3dff76220bbd3a51dc9bf72ba5412a2b187c24cc909eb33e8f296ddb4950465ff51a86d0da642b32d6e4dd19b3dd9b77c77f16fd963037757f84f880334179b8f64f8426f6dd75a6880b44429b26e3dea865bbd0d47f5ef27a80fb132995aa105ae0fe5204e4e6e93d88dfa37652474fc17310dcd9caebb185b38ef52c7167d972ffe6eb08baa074cf387aa0c0f0690890fad953a40e5f776315b87da9879bb3b905a6f50da18bfefd49945aca988917ae6e026026ef91e935946ec90ed0510c7a0af465dee76347e5fbac795b1a66477c671ed4d4c0bc15a3e9440e8b12c985bf18f853eb4981d23f1260db8e0a40483ecbfcd203b3a8cedca4ea928498840c418573db977f7be4c30d910cdd91a57e3ba116247115a7cf40bf47773243b44f29aa7bd2088a66a004fc33a7fdcdd54f9e3568697a697486d1c0b618264563128b9d7ca169b0587a9cb4e182edda94e331c42fc9568567e8621ee071e5e5ed6c432cb13f924d2db2406591527287e5022b8716c2bac0d767311777c19b01a53bb90ca85d13d15223b78b1dcfece8a02ce6a37ffdb76852fc1174d6173c20a4c14f61abbb932e0dd1e0632c6e14d628429cdd63c904144bc11a527adec3a1c7dcc56dc2b3d895e1e9770b5a8b6352df7b715406e4caf55411734d5da7d13f4c58136271507fb3a2822d91c2278611d0c33ca1e0be8bb0756323a0140990ac14a12caa1000fa62432c58c408b15c41ca68118fc09df7d16120182a9492fd7192ab855d611a846791b449df16be4c290a577ad6c6a94ca0d443ea89507965d2512f6ac5f35854c0b5a07e54de7e36bb04ab0c38e5e866e2c4bfa9b8f1edb42065074ec46f6e3a7a886b8a72b56e79fa83c76c010acf5d7f50ee1acad95e3a4c977d460f6d26cc4d72f5a909ecd5fbf3bcde3e22c784828135380b507b0487311d371dc4fbd75f59eb18aaa4c3d65ebdca1159cce9a507cbdc25af10fc5c40303aafd354a401ae71ca0dd6d9a581b71ce6cfdf01685077337f80fdec5d5fbfed825a9c82c258acc448139caa056b40a33a9a15cd82f5efd5d9049380109f08debc43b1aa2873ac7d585120d20ab7d567b2713342afb7a492648dffcc049ff82a6882764f9ffbedffc3c3c7ddcfa195e79fc20da63462e42ef1fb822a8d6d480d33699460e8ed20974001e6db8af81ab22af7bf83bd261731dfd6237c22563f824595867543a3f8c8bb8233364323be292565e4912cd6bc73b50cdbcd0988f9e24520d5684bd54cf7ca440ad57f21adccbc65a89122978746e1aff2b2c5d8a07f323ecbf2d5614ee2f8aca46b2d20f93fe0b14b66e972022d2ce00a0a315c33cec1979aafc7d4cc69fe0c2733d9abcdc051b2c5e666b55587a333318d7c9159fdea04c7cf260696ca25ac21d11a3c6cb151beededbdc2295a6c0a1337f7b6d4d302bc906c664bc8ff612227bdc806a4d3d5ee0e5c738cbffe1a4245a556a0e3beb5eb74d8f32347d4f70ec211b0264dde4b1efca2bde05c729a7e620675b178ef1908c98a5ce195d0512d667aad8128133086be51c7f8f52780c696ddbfdccdf26c9e4dc235d28d0891f61ab3a35b92744231914a883a553ff02b4897ea6713286184dac7dca77d91865fffce3fbccfc22d7ff112d6af3750c7f47e096aef3caab53152efe72fd496fe322118814a59bdc180e4734185e5e94ed78cdde6b87a6edf015f35929ffc80e53656d3fcd39c927712f2df2cd525bed9d4f9b19ef7f14e422210fe23b99064f1d5ed8d7e0ece992b09ecf93b0e3712d22b309720cf72a740cbe39f7e00edbacada8074d4749a8713060cd2fab0daaca30be41f2bbbc225758b435603c448454dbaab420ad770353a50340f07bca0f6a085a201c3c39664063d315cb898f0e5c6e53d597320516b667fdb7a334769d7ddf7fb0420138d69430a3c4e256f748d9f1266c510db2ea4cbc66762abd310c396ec7bf6ddaaeb07da5e467d06ad1c500ae913bc7e7fe17f92a98cd96ab7efd91288a4ab0dfa630baf3d4df200bc1f1936095f793ea8623499ab61e3a8eccc747385d2efa56c6e3fa0328bda72021bbc9f84e2e813b0a250952ee53ed2d234fb64d0af6cef04d408caae73a72b767ea668754e8a92fc479bcd0a9222b452aa793f8873d6691210307f6077232288ddb6d0fc6ac4af73de3343e83b44f7ba2137e4412f907bf90b56dd81e313592cfe58b9492bb4d1666d4f0fdb03aa3bbb28cd20e774c49044dd99f7904f4799c7a26d35d825a8f80c7bbc64889a2087b66f1abd69e0ef94512e69a3d0457137c781b52215bfb6e33c3558c3b7ab14a4d565cf05594372192b981f9df56809f6629615b15db7c24fafcb1d1410b3019a2eb6fc259872b927c2c82991054949f3f9d9c34faa55c6ae4ceebeb705bbfb1535b15d40a1fd4782da9c0176235343c3a5aaf531eff82f3225f7bcb0c670815825ceec3b8f823b35b9de07e2c44f240e021850fc0ff9b5d8ca1d5ff1e682213b148a96de47228485c3ac56192d21630cf9e1c7b3a3611e17d611258061a06555f67683aa6cf1de7432a1446ba37850e58b99a31db740443e2440743184466bc51765cd98da0fdc0f413ec9212fcc49d6d46d54298c213af90036db1fc24f0db6dc0e97318f36f9f4370a278520faddf39bf09af08f92730432551471a4415d7c317e935da3da059f65dcd3af47aa1474ddc36c6bf3fe68dc0cce6b18bca045e8811419c307caafdf2c5ac89a703acc6cf213debc802c2a71539c62f00f94d4788f3c4ff554f9467ad700e46ad64c79b35ae89e249c415ac557d5903f24af39475a22abbbd3bc55e7a7bc5d481360da60c537b3fc1091e11f1b037606126488afeb6cd5fbc0355a389b77ff041e8611d8ed01e9374ae8332ea929e81c36d98314588432e186c9f8d9c5c3224b9f0dee44e0918be9706afdf15adb2d015e95250dae15102be2faa3bdff66faec9f8b011705333a5064900c435ea396cf1238b505d22fe5ef104be3091d6bb7bf9ad5287c9b8cd578cedf186c51e745bec787699a16fe426c931c422881d169042664c86418710bee02190466ed38fabb219b995d641de7f08244e74ee0458b1a66a98b695ea04ec19faf25e2d6c0782c1a3c714282dbdf8db599ab9851f0f6cc1fe1b5164fcd67615c6c412ce2f8e71e93699e6e099a999beb741d658e723ec717d6c5eaa29daa5a7fd4da383ea4670c23db13a5cfd66adabbf294641689885d62acc7eb720e48cd2959b8209e08b6c2a2f7e541ee358826a70c3ffbd2fd0d9375418d44a868a60891f382fa28cc1fa2205f5d9da7d93450a76965525aa663e62bc28a9ed99e2021ef275750f856fc80017d1b8a853e8b20201826a186978dff50db53c6f2955cf876118b65a6a6e4542c5ef6ef8eebebfae3f0ca5f363e357cfe0907ec7c886410ea93c3f01ebab92cfde358ebfa5b2857978bb8f9949020fe7bcc8a84670090bc91f1b1ffcd0376c8f53ac01ff5bba147edd9f5947ab154bd3381d988aa588ab43b0f69e3b68e491ac835000629bd82cdec6d5a3aef66d486bc6de82396a9f6b42015324e3f77f7476d9630b6ce24cf5fa12c5ce1db8570e7b75edae8f02153fc30dfe2559c7276406d55335be57260255ca14991429a482be7c2084cc6d80db64b48182658aa3a99dbfc792c82a8ec551371c8ae234b727a129fe87b638de7bc11a51e72754cc7ff84590f953b3eb1097009eb4ae2146ea88f76bbb1d0426b447c862948067b8cf5f17491d7a5b8a26e6ef8210fdf4a335dd86e4e0859bb8caea6fef39437b8c52f957a258ff9f9018b2a1cf7da56e1c6c028684bb1d8b1270234d7b4988525003daf7304eb8664490ce46036705d4ea3539d9025ccc0bb0c26d54587f352a9e9da48bb223c73b76521e6b61d686f7c2e7ff1b00882d9670039162f8cb8e9c6d1ac7a7c128e8f0d3df44e0daf56bfe9e5c248efebf5e637fe78f748870ca48704a0c3dd2152b2cdfa27bd19d0e1772208c70e2fc42e64266260f2ac94d00f4f757e50a2701b4a917207b47f20349a82114a19131f05efc6742f9704ccaaf51ee59e11dee2aae0cb48a0b9715280ed741b38277a6525f02737f7b21d4da4a57e762aff4e911c6d2bc62d66a17e190b5416afcdef94b092fd8483f5c08bab2beb37eae4032f8cf35f22462459e3d929a8194df605ae7948443e134d1efe557ac95c6d3cffdfce8d19f2ba8e100895780558556279af847f4222bbf1ca572d90ea9d5d404fb9e1684b6ee75c6ddf533ba0747e0342c44a172d949f77fe923c9e38f7ac3134355da23e4e492e0eca41969cc102b6dff0a249ecb8b24ad7f93f3beae473454973729dca7e66670704b61635855227087a3db603f6b20c1cfd7a0e97e112b6d18304cedf25aada07121fe3c5b46e3da139ae9b469d01a0216a3e2274fb4f37604b106ab212a44c220f72c81f0168b0300ad33ec6123f414e3162db30c295f9e91abda1b491742a3841206d4c5aebf8db8d2b90e219f2a6dbc96efe0ce0968847ba7e3368e37afa829d73ba8d60ab4d6ce072b0afaffb13637cdb00eb7f17c44f50732ae6ad191d45646897482efcc51fa1763c262067c0139e5696fcd3ac3bceb8776cffa2efbf9c433f2c967890bf47771cc98887a24af64acc1bc617c9fa4939bcc64229350aba77ad115d440c106dc14596866948b8f39e917c77d8c3cb42ad00a21752778954f99bfa7da1d807a86ebbf57fd1eaf6e79dfcfe85137b37eafab0d4ab4f4ab5eab0bfa553aacefe1506010ab30203b3b2da858a3e26a0d8702e7ebf76b361255b9eab4eca144d42405cd46c6712db488bb4c99e47f8968eda2ee8ae59b120e8cd13261485ce6d10709d66712c512873a4c9e8cc98ca6df59e1163cb5aaa648dd5fafe86aeaa78c177617f387fe6145ba0f76213c25b37c107972817643f12b720b6e8f2a28dd222cf07a382489f2ca4be5811ad93e56a00824c50003d73aefefe9ce97ba70d708b96be1b243cd88a3e490f79d53c6c6396961995d3dfc42a9496df4a14c3fac1a59f0bc834ec4c2aec3ef951cceb1cf7ff551c02476f9e345e9035fe8661776ba5d301e721c82b4a1297770ff593af0b2a1d7ccf258210904e500768c2b48f16d16d3d4df3c30f65f8f93585322553daa13a98512e1cb1e7c60265af1bcf46d07f36348a2569e41fed7f213e9da9017f00939c4afe880b7ff1f93480063f6485dadd19e4b5d0b0bbbc0c1286029435d1814ccf606d78d5dd8c5ed50c6195171b60eb4ead9e607f2ccff64fa3cd8770624d3667e5adf9df626cda473da547c6966be026409676b38cd26c7f28b2a5679727680a5d3f1aabf4035f4d010057f15dd97afe3def0493bda38bff81faf3caaee281c411f75b10987dcfcd74c4faa4f0a3a3435d54b823076033cc9866e6265f0c1fdd8c34763b3a7fdb5cf2aef369dd0376c8fe627524cd6b328e67a1cb1dd04389751dc3fa61eebedf3f27b691c973a67f875f9ee8a0e53b62a24dfbf29a71a992e22ed0c661f6476362020146a1b007e24357fbd6011494bfa3a61b06c574083a3dfd943b076c6001d474c89f4cb124fab1e4fa78f1cd9852bcdd8bdeb58737cdffed2dcd8eeb665b0cd1a78d7905bf7ed49ccce7c6a7e9a6cc738d5f4120d85ec4617b79ee650dbb20cf7a2f8d29cbb09394051e7e80d89372c4c979ecea130c47b7aa5de33426cfc33a91f59f62fefe49d32767d0a88b538119ff392f1497f1ae2c5d709781cf9da19708e017c978a71a1be7a529afcb25788195cb64077f4545173f41ae0575ec7bc163ee160acbc84f64ff23d9c11e0e9ef3782202697b314cfd467e3255eebe2fc8a8099ace952964a67b5a0c05a282a38d97b3f7a250808e8e47ba91dfaa038ec4df2461436c05637171fde96d37245e98e056eaf518a2e891c71d5598b7657414513f0e4472917087d5233205f79250f86632beb9faf5663741247cb55f8f21c742d155cd9bfc43dcdcc5a95bafc8070dc4578937e47f47fb5b9bfdc24a2d3fda453c9e6dceb5df88b9646cf598323a695f40b9b1c6699d1503af0b8bab0a51241363b926158ed0f351288570f0f61c2bfc95690ae4bf4d4c2acdbea793e948592d9dda9464dd15fc4ee6be96e561505a38e246e0a01a90c2421c0f7d51d52c68a486a07436cb441a339510c35ab3b9d5eb4e5d596e1343bb58b4693aa5f227009a5ee6fca879bca6d510fbba0f93de5ab3ea46bd8f7afc758def8ffd949c3fd85d10ae659246320add64b056a4968f592e7d5416bcbd62570e9c396acceeefc57e9334f23baa0edb74b6214a1cb8cd6848e5b8931339845b21d4acbdfa1cbd32ad0f0c3859adf69a999d74b238a4f2740d35fedeb846fbd0bf52c8a085ecfb94c02a4e4542e6aeefb36ca6fe57b4f456ede86825e63efc0cc32484d0af87b8d1f4d85416634125146cdb61165f84d8db67596df5288ae74cb10ca47346697ed009bbfe3ad8dc87fa9209bb50d094f7bbd80d27427d3043460e7e23749225fede5d21590be5d37cc60bb0b7e047607bfbcece47873987297c55f02947a3564c60ea73fe239a735a13999dda305a360b0b46709b2879aaff5b5caeed34f8ee27eac2c2d5954435ee4982e9ff65892fa92aff599e065af1ee0192a26a023b98de9be47f89b8d4c9057683ceb67a2a89bbc894ba4f5bcac97f61c779cc802f50a05878aa5f4960ccc5023c4da557aa1a0def7bbef1a112fffa4be1b06f4b52ad04e872d71480ed779dd0ebdcd1657632793922bb38deb4184b17e7da86dc9c1b53ff4538665cdbb07d00b3e362fbb7a3c14fca4217c06f6a93ac5d1b7cdc7187e94ae2529bc5f35e2f3a46edce8f23243612a3047098e338a1e0f4b970a4802f3f3089aaad2f1df58822869ab793457037ba38a887418223dfc9fc17b4fc6d0501c7eb74a2edc6f3a34348dce8c7e24f3d71730a9f465b5b255681f8b5a9a33974409d34eb86b9a7a478fb4441fa30d3845785fa6821b62c60115192e26aaf08c6ac034c08d0aac950168562581f6ab984f28862c164200ac6e0d77d947bd7af5f1a6f7d2aa6474b5294a62d3adbd011d73ba4da13c09e5d3c23f324e026d963ac25d6f7675bf210877db954ce3a4ecd9563d8917bcf93df27bdfad7bf4ae70c3f90c7e95f8eaab2a6d3f27a579d64947b2677bf2c60b4d555ec77758bcd35bffc82d98d81bb7b3e898dccc7c1ad251a70261238a6f9841e9f99d1eee560fd7bf5fac34bf24921d1b5a892240a9a2aa81970ce5b793a2350f8bc2ffd62a05153c66970d1112f524d56eaaf5e14b03caa4eed001101e3969eed9eb00e35467f31ca38753deb459cd4d5337336c2d6fe833d2315702ee17a0bc8defd73ac1d0f09da909ccda865aab43a8e5792c57e5abb687fb1d32817d244023277f40a3be0c9e771af85a8c0d22e0be18fbec0ab855382bfc08f860670ea7487fcb3584d5ac7f579585fabe2e79191686cbf26a2fbe68c0d4d51d5e4d19fa1858b933ba37e627ddb98a9e9024116614f8aab8ae4d589715be4d6266a2136bff9233770e18701256333b6acdbaa4341892d03557e89706cf5b57b22ffee5e6c85e01d8b0f57cf0b671a4ebf4a6b252e0fca989d0b5e8c0f8648138240adad89e4b62c92cf1286a2b0c31a5c8424b55fdeec0c1d7ea2236f9a3b1a5f1858c6a9a358cbf8278b52051645019a8fbc8cac6ab8152b5a98d181294279816e7eb15a945e0049449900b6272f3c52ea3820b2b8ab8ce13ff261240919eab98720e15cb12c57f15e8671fca351a4becfa0fc55cffa98304e3025fd4a05bae12e2b29ca632c604a7f2f8ae95a198d0c930d74c7f9e7e7ea5730c8e7cfc3e2ff67cd5e2cacd21433112dee2c7ccdefa4d313640e38def90daa5f66e3c9677a2d89c85278f5d64a1902f77d7a158dc301f2b42685418360428fd8615fbe685b192187c8b3bf24c617633ddb9f3f2a49fb572d20a1fd471c7064e2ac6bd277165f924bc9f9108bfa28a0e1ab4c2b151b8d42ab9a5c158e567641fe3703a09e04d9c555f15410df266e74e2ca6826910772447279260614fe9cab44eea21853f44e6a22617ff0488c72d06a778a432facd029d2ca2c435bd8ea827b4bbad3de7e2cc4e523d1d21ebf47b7e46d1c0156dde0d81c1e8e9265fe316c87c39fe989aba2a6114b285caa6c3891778552d21bfff2a68d2b7a3867a730e41e1099db84aa1d37ae8ef5e63d670d9f586c7c7cd034c107a575c03c570d19975d8b9507f1536b4d48d69ee1245346252504c9a74f7a8c7e3349a776381768e62cfb7a1ba7fc3cd50dce19858e77d717f232adecdbf0b63242064f455472e8f2e13bf0ba75472baff1c9e65c944bbe11df2b4f136dc0336ac36e6041f95b945faedf0a00599795a091622c5d0f3cd30843e5c278d4ebe03739b3585ab858cd557d923b227675f144d07b1ec5fc4a25021afba84978c99647860dd8e76950775084bb3e0ecb88d0cd647cf645a5ae90abb9b28bc093707b445e8868cd84c2f0d540e5be3e566c51e2574c689baf9691753800af31ba9cd81dcb8b3914090b0a97ab23bc3ed3c205a4d974ab12f07f297efb4c139ff35dea9bd485a7c8d7c3a84b28b394209080aa9d8a0d04029580577710bf902823802b83243c03a8f330e5b24ced0411924ab18f4ac9c1a0244255d85959de1b1467cce3fbfac43f35281fe0a791c5d92b8caa4f8cbd3d478f357d7d764ed4c0e2ad736a8b8bc9ec1044ed71a1937b5ea18eb891ef4f86a9b386e9639a542a51e0129128012711a506905b353bd1cdc328de1ff865fae3c38ccf1f76150170ad617741d08d0794145e0f30e24ca17bb2fd477d9ef0aeb7d1f4f684269e7500296cda47e7267774af6ffcf96d3b399a26cac38fef86779b1197a6d87872254f97a7450ed53789d4eb018bf3cdda87cd3b6374de5b4c3341893cb17a76c92a93adef6a833dd2b5c84ca85ca3113996d6d36a6f7fcb7bb4bb9368a5ca47bcffa5d6c4560286ac25a4538bfe560906e439b48d5a67875a4c461315c81b5967db46388e6f3d0e73a5baa16a44c5c06040dedadcba69f5e7e2aacab546c9762ba574253366720215e9c73a4e94b5ff5fdd1ba79c9d0174a77fc4604e8f021bf6b1f5f75f67954110a53d41ad352c42e2cb020ec3190fef42227caa1d6f617372220eaa37e2446518d1ffaeb675951d694ca6c2e27994205fde50e3ab7389db3733a5a5baa35a05b349665b1436df2195c89f8e9cddb02db1bd69ee0ad4a78fbc347c2efc3775eadfa63401ebe1fb2156ba594b7c71d89fe37b5094fad0673b671b39993dc327329368e6861ecc07266d75606a852ccbcf96ab421e5ff816d694ddaf8be90aab55b9c8dc1d62d75064969f72bf02f05236559d22d1d6b667f33d4adc1d276cd23bafbff8317bc54dda102514ecdd05363f615b9c63f5119317033421e94faab150f49f9be7b8dbff3c98722d2470f32cb0f3e8af0ee1f143d429d1ac01c5ab7374153f2fc5ee2b0076aa0db14d2af76f35533ba24eba4d99d6b7b42a5617eca12f1d23b9820625b2b84130db2eb107e6a1df37969b3ea0feda1e8628011ce93ad6f109f502ccb8f2e1ad19b22586e11844bf61a070083c54a44412b0c1d9baca7fdfe43897084f0d4db0520beb1f9cebf9ff1d716e588ad4e7dc4c3067c379ba6e4c8df3bc9a63c83a5d206a5a32e41513d13f732d5136a6020e54a27f53d324deb0f939f571a5718180d383d09b4ff105f6f7246bb7e06faa2d95bf734b9b85feb8d4305f670d3d5784b862ceb71c0bbb25c0873fb18457bde73b21463c6537d2d6f4445eb12dec4930113a1c7f9eab1b459582bc16d148750f47845a761693be20237b18c579a8d1c1f8cf67f3b800db7d80c15647c6988edcb8d753869e731ade6276810b8231ba7a0927669b8facc1263c9deac7d6266112e322ae40ecc47ae989f168893ecb8cec1c7f4d972a2d2380e4679fbbd7a227a5564c40aca589f2598fec8f251129b3d81ec78f5848add221a3130d76331c61eba572681c598319e935b1ce3874d49d40bef69777c44e3f037c8f15bf818ba9a7aa7dd441a70acf28a05b413e164d7fcc76b4a4d5e3aed4850d008a6f762a25174979e65a6394dd633e81429e9696c5150be9857938cc052fd62430761b3bcf862824d47ab4a65129d234edf3254d4a892517a2e0a2dd29d79a161d5f5410f52e02950d7801b9669eed5ff9655760b6bbae9a6eda9e8eb17e01abd46e8996dca3d85176ce4a9b5c912c177825cd2a5524643ff76b242c78061c3db909e4de56f46d41eed9dfc279ad327c5217521a78628458dc9c0572f4932fd9b4a77c2f17c34c1f79e57b4b685ace8c449e6d041361fe67aaa328a376bf1a1d395b391c403da161eff48bea89546a5937be225db02e48a27ad9234bfa31137e112b43240cea3075e0ab11683c1350dae3b2bd5cf633c4cbeba298c24aeb68485344a349bc5c70e8b2daca1daf4620965a8e5349cbe5020e608a241c86a6c847e48e9bfd2874d064d9438a0301701560bb89bd54d92606c0804549259fe7d9fa41cca0b9721ea7ffcbe2c5f7991e679d68228f841b30533519481e337dcd890dedfa4f1cf208d55e0ed1381df8a43da170e12fca397fe2ee6dfc54e7b81a7a57160e56f28ac075c10f090f42072d88069b5684fe751f3ffa7d70c8075e483464ade71bd2a1c72d1cc80a331f3193f5979610a9070b0c0abc30180874e5888ed4fdaf87c3a27b19d10c24d9cb0683cfac0abeb0b9c3de3bc5d2268c6b02355adb8235519fdc3769fd86b1e666917c15e07d2cb5950b90c4583365ef6b59bf97c865089677fb054d51dce5871e983b62331d8a99703f1d75a8e93a41c67867e9d3ffaea566dc392acdaaee7fec471da24bc621288629814813a1be8bd601bd08557a1d8358f10d5cfbdd26d6bfbfdac4030db75b6a36f8245cd2f9eccdb4f7fdd7471223c52ff93ba50e87d50fc09afc5dd4f6b1fdbe0b7aa27aed956dbfd97130966d2a1976f3bbcf9a0f4e6fd6ea5b6c7006f9fcb0812afeb68f046944c1a017c1a3b09f478584e35b4f3788b9df38b4b7457cd23f26550d6623ac116c1850783cc3b740c5db860528915f74d2927b26d6ee855b301de46b9194d1d27c38d98f4bbfe23aa3b20848efda5b03eee7990e5be39edcc67d0d0af8fa2b3e93900e8a234102f39fc31100e00933552cbf88389e43389dc38f099aff0dbbfb41b6e7bdc8013c4acdf11e0801028a416699a24c817e290f44a741072ad259b49f2688f73cca8fd1c9257a656a0073b30a34788c47d91cbfac484b1da63cfa78c8cad8ec5fae644566e34cab24a5899e6802d100488fe48c89fd9ab1c62bc557928156025ecd18762415a92276b2828a9fa5381b29777e9ecc5fd01a4d51e180077bdb6311b68162ada44b9e2a2ab8a3fe8cfb756396de0abddb12068a19b2448bc3f8c19a81ca27489a6570eb5faacaeafa1b0d25d07ada7a7d1364ddd74541a1fafe04cfcd26ea9f3c8e47044dfcc72fd47f0e8d2e732463f0a88900db26831ed5e92c07146e1cd837fbc14fcd98a523fd63911eca70f6ac2c390506af53a14ee7ec82b3fe18df64b173f69653ada276bb01084ba31ef41555508d50af953ceb38c3bc748a9bea000418e5471f8f67689ae4a04091a79d5364bf2ffa507d5f64ae0be5c7c6f33a98b5c8757ba4ca2bb925530eaf2e89092f44ae181e3bb859843fcaf633d1fea7ab0f414fb983c3aaeadca53e759357ce9221ff7fbb1de2a20df8d64c4c716b1831bed837bad51607f9d36464204919a2304555d3586c9ca55bbb20cca1e1a6a8e6e14442d6a6d74ac1659f313cd42563c087e36e7a303dc47a3d3a4ceb684bd87e01c16d27b97b66af461021eec3f596df6800e1284c5a9688424349e05684d5ffee3c71f8ebafa85e5ec270722442cff2acb8460de8d55724abd355c37edc592d5e22ceccfcf909cae7d61e285ecbb44fcb2d69d3f43ed98fac26bb776f12a0a5bf0931dc59130fb68685e28f97d05c3a2cb43608a7a0eef84fa6316f493a53130328662802eeb3023d7f2f77b72f6d18d206f00089a3a68f178a646af2e761bc51cb99724771bdc7edb3fa1f1346e5ecb92899435d503060ba9428fefcc2353265a0ef5bf632b54f42070dcbc38f6b3ef2c7fa79e921697fd92e5a61e4d9c44f5122187b21191c8be807a930e59bbc7ecdcedeeea613ce0048faa3f9e919d23767a210dd000655acd3136cd8c4e7a2f5f58a785f902571f4225ea1815773480ac26c90947d68623b18e18bc60de8a48d466b917388faa8ef0d95e9df160e33463a6a847149a44401661eb70a6961ee7523f6b9a00d199d7ec2272601e1aecf30574cfc40a2252f9a2eb0c549893e8de546a03cbdbbe4d2398db1f5ae39efddc4261445efc71a62a2d42fbbeba2417052efead3d8f47058e08047ec7474baf4bbf77fd15aa9822e56050920e8a782246014ad36566b3ecf5395616f68763c245dc01d9ac7161a5bf635376a749326feb5c217bb6538c099e2dadf092d631c6a4e27386782b8a8ff246c429d176772d31fd7308d0c68511a4b045f9da472887c6875e23c6fab755380cb8c3998f24b60ffeb98ddc536ad746129477602aa9d63f6c67347b360cef3aa619db3bb80c9fd37115e67145dd10c82ba3fa4eae8ea129e63f32184340be12e960edfd1d0a481dae9a0afbc47364ed1a318862fa6ff1e1d521f5cffb9a383a3e65dfe5305dd82c08dd12e9c863dc272ad1393e222dac2ad7641cad0ae0ea13babc25617e66abd8912c7949ccbe0450c928458f8741d0680034407b22d9ca2fdcde2d5d2af1aa51eac065b0eaf98a05f13a3fe6c9c48f20eb89930d7a90956c80074cb798a713dfd2654c120bf80269fdc992300dbaa93d4cea43a47c3e69cce5c47d5a4ac38e12eb664c4fd1b47c383e7b4d5e5d4711b32e721117a736b9f718b077a153a93b29bdd2ceef8b9514d71a37e67e32752087acdd34144045a66075cdffc8590cd3c8e86ac40861159be99ce22ea39b8fbed8bb6a8e99cfbdd16b03cebecfedad8d828e09997ec821cbd445af2327bb91066d26750de312ac76ac9afd83440208b39353dd5ba926ba5be515a1aeb98685bf0e51f2be3f0c4762137f866269685277c488d5f9cb165b345070f2da2c61148d3f30cc2b4eecf386cd30c83d127184b80433a425bd2feb71a2d92d6fa99c2c58f6770afc8f09e6d7bef82d0d914ba7b2068a6b7b378f400352f97ed4b8bfbfef43ad73c1c058dcdc5e83435ee24c470335ae722647d947069c310c6d231f28eac370296143f366b33c741daf960f09be88ffed61e4216a414ebd8f8b534d78ba3d4eeb146a06f6db76909363f7dc40ed007e906cc7e4d7adec4365cb6cfb3fe8fffc9650c8a9bd75097875864e067133fd29fcec078cc236032195ab8f8e078b63e6fe40be725562e226b7df09e054f59d97a33212a866132202436fc3d7cebdb292ab8f98298e8e01f8760babd2fd63a22993a9c67f192852974864c7e8a728c640fab52189a131807b0e9c497628dd688dcb842b3bedc23062d5c4d6e470d47cd42d691561eff3b434d16495553d28980f5aa1edd865c1a3dc7a4dcd9649eaa95f79bd9a39d9c2365d53498c8c66d64afe66cdfbd6990dbf08b1c43d69c5a2806905317e82959125281439eec46e54afa3f9c5ce546989796588868af997f862b156041bb7b6fd08ede7296c6a410eb4c88a1940576bae9c18218eb879a0fc228fb74bca749896b0b3d359711a76fa4fc27da12c528a9d83f8e6b4bf2347db9260aa7ccb7f606e438a283287872f46333130a1d5c7d9c9caeaf3be4c60466bfe4faeb99ce1b7cc2db026f6f38f231e3539787fac64355ab01478feb4fd718607d35700cdcfe2ac08fff70bffabb2e8ece070905c16a08dfa4b110108885e33bdd598c0ea4c427e611bb9938f8216b5da734ff6808a50f9db4f79ecb854a4c75889b1922f0b19014d5b0d1885dc76791131f0fe908d02d24bc34b8d0685102959efa6d1593e0579ae63dfb949b9b2cbbe5422eaa0cb2941d3e0f820de167f7b4decb34b34afa54bd8911630a48bdb6dd15141e0a2766aa9f6d27fd988fdbd76000bb475a11f2837f7cab294270949b3c50810c2a84f3e61af7456d865856de85a08e144fd31a8084ab8e46dd574d65d1abedded0e1e5feba7152fa296e4d64cc10ffacc6c46222f6d896b9d22b72b13d4e1887b84d45c7e0342181bef924dcb755db1855daa9a5104edfb5332aa2099138341945780af51fbc4490610f44d92c913d64abdf6abb40f58ecaea12337cb890bef95255311c0518b587476309bcde5c41e5ae3861fead15f84ce68167506888b23bb748f42df5cdd16f062e21dc54083edb6339b60b88ec546f2eaaef1f39e61399f1cb75b6fae7f8eddce09877315894005923c87ca170ff807065d3122a4e56cae16de90cfd1bd5a44ed42ba2f391f4457fe167a753bf395fd1879876be2c547867aeae330294317fb3e02862ad657a31b448d1fea304a3dd204bd0341560f1466ba91db4e7d621598d140572e8778a1ee996dc8501c930dd45544d51f4788ee4c4bf4ca3e94341dbed51077b2c10a75c8fc681412f60de9ed14ca25e9b88e422c149ef1e215bb704ee61522314fd57915f008b157c78bf4787e9264f41d1c523577d6edac8b778df112c1a73cffdaa9030f064b32878140f2746504f130e2c7ce891c026e891660d9784e934813848f0914cafaf421ae5257ea97cea62290ef62ca9d56f9471658e6daa3de0e53e16c8f38754b18fe8c29186d3d3ed47443526b6596340d7aeb67693996fd0b9879dd8a8a92e13dce7389cae1f3334b403f07de84845fa03bf6ef243171625bedebc1621cbaefd154f848391025ef904320114a970513829f04a52e6aff3eae5d6b4ecb3cbc998ff4b0e82cb54700a7dbe1e6b1ac66bea2633222ffddb7398caaf3dbb1e987d1b31a90e98d53d4c850f8ad47fbb15dd7dd0b5d51a3cc3b4e3dec945dc73210b10e5accf6be8dda492ece62fe292cd466145e0b924da85c92844643c0e7c2925834faab793a7acc124537c3dd497efaf571d1f60acaf98a2f907464b0042afe7c4613ead48fe32b5d637c14567b50ccc4af4230a2f466a86de4b8d086f5d8733ad25dbe52aa315431e3b3e50a2d17012f57106d98799002b4515cd6fa26ce999d5ce09dd32cff97a6ff290eb46e55f76c3c4dbed154ab25d63dc5a033d7cbf907a960d3bb99b93e6f076f7a9ed934c31caaa14e61a16ba46d61b5e4bff901de8e7df15c8e9f98af28bf75af8bf0b872bb6f910a0b83ec8b2733a4e2808aa90eb75b1ed0b52da2c9bbbf00f81498250dac0ef1c2a20e7b9b14486177de09acc02ca8316ae22b86fa750cc2253832e3d67954ec59a17c0d78cd5c25078cf2c47cb9f227d36dcd286330ded3a670bea083d9fdaf8e3bf0d80b9851968f89171a3d985e3a474dcb1ba7488b34b661c85dc23f46f2a8d30ec008759edb49c775957a66e147ae241ada0412dac705629595e56192621be6d102b00767b5aa4769f8d1e5b789a22c38393651bfa21b635ba1e86ffe10af60994606408dc3ca9c1d8ac4d47e91a944f4ec0ad3784c48001281de908be63746ed128ae04f93f8bd7c00ffc69c2f97e25194f4283392cced04a01984d89d1ba445292ad527667cd97ffb487d99d8673bfd7a1d7349b2745b2206fb31b3841ed0dece2291fa799b5e993c523e3527f01d5f624a15ce7f5552aaad03f6947d5a04efd63fd9ab6008a60aba167238e01d02702f85e272a0f962f04190540678e8d851a7ab819f8fc2602fae0c01dbc01dd83f8d37c9e03fc65dace8fb1d41e80bbdaa604f6dc08f18939d59084053aefff0901156f5b3ee076c2f600ab1fd4be01db68d25b1f5de50b0fdba63845f904cdb691399d18fb510fe2380cfb1e4a860e0c5b0b79114601e19cf9d1ba97ba92a6c85f147523f67d57d532e325e6a55941b7c01f8c399d30009f598d960128b89f83ca336fde57ecda750aad2a313d9f993ee33ba2fd5404d5409531690f1a795c6b1534c61b59a05b933123c73fde6239a4004296ef21b33358f7c53238c351143dadb77c519c0a6248bbedbfb8360ab6cae68c9a8470ce53886f680480b8877d60400f26fd685ed1695d6de09c1c762baa417785ab59a811ebbb986a72df170274bb3ccd391b7e32e838f495347809a54a2e299e0dd3b8f5388fe9ec628016ff02f853f830617d719887c76a995ab8fdd8861f0f6c41ed4aea65743b2f3b3d08ec163e97870dac1a9573532a3727d89a1e3e1ac46e973fd27792a299cf224f00bf294c7efc418820fa4df49787bec93f9d7ee50a80dfca7e9c701bf9e5d07e9ce3deb6df2f5dee9e0082a2baf7d322ce698d4470cc1de03c70aeee815f31c2a1338c2360d2e739c2a15fe386f4ec0aa5cb42825ace416872915b83818af3ff90289256d2fbcce3a79f1fb28185fe423fb7e20799e4729f5ddb90a087a41b8e9beac413dec401de5fb610733edd7986e7f842e9d3cb8604063838febf38cbcb4cde37543ead9761c6c2f36b31eb2ed714bbb38e76ef94813a6f26db37bf3b373a9bf1bd96ab32c43dfa7b335aa6e287bbb873601718537a811fcf44bde19bc572c539dc09bb74514db7b3307591a2a6c6811059193152dbd9f87d7e463a88965adbe5fecbff7b6a0dbe6d39339e43a59b38fdb386ca3ffee2f20635855b64b81a86d1486a34563d83d45e1febd434acebc1eb900cd7a708f31185f405f04689861a333e003e46bc930562c588fc9d565e9425d2d1857076593af7ad081d9074328e82d2a603c20080ccde667eb469d5bd4e164d5123e6ef8cff2a267d56fc7fc0d383a2ecc4a3a61ddc38e94243f47d56137284f9640f6f5b63667cde28c22478f7f48359f1013225006df80d62dd167063e0382ac59857958e582f49c3fa68fdea459a536b60a3212710cf09d791647270e798877c253361856c075cc013b47ecb423d65e03cd19e55defe402e1a9d2a3beaf2c89b09e902dbfe5945cb3c7711de8e188a12b1baf19d60f95ea683f9bc1cdfffdc19a651c9c7a32c64eae13b14f4faebcd9dc7a4a57f64e6416c950da769f95e97c975ef22945c75f9a9b44b6d81647a3b38a08cdc678cba8831866e7a20e2ffb4dacdb336b5893559348b2c4e1a8794fc89de37e0845d19b16c34fd96e7cfd728876765b5c3aca56fe900a4644c7706b12802f68286ea49b1aa3a201f55e6a91c046edb586df7322c66d4186774f2b65667274b123c618b5c40474cb44a6db7d20348990b1b19287ca2aea5002b9fc5542cc2de343941f7e7e02fc2211b2ea06e7821c94b4a0be67fcfa5433a4e8a5746607da0c3710f0414e701c5ee2df6e5d99ab5bdb69229c61fec6d4730aa7dc610dddebf95181668c635963cb74e87d6735a2d9cc594e48f53c231120d5783f103e1830d5c134fe2972affd0699e6aba54310006a0f31f4a92cbe252aec9736d597cdd3a378f6ad1f247eaa3a03605a1c97a2cef033edd4ef01678b985e0a91c0f5a8660bf83536af16ae96fddc40ae804416d7cda345898a66b0c176f99f1a1e61dfa2b573a946d937a6b837e0316d1fb952eeb45125fd8e5b2fe89fa5e1fdd111081c0ba5f7fb0e41e21653a0092fb545b06fbbde08c63f5b48e08971a0a4437e2afc64a00bf9760599a915c8f46c145421f633e7be90e6725c83ffb7bb55d975fea43ae668f26b3a0244027f391546f0735846076adb217705bcac70f15ee23640ce08db82a112538375c8e702df3b9a447196be50a8405f781536980a0fb9e60b044e2917202306c7823294b1775b9b1d7793760f1a232066769e996b909068b4109e32c73732c3aa16405ffa8d819f2e2e26b21df30d29aef2521c29a0633798373b518ccbc1f82a83db56df589d1f09e125fd2e219ff2fcd221c751784642c06d54b0fc1fb6cbe228cde9887cc2abb126f95ef47b373e6526d689ffddf0c38fd7c24ff36b2951475e4a4f2376e37c9700dadf3d52924a1a903a3ea55a35aacfa64b0a16f8bd917afc1dabee6c4e4957163bbb79e17f8c9741aa0a795cb5f8fc332ddc65176432e633af75b98b5e58fa59e63a2a13124c3089fd647d6a0799ddf11e119b517586acd1fabc454ac2af6645da112afb4e1f53ebe06fdacd29fffbd4882a0d876844e56ef7e0c6849c13408785834912cae9a57bd393acf2314e173fa9c57ada2ba849db295656dc992a2c5fe5c34bb6da9ff9ca29939ecd805826c062b54fbc7565fc88d74f25f0d582a9e43f1dce687e33700228df94fbac2cd2460fda7f2739a11d0f299b5850aa66921a29b5cc0e84d64b7d1822bcb5d8879c99150df773516fc4993219bf3f57e533e1e4342f4bd3f2fe219a64d174ac6e7632a409d6257944ac07aba481acfbbdcf871fd69488e166feed2f54a642394fd5770ed5953784b154b61550b04022eac9a081e8692d40a30718b8043eaa76df1ea4f101e65c4e5b70dc8be8fb67f02c905715d4f3b61fe9f8bdeada763b2dddeefd5c3bc82a54cd8812318302be4806f49c5ac08786a5975eac2e5521e0c69ec3f0ba25c44965d4ea1e0c175626d184dc6e7401592af3842d224452bd05575f87c626d3391e60a929492d833b527c18961789b3da2625d3dd9964f1e41fb7da76a94f3f83aa8b951a22df0cfd9df84f1213b213bee98331bfd660a20c63bbd627c44b481df4d0e8f0978a8aeb703f5324c2f198dc10f1e21aa9bc4fc38e368a4e61be79e0dc1bdd659fdd1beadb8ef6f30e1c82e48a5beb46b981abeff596d27446322c8c4c8e798e4b7b512428ce9bd77c0217add9c7c018a13c7f305ee6c772f920cc833228aef127d8dd1ebfc180b6c0393d33e1a94f611997d5ae478378e3a6c8ec9c7779c6b1ff8848736ab7c6d0282e545cd1ff0d1d09d24f2941baa1fff6f45bc6fb13465df361293034d31f6661853f1d780f41628c1302df8abb5ff806c894e2ef978bf63385ac4a3ba0a63e043dc18d556260d7ab0a3e9955c2752ff42633a2be226af1d9ab7916838435f5bd6fd2272b97a8450facce9fadb49c6a18a8d5e7b171fa5e1bac6d439027fc631ac9b38e91591010f5df166dc291e86c27c55af5fb8719c71026a1aa2414090c04d7193fce58153b6548ea964c731211cc6b71dabad0df912d40b7f65779bbaa0f031904cd3769bcea221becfb2be61ff762a52547fdc95514bbd51086677e69650449f4af8c5f027d2c2ab959161d327e612b38202e0cfc97a224ed6c39ebc194e0a8feb72b471cbd7d0cec052e1d901d5e831fe973ce899a3e094f43d565258cb0177e9669884e7f03fbe94747925c4035d22b7767fe2eff571ab0034e3320a6f6d30ee5212fdcf653e58c436f9584fc6c64fc051f6d898330fb35f6ca5f978d1f2f5aef369e6f48975bf5ed19ccc2913a841eb001d39c63362c964e9ff47fb26b40ba907b3621f73663b0588f1e1a1b9d91cb19f9b7dbf44d815b885f52dcbe612b0dac491c14bd43a0cc1315a7a0f6b675562c20805b5088bb6bb184d4f0d1ae6471d316a29caf55c56ab86f23de6b92f437b4b2922db8b1ca5d0bb39e1d05f997793b7337ca80619e5b39eb4655ad5f4a270f8ea7de255d9bfd994ea43ca001881dd243c871308041ece58735464f0bd000138ca9e94b7359e34ba24d958ff1c60445fd68e724fe33574b6120213c1af2cca03417f2a8fe0276ef4b8d27ec305768b026b4d54822727839d127e3751ef1688675702bd9b1de61e9ebd5a45aa9b9087db9b0c7a26555815b7df48ff3b2ddb4562eb6ae6a54c0955e8c8af7f9c1a3704f7a9fc5179975f333e882f7edd3a0848ee75e3e37981f81f04c11ba280d87d49995f0d5f0519da623e2eb8e6f916f51d5ca39542cfac0cb1076c5a9afa0db8b1f9c286c84f6b0e8aae8a2a51821592182a9f940c400012472d4f2ba24644901f5ca1a3bcec626602c42acb2665fb1134cc16df49cc4ea9cc14f98c19c61ac4958b4333ef42de89449156b6da89dbcc4975eef2098f6a6c33b41f7e737c10704a1cdeb6d73c3de0efc34cb085b587e12f102ae89246b21140a40e97ee32d0f794dc49b442212943d349bc957aa6426be0d627bfb7f631647811d3121e3fc820301d7937b3460767325b5d0e7c1771a2c5d0f50656168982b3809be216b470662420a1c0cbddec9e7848411fa24a1a9d74953bba4288baf39e46b8e9a139e407f79326f97ec5d196e81a9ba76c12a6a663671e73caa13f60f00272709b50646cccbd8c7f601cee203fc50017c47c00cbfffabf2228a6fe47f76b213205c8b5986ee54f249006d87344320b698986b71de0ea7014fa6380dd7d6b95bd4fcddc10fbce3cd7de26dd04d884b77403a783e77f1e0ad7e0739567f2a6aa3075e1b4de4492f5a2ff5e90e86f9c6a0217593e833ab80fd6240034be53b0c262dbdbe731f8f82fb0ab10c8585e6e5ccf5380d4611f8fc02a4f84751c0305b5a0564cc9f1e290511f68771b6ea8058895827d43b8e891d8ba9e8f1d31140c16fc50377437f612864f06c3b0b65e26da0c2a31ac7ed2929a3fbd2d935e927974ea80763168bef9ce81b271761903e41a3c5ecc994c895af0bd2a2e7cce574975c3358c04de5aabacc879154b7f98c87e45e4253b66d657d726c162b01df14b0bc50009fe371501c63d2a587be78b8763d44e1d2d580c54deb93db44b546ab7a21af6800bf4d8943cb76a29c964ee83854ffb7b464733ba6cb108efc660f8f6311fdaad8bb08549b2542a3431d959cadfad46e25969a65f0511f30a517fda430f4d11c2f7713222a9c4b6647900520e26715c8bfdeb34a4152abf93b9c36007af5fcd5527ef6f43bfa1b358fb6b3a4092c9465f11fc0674b3304486d9e0e0b48794fcb27e9d4adf253d6586853168bb798419a09ab4fafb3576d2283f27c49bf85513e1ff8e6fda5a3630dd2cb6cf944b636533e685ea038ca87085b00ee75419f97f22ee2ee6e27ed1ac7d2318a351e9b730a16d72c8f626d4cd21ca05260273cacb2579ed5fffffcd6ebf55cbef40fa727f74719a913e40d1958aa92dbf074280a58c827314aaaf6c3fa9c655e113a371993a3d84072bf2331665bdb05b91187e024ae8f88a7fe6a3ca5260a08b0e147df313cba65944dc2e376dea387b8ba66df72e28b7ebc719e8bd55940ba6c8a993afb234c95625bbe66913598826ab450154e79c40ef7bac2fc3cee09f2c878d47df58bb61e5def9f0086d600e1419eddde67dc5a070cd5df8a79e548ec4d84675f2ead462774211c5327cc06bf1cdc53519f6df3df01541f0155542edbf7e1ce9b8fa0aa1824fb79bcfed32cb494161e92f7fb24d2de39e01fd57f0d3fb4a5d20c2a6695019658af1de6acf5b1234b3b2d9f4257aee84625833620801d051ac53fd255a61abf4a2a7457aef308fa3d0915a6b99837285e3537d5acd64f3bb6380a14a831abc5295012a94171a4e85c192c6d40e48c29ec7d8880ec491a2597ea2f608b6b31435fadd467aa5a83000edf80f06ce09c0a34b0c2978ae8387b41ea21c8ba290c4f7d62643a6e5b8f73ea7c272b946d264c89b887b146620425e8fbb11761ac8e8e4877bf24fa7f9ac1f286ae2ee731ca0aca06c6cf4ddc4c94f85c11a1d4a8ebfabc384ac40ca4e7f32205e3ba2153cc74e86fef861d10b7b3c54f039f79af5077dc47c4736b01c4a8078296fd5c3d7edd5cbc3232c22325922ee8228954a9a62d17af9d090b21ad2fdda3efdd867c96ba3802772655729278800db7d585cf623091ff7c68d969dfc76653e8534a9a4a001097dbdb63a2a7924dc6b17558714bd30d054d64b1d86d15621e1338bf1ca750056f0f8c5ab217a0b7923da95607489a3fa86368091869de0bb8d849a17b78366f00311fd9dae4447d746267fc340ed50fbdf02dfdf1faaf34ff29f9898688b7f58fe4710f0b74b18a4e21a1710f53fba7b10e58fd624fbfa28dca2b34dc82dec5f449e33a4bb65719121d21a6a12088840730e35f91f539f788e7fb4d35d8bb42233264b92aad93ec17ef5cb22cdaafc04b70294a2d018282895b55af03a4343680fdb4ca51cd5d0a4c039afcd765e84e7693a6776effb475b8c13955204ceeccbcf6f38f709d2dd85d12e887d1555e2d2b5279dd859018af2edd83c0ffb19afea7b31a591c7630fffbf07ac3f837f9a5b48ade9a1111fe2b14921f49e644be8732bbe92c580a663e91f607f819fc2923c63abcced11c4a9e0f45f74fd94e743e168c4377dabd7792d8ae46f9dec5a94873facb3ca13f7842d7f5a8f6c0c997da77dbfec039ad350ef22e28848e072e3f40489b939e51f9fe5edbd75863e87eac0569d32af35579c22f65bb2ebf8dfa531ffd1cef09005a39bd9f5b95876ae8bd537761b49ed2b17db4f59cffb5865cea866b37514a84f491f842ef4e27fdf8237bf000d39085d152a1dc89603f163f29b521a949bb3be861060096e57019bf1091b4f5671c5cbe951565617885af1bbfab03f27bcdf6508637ca955504c145013a397fc5cc3c9c10d2d7b8556605f4acef3a6f52757727cf51fdad52185cc37a518801e1390aef3030bb6f1ad7f4924399971c0c74bff4185e06edcc45ad923fccb862ed44ed7f6751734ddf8deb7d9f0411d3239d7bff94ba1afb3c5e3371db1c0d66793889951310d2325dd9b83c417253287501cdffc5bb1d8cb69f647cedd836cd6071155cabed02ec3c4ee640139396fe82be71c59b8be156bc2aa12573295d428507df6615a68b520b869a54c7e3d11d740f1e0097fa16c3e021cd7f09d5888fbe3c3892a5593ecc058ca3207fd923cc67d03fb5bf02b346fbaa8bc7e7993492e2b188a749c533da68e0b3a99667f879bfcc66d48d50a3e2b209478d72e054df35d29187aff21f571209e4d8d0ec753ccd029a73445dfacc88578da2fe53a2ca72507e065f8603a3bfbb5687f9f42f88e9ae6b5d5187ee4c553be543721ff12df8ccc29d64df89d745fa2a5880f21460fb216b8b59bb1fb3e767f05d99f2ae3232f38cd275f9be3cdcd9a0820ff774c4387bc4b31dd5f85897925cfb137b9072d308c39e959668f49819d871976bdb1db81a0c797f6efbe0a7eb499ae9fb6f259fa5cdaa8a9a7719ccd904e996b2285413a3fe3d67404f0178cfcf11edffd59935207eaab477b0b7c6308c3d95b5329034ba8708fe41b8dc8721a849f2b3734ba32eba038ad3bb460e4572bdf749e96370befaf69748968e8edb09c727650c59426a6004fe10ed743177114a5d03b0c35e3d0ae7053687d5bed339e0254a26df15801abb734b9608eecfeda7b0fbd1e08e782b39031a3cd3beb0d17a9ba9f3e87ff7e7581a8cb6090511f18f2418668a30335f8dfd93bbabf9dcd8acf56279dfcaf45044fe6e6c60839a90c3b0f987e213c234a07c867a95a9ab3d72b80de348a1ead58dac7a8b139e7fc68b5d5ba68621f124ffaaa80911e265d217317aaeac77d5e64f11e8f1f8bdf2d78848fd74ad7d309069df0a5a9b08ba8b4f1861c4ccdadcb5798ea7edf6d3a857024ef5476c69576d9398b1944faf60350190cbb3ec17f06729264478d806e1b0af7dfd2d44cddcca5c6b0dcd3ffcd20744172005a8bb4a4235404a66ef69c0df5d59a2e280fae5ec645222cf2d5ed78a6ec3229915277b1ac0ef26d28ac30dcc68c3dd09ea8808936d165f5d64f6ac4845c0bddeba97e3477027abaa391828b49d26756ff4f19c9f7cb65c1eff692540a22826f26b57f07a44ae14a69dee2673daabbb58d8564d3786d1d58f0d6fd632dd25ef9192948d95dc8edf95122da6710b852da478aa2d272e0934d4d612a7ac15048cb44b3747ed12c9496c9839e74b9fee580281330863e156aed5a7ca6c678f9ddd2c52cd5d30b30fa00994cd893656364cd010715c149259b28fdcddaf82aa99b7450536d0b93f4648fb4d7b53a5ced6cc8778ebeccb8045e98d3892b86bf5f100e8b7acd120bd21bf551549afecef0d99542f11c87e4471064dada2bafc530d6867f40a3b5ba476b73f97d5f1d5c2c57e57fdcc6022b358fad211ae07c15b30df0df013c3b096edcc759f58c39e3069bc39ee107c58f6971c2dd700177c84b5ff04b65e9a62661f559a9806808830ffca5d36eb826dd7e7ccd78b0d937e22bdae8256b0c28ccfa830a8576bff3c99f35d0f3006c9dbc36d1e35c765426f0df84058f541d1103ac5d0ef2526e1f53afa42dfd1d41908e5d6870a44c020e4de451e1c091472b64c8599eba33dd7f1bf88e60f9dca04dff5db705a14c7f6e7719f2e262eb9291c885623795fb9534d3fcdf6ae0f7ca7b308eef198df07a32a4426d5a2c4faba06b5b511dfdb2ec2bcedd5305da52926dcd85e8ff3a8cff1b5e3c3f128067a14a2e24013581a5d11edf1e786acbfcebd4f0bd77f8dc22d4cfde6a2bdaf28b6d94930e2f1f8546cfcf1b35935c7be54e9b457f6b61272cbd80e8d427b2b1dd2bb3f8dbb2caf09725c0da6ffb4e0198335ad36df58ac26ddbf91aed6604ce6f8ed06c4448ff6ce5ae945d494e04331c77130b1b9c6a2a91f549bfcb18e23a35991a1b1ee6939a36f81fcd9270296cefdff25956d03254b6b206cf28ac8a53a2b9d148dbfb5377dd936756853f0c790fa23bc35c9d438532dfe73345c96690dc43fdd5326d612a10bc440e7dea9b39b6ffb43c075597c8623e60fb3dc4c028ddb05e0001f72bb2995358451aa2d23719d4f69f029b2b801debc2811eb78090d6ce58cb52d461604ed642ed8c367e838b1e47eebb526ffdbc52e82849594457080674e5fec12a40e9358d95562eee9ccfffddaa2ee6891c2dc35aabba90cc8fe0d20ae06b47506aa027a5ee0a7e7a992511d75844a0e388aa9f5591e9d14f20cb6b98384f47135f2dd1e3b53b926496d4f7ebc4beb7a9d137de727f003c3a4b7e5c406307f2e4fd02fbd381ac0858375f5575f9e9ea870a0f9643feebf5c9b75a43c8d9c6065bad9fc9845b8a068d7483f84537bd35ef454fa73bb0254595be5183261bcc995a635141c51214067d53f57d7d898cf5c0e82b3fcf892ffeaa9fd83b4d1fdb2aae77fa1f82ff0ff023beb7c62f564da8673c6e6847d87559dc9a4080b3144dd8f6d209c752a6096bedcff9d74f1b704467fc5215fc1c1abd981ef568b5e47f3f96d1eb65300edd786db1f460f3df7b28edd46b45934ae83a1a422031434d14c4fa6728ed2ff3a2f0e6a999ac02cf1c1bfdf1d6dcecef88146380792071aa4ea9778b847351905cc56b13581145e776f124389cacce64c920dcb59eb2afef1be1ca82d4895c2418881f3aed7b5fe4306f5237712e05e0cb3787f58fb6b61b2775682208e887e28c3289c40e822677d2d25e827e1f549352131ddf3228b2e3f2d2fc1e40007cfc636d5ed94963bae4f7761cfecff2c976e3a5460d9de41fb2c5d367e1b3e674660175adcde0c08fc2a47f0ea9aefdeb0caedff74350191444ea14c4caf7af4f2b5da484455957e6a52c126f021a846f7ff564e65c838df716c49198e1f04cbef39e3b4adf5c21e14d1906acbb6b0160f9d3eb40de83477c9a0f6c7f6d9db2c38028197c96e82ffebdf537ca978a36af0bd4ee14c5ec16500d73e9a8b6cbb1f85a386a66103c001198a8f24c8cbab33ef1ef6faddf87732e20c8ba869d8b366138f50c52020cef9e440cbf5404cd10f0862ba6ddb36e16df5f937437bcf8dd9dc53cd2798e63cc25d3261f25ec2b18795ac5868ca589b3011acd74eda8e3e6b0c15269d75ae8e277204d5d1ec4775a5a7934c7b201e993d35d14acc54e2a735e722428b60fa535a1639f9e16a153199449efe09e00db171344103a2bb631ec9b103b4fbe19c206defc79fc9f5859fe3c29810bb4b9c62c3a27f34c44ba50f58e429103c243e6696ef787931a46adb3053c2845bb07a45322a7650885b622a70871566df475da94482a059308578f7d5620224eab4e25c193d2524e5b55225015e0d8b78449449964a267973422239a2eec6230ffa1c1e6685510ef4720d99c08df4145509e20226921f586dfb4cf436fba94ffdc277ba08fb1f9574b5dc94eed18456cd9db9023fa0f168b1840a9f56ecec52ff7efc538cde8f65a8d1fead9d052807cfb8568ac8187e661426d70947f8285723639598486281fed50f45862661d94b3fab7a2e8efebd4735eb8f0be5b0af3e0df4fe7cdfd28c2aa361c5ec6068b5a4ede523a0b9a95bf5c26b741b7485441f4de1a2698c3992cf0a314fce7fffac5cc7ea4971d8e06209b4c0a16190d2eeede0609ae756fd661ce87a2cd719aacb647065b46087b5bef089793c7c4fddfce82fdcae5991ba57d26412e49f81d38ad089f8f1f2ed432d3f59f896b9563841641c3e8a714de6db4cab80d2232c6aa7c51e075a4b37044b2708279e2b4c50fb6ecbcecccc54cbd2cb538d42c5d4c7de39222a27cbf4e8886c21cf602a80927b765c6591ef399c6aa6cae94ac6cf08b389f3b04dfa460d2cbf255df099aac15dcf894444606ff913c9be472d8ee4420635d712a318fa51d07b3c8f978f29d22ca8d4562a5fe48c9a401846fd91335f073992cb17272b3c26eba71b95705ee67b5549380bcfc8ad17f13c9c128197e569d329415a11e0655358868283fefb43afcebe895868cb152c017842c98a51031c5468289e8924a4a0a17047b399ca3810d2a17c540b4a0fb288545fb9abc20061562d644f31a3414c40586a99e3b3145030d03369ea0ec36f339763b1215e2bf312d9ec95351498720b9b8b369f59801eeebef6f432afcb9a9cb22c73c3fcf655247436907f2ba228457147ef1a3c895abcef9ae7aed4b63c2f88e1b343471180b4519f369d73b47c14ae7fc2dd28035ccf37c152e40259ba212358d64c1a07d5282451454d297e03893f175e468143420bc053480a41383110465eddba0956a784a39f671142ae6a445003e1aecf0c520f85032bf4de61e53eb4c25eab2ce6a884437208613e0fd3c4cf041fb5badce3e16e7c6bc30da5f9c47dc4ef17320fe2e34acddb12227f95d3c5cab1af23ca628b385dd872fb54208abf992597197fed4c87436505ec00e600c90accabc3ecbc58126369b03e50d70c9dd1c85433f4b16540fd0447c35180a41a207660e10dd7f2e50c4efc11180baa5e4232fa1fa52865000fd175899ed476a66cd30e1a2f3801884d6747562fd4985d8ffae01c0a6c71fa4c86c3aad2a458cc0682cfd242df3bd2897e19c2d9d6a7ad97707351a23c9dc0d96f07a00a047a734c729b46840f5dfcdee81298b9968e143143ab9549c4cad47d8919e20791f5c64b873cfc306a10242bbd026e7f9ca2c15e666291751a94b0eb3bfc950aacc23b017787f20ca91430fadd654b14630d33f1d3b1d1f3e8abd56d41cdfffaac173d73348c8a07261677b418f9a27080efcfd28fab7cad2a53db6bab5621cf066aac0a1e6462b309428797065e5b02c9e2ecab2695866cb412f66004829a853aec5d652c6f9b359a0fa746ba9d8211978c409bf7c1273e2e7cd5b26449cc1ae136c71cc0341ab08fb37a92eb6a69ff2691dbce4fcb3774b49e1a6a0be77bdead220cbf24c892ab712e2bc0b6a620c953cf0f31224c9c2fd60b61655ff5aed38f7a7ecd36c06cf7e9b494e6e2553680360c0fb8ffd090e813fe223bde43543947ca8d9f0fe0e431aa3e8d4744766b256954e80f73f385a9fd9cff43cee455223a568c1823c3db9a09c781d8c9b087e218bbb9ab1ff66b401bf3036fd0ac3881a1241b0570aca2198b118acafaf43e46340abdfb20103e12f2f84c2147e24eaf0ee74817202758ba8013353075fb036e8251a11c7055e907c4044f25c0eaa3a7ceacbcad8a5aa5f0fdf902e10fd8cc95a13f9e4a50a90cd74b0c905d4e9b17978aabc7c3e4f49d7bde4ba4cb54709b64920a60b84f9b32d5faf69794ae7587d0d1829c96226c04f5e10f97e70b3d2c7c2540eecaf7969f4ca8d450a65d994c53476803b8185ba368a2a43df70006140b8275ff7f946239a1ca13f316b11574df48c960006d8bc07a1b84615815f226f4af73e3628878ee0dc99a2e9930d1e2c99642129070b3f5d21db0ef46356f51faa72db8ad6f98999e374a7463c86d448b1ae76787f26a2ea8e38a4ad25dde81cbdac763751a763d0065d60c53e60390a4f47d08bc181e63a835943a8507487964adb70cc1c69db5674bea8bbe09428200da7e4f3420da589a71b6ecdb8b2d1e478a8606e46381e75d930c74e7bd2bd7f7de00efe6c2eaf9a01944485279f4e27a39f14528ca51c4870e1150c25c3739548a43a0f7baa0231eb3adb80ab3a82e15a43328e7b9cbfd239fe8d20c220dd53331745d8f9803362417a3d94753582f38f48e59f81f5d2ec8b2500877dc79c1d328d40efac5bb08413fdad95ba95df4dcaaa6f8a97a9894421b9be03ab1018631ccd3cf12c2dffc826254ce1e0a3a6d6c320dab130d7bb8116cba8e3ef582923bc2c501f813581a54b004c0a4c24127e8c637d1b051ffa0520d826a15d2f1b3f99c0e335ff37d5f147f467f35197b57a5328ffea3792d89ec4c4f70ad4e6a9af8124963b503c916c425e0b3e4382c832e375714230a2a871913998cae8ab0504e25e633ff97c5423f8ece808dee9c646b52dffe2a8777f532034ad1cc8ac098412940c8316b4b5ab424b47aae1680753f2adc4f7d3ced6a41a90cbe6cb91a7f9ce60fe766b05a82878ebe461abadb0db85f05ad29ddc948cccee96f2db9f11a160ce4aac3ed9caa3b008c73ff758c8e6db51b159ddc2d332a49d784b9bb1f6172d5c4576587df6ed65a961b4e96f5b11a675e45fa738f71c7f8e7313c987322083e2bdbcd8c7728d4eaf2235204e6170a35bee752b6ca0216a97859f6ba8e8abe666d393b70b397024493a377804513c44fcfb956cfe7a3b855bceba7eb89478b2a8d392d6c7718a4b25926664261b5b953e2d838283160c0c8060cbc2288bc5c70d9b3cb9c0e3adb26699e6761b714b69f34381ee0b9a5f84df6aaf6a2d4dc2d8fe29fc9fbd502a44f5ca8721afdcff0e216b30b9de8343c93761594306f893e304cf1e662dfeff7f23f3753cbcffb4709777f7fa07f06680a6ffddfef96b462353c8085547ea4826a1c3927516bdb89e0392ad6446cfdef2ab84e78a3dc3ca503ed4fbaba3cd520d68bcfc8c26cee61b3b8310c01b24254b811d32633b22f4dcadfaf5aa19aabdf640fec9892d186ff1622a1719e173d7dee4ad6818d49044876e1cc795439f8368b859f8d3bf976acc05e42f63fd2f441cb45b674013f38524fa71430deb546b83dfb884c985f4ee3f31e97186f95a239e9d10e9715fd892a73b713d374c059e7911ae675b509aec93f13fc95169cd30e5802d2f9753eddad0ed70f6c0e32c163a0e749ef3ba7f4c5d2b754ff3ce77ae66d04f69bdf43f06126188fbdd821c62975144597296ca9eeb719302a06a90314ab1f463e84dd0e3dafc0f3f87772f019dfe5c169271a365f7f8791bdd429df13af583051a93e25a510e69327a974971a34619f06f872e48b43cbb42a88dd3f34860f19457d1099de055477919425609c9824dfdcf26e1e82a7ee6109facab30954ad76e0bf00527a4848e9874fd09e1abcb1eb8049484dd48cb65cade90b37c1a15e473deac5b89a64f8d33be040df189d5648e8de687a2abd5bb8fcc2688b185e2bb1d740bda2c2c258382e48fd65b65ad22a728b4922a60e40694d696425dc8195a3500154521f5cf5134434fa8bda2ce71d4473f976213d0a80df053a7d19d81afdafe5a26bc8e191381d5664c368c784e7bc149a9ad13a7952f0b5cf4dc56cdfe8db9e3fef2ae976692741d1a3f55cbcd7f1a59fb40dac5defe80bfd4edd90a3623c8f01fad376e8f9c3f844cc49609c6dfb265fb133e2b497ffefddd13d49bd1dcad26fbbdddfc6b3f13663f4d02cb6bc92d13e4a87d2d108de51f751bdb7b14d2a6e0ded8969357e3c393609fe0a9ec4224ed5f7de27f00925b9e05799904a390a99bc9740e4d665b5fa5e17611d3846abf7316d86f85c4d3f0ed1f052baf59207e3f0ca1a69f554b4857df97b8116b00445107be932e43d30310b26de085ed36b46b173983ce77e1aa0811e8f25201371d305f43aae274e3bfdaa890455936ac125f0544602294ac8837a348e64bb09b373c6c3467cbc8827d21c033ef3b67aced2d1d6a88c6e8bafa916a91cffc6a6b140cbee896d2ec291512c742cb7450655d8255b1a6d0c10c1a4b38acc6296b12bcb3e4911137f9eb2529410745686b6d402cdaf7f6f88f225147d05318ce784ea2e04dce7211893fe24d1d5079c76dc3f84cdb46f17f1cc08fa0915447d0dedf7a9704771a532013bff684a6cd1928a52e236151213ca5d9696bd8546d2bec401ac92fccae2df4cb24b8a26f37fc2b9354dea4b9ccd154e26d2657a8ca898e49650611af11a0b89f11016a8b4a974e83f61060297e96f2c707697b2b42884588079c2e2db38b7bb8cc8df0a6fc6f1952bae3977528d99844a69140bc173a1114faee1d9e9a205c289ae32c768df823288ca34ab1a998ca927cb03a001cd30254e51e2b4d9c5b40afaccac55f11e24b569e0260ff1db3adedc21788cb59e1966f675f3f25dd9a70f2fb1a65e54f70fef90b56f4b153e1d95896488753f3dfe8042d51994037afd621ce0184f7ecd30018d0b7845cdaebec4cee7f47c0d279f023e549f643fa47959bf8c05a484ce74e0d1dc0e1ec133a0965eb6809f161d6e5b5009cafee0204ddcad8a7d4722ab38c99ffd88ecf3fec37d2cf7adfebf0f0b5080b57d34bcc4047f7e931e8ec98a36e46663b5746b8acd6eb1f822fb88a2d835c44b1817bc50664f6368927b386220e4305771767a3735e900aea769c10b8b4fcefbbeb80fef3baf27cdc2bed9f2a14f48bf979784271ae106c57660ffe87efb70aabf608b4c7cabb20eacfa567c52697a85744391d898762b4bb47e17ffaa6b8849875130145bc44bbee48f388380bb3cdfc535688107d0795833fb2ec08efaeab2d6598ebbac068d32a98046066c0b103ee7e4c27f37ed286155c84e698701bf84105aeb297ccac3a3e312a2c161ab2e77047025ae6974a2ebe845eaa131bdea4c6e9ed810289f2252fffd34ec3f9f7d658ce60c310428bd89cfbd6055621c6b294ec03b835484ddce61443ef936898d903bbd010ec7ee6e7ebadfbed7f1441e27b7878c9a06ab90f3f6c6dc5713db65a65bb792673b101867fecaed7ceff6bf00add8497eeb27c09c18aa57c35d1923a2dbdeb4587c73586f063440bc84a9d09b2e4c824c34fb57db3403314a2a4c19960c5e0b5f2543fa296b812542384acc673db0b982ecdf2b455e2bee613adebb2ee57df81dbf122a0745d1d53c91b25d506ee84ba9bb523d1609263138e7bea58e255549a6ef6d8e75d612c5922842a1f42a6a4a2ad8eeeedb69f2bf7c5977f9605877e686130fd2cb4d27f70ddb562cd2c9ec6e64aac957c44720ae16e7151b421d43dbff2687e6626fb95e311e95f33dd2b10645b38cfa6ef93d817a2c96e7186ca2b3095681798ce4cb2d4c5ce1c2bc5332e8b40b93a444c240df06d541963d52daede0d6d7dc7ef5eb216a8be943eeb7ea61cfe186097afaedee9f40041efb2c2a1334c2260f29f10c35112c6ed8b58320a0440bccf71f1bffd3b6ceb79792eefb9380fb8847bee4fe70197b6dcae6fabccefa41718108cd89b00ade1794cb35ced57f9d0b39196efe9a4654673437a4038e8d9d1673f83b683c3089827958a518d9a622c96fffd34dc20020a2a4d843d0cb00b0c0bd9f25629746bd099143b5503f3eede03d379e47c9949e470aec0c30441c0be8e7515e02273b7fd675a673c0e8db30d7ce09711611143b6de95c8c077de05690c6dd316f6252a64a426289f48c35d901114cf90d396a4fb43d73241afbda52485c5355f622895ba3cbbb5bac07765b044c2264f8866e997450a38cd6b1c234723832dd0116bbff6056ab28520a5df4ccc3377ec8398e2cc5c0e6a1dfc1be3eb2e3d07767c58403ffb4ad2fb6f84a53f3f13236d30a592da6597b0ba7bdc69264477daadda5e5db302ed548dc12f794f24672845c177cc21dad3602d213a9eb5e0caad6a05ef61d3664ebc9f1a966fc91f8d0587bc5b1f71bec8bf25d78c337f98b6ec32eae81630d92f45edd9a1d5971d643c9a190af430cb6a18749fbfb210a0ee793a0765d7ec4bdee7763ed62f0fb088dd95e627794338f7de2a0084c2701d13e0f0080ac316be16764c62c49cb538421f6ea17e26a92cc3ff3d55fca44b99715b6569f07caabb74eef9b776f55f6a64b870e867f9377faf97ff1c6e987c3adc7b8d224f4e81a3fdf9311be56a11166f0db4e66addc0c25d243c8388bdcb76f5255e78ffbb51773520255c0a744e2a7e56bfd8a4ab3eaf4ecbbdb5a6d6cec0b1909bd924c269fd6fba9d826ddd7984f8e75e21b3ce036a96f98eb4ff4c072ce2b42ced7421a34d35f4e31c8a714a1bea3d6ace450642fd8f1f8f5e47a054bcaa78daa24242e1da27bc7dce4b5516472b4b53919f74217c0a34b3664cf2946e180801ceddd85c177c981fea63dc3022bc976d527329487b8365f3fdfbd691e792fd3e916637d1fa6f56cca6ff1225ef8b388022f7a024e4ecc144399b1f1b4516adfdde4e062e873a977ffaea6779f46a7b79747829663b73d2dc11cff27950f2c8229170fb1cf3aae43ba9b04afcaf86f66efb99a37b89ab5dbab541401bd27f4650be9c5475ce6931404275d8e5b144f8dda52048efcfcfe54c9f2f8a06e01406ea585bb4a0438d3fdeffb03313c82afe7ac06903350fc8b7237e3336d51dd84f20fc5eb57c4a964cb0e5edbf55e5cb8e20098df11bfd07338bb8a09605a4e3d794852ef2c5a6e49e2e744668a270103b0c47b06fd13c79f39f5f800912636b459cd31fa39e3ef2eb9500bc5468c8bb950f77d0f7d03bc91cd72d5adaf76d0ea33a919eb0040d654535a15ce34c42c09a8a8d778b2b1a56ab41152a787ba2be76b9b54ba4342b61b46024d38f3e84270bbef334e77d09064f09339498a76d0e809da250f4b5f3cc207929159ebe8623d751036ae3fdc4b5e42b3726cb37830cd35c2f8df51c3d0a8fd8e18bb9c3d30f342ea1c47f6204c1a45e5e1fb3e95fc353b4c77e33d1239b9effe48313c82b21a10d493c75dd0676f378b6ee12adab69ea37d7a24bc66f262d1d6c2529b3ed5e0010679ba7ef47c1c5aa0c18e5d1f43973fe744f7ba4da187cde31112d2d78dce8ac142613e503f4b74b20a7b2743da2a830dc8fe829471996f29b05340be772cece75fb7abf9390fea5c63a1325cd51fd1a63695364886d22032cb3c11a7d15285252a9318fb26c0b1aae57af3094a18b0be8dc03b385efbb81b3d7fe8d0592661f421f0510e6b0d4547bff045ccddf03af0299bdf1e11390fe3b6194951d49fd1193a71ea47dbbb98c6912c6bc60e8f5f3580826ed32980ef8636d87de558463bdb44c824dde043d484ad48f3303b99c3eef15296724459bbbb857db64f1e0d078c392bc3ec5fb7c3be12eb4a872c1ca33cbada45d2efb8e111062eb508b683dc3bc5a8e33e2dc807883c0b7fcb11c2b8ec1e5b0a337ffb3c1c0645f2c3fd3421ce536438af44239722215f41e7122b9624de9fdfa21818871068cf7c980443cf36df230573311fc882ffa10ec404867ad00728cb6d0c97bdc3fff0fb5331856878eaa68e108a46bd3f5cd5293a9c8df6e67a969ebc32f4d7f78b825290ffb4cd07fd37b350f44a3f8b578b5e1e11d4cff1258e28f9682a3fddc9a57c8fd24e1996373e0fb74aa7401566bb4ce9ba74c845e9c5daae30b0773ef6181735fff120103fef0955206f985299b8eb7effec32ba21993b2fd5de9c1391bb2da103fa6c91461a3ddbe84dcbf20ba9c85402dbd90194b48a4a03bd311834ef71b9049db22e30c69693325511f7832cf61c9d9b635166ccec60af5d2e88620eb5aeb82080520cb33d244640106ccc6e1807abcf07f10cd3c7a662998b6b34109b496c3de7259b2d5d4204a94b2dd8c4af5a8d90eac6af9b785de0ef7cdc9a1aa90deed84ef69a4e23650348c7ec5de0ad662d0c682cffcfa3afd7eaf3cc40e094a1b86b6b841123ecf70b9ac2f48649d7d4fc06c60d1ed7142d463e912ffad3bbcd2ab51c217e56367415fd2c320640369f4eb02e5a119bfcfc224b44ee46e696eb59fa5aca54be9a3a914a251a578ff753980e05440c26269bf22623a753302c54de7f8c0e04a2adb364f11476e9bc9d8d39d2bf826e0edfc56e676f6f5c928676d779bf4eb415ba87c1e1ccdf3e375bc24ad115fc2b90fe3174bc998e74072879a9285fdb853fc642f948293d8a16f4125fcd5ee243480c962650502e8c2744f9b8511a1e89a406362d9f15e135185218383b2c314df4fd8e7496a3fbb7ca0b9e842014264a2a47aa2d58c533fcc00d9309fdec7ed09148a62fcfa9391ade43d1ec6c7ce2460723b6958c9501ca47ca1114e36e670dc6fd8c8c9ca263014d8a5890d31fe8ebcd19e615a841586308d1ecb3a46e2c5a9646416fb1b9a9e95c0050803a81f71e8cd7cbf2eb07d3bbc1a5cda2f9855eec976b45bdddd71262f37443d4fba90bf563ae8008eb95c9f1a6a44d855b7a5def6d4f5930b05c585e7296df214dfe6d7ff7f8a33bed0630537cff9e73f00ed371c223283208a2ef1e62214eadf2bbac5b29e4c2d02efeecc0ade1d151f8b16718549f877d4b11c70e37b0da648811d6a58d8f2f7cf69662c80c3cf54931b278aa44e8c7127dbeccf7aa949e47d721a41aec67f86cd27944828ae92cf65b74d3e172444d9fb95ff5e6b38f4a37f83f91b328d6c4cce07b1438fc9f7062a4bfa45523a44f86c2a82cc0984891ab5f810939698ddff77a2c658f580cb439fe6903c0b870221ebb5f448a034cad0603442fc7f8aa42dee13deb7a15a7f9d4bff527c23ff853fb3459195a12aa87d2994238c37053f18b440bfd1ede2c86f589d13378a73034ebd4ecf4e8c1ef2d6037abf52d287246c7f90115302258e6a20f52dae4361900f48c3b519b9477f9045c6171aa72ffa93a7d20c04828d078fcc227fcc47c0da39fac8a5133e639c606e6b7a32b46d57b6733d7d4202aa1a73f0f72ce2457ee12fe2fbe2fc26c3d28f14b2ccb30087c56b9f47b62792eca02f7e54137583c6353c95dff6fe679365de79e211b447d2eaa02da584216e63821f73c33b3acfef8b1a7a5b1ef6c0ee712f7dc31ac7b308604dec8160759c1a6880dcbe9be5021bc93755854d9624a534d09bb00285b294d1452348141a5a148f33ef7709417a8e1c6edceca2fc2796ffdc708bc22d730aabcde2388603fc50c91f40628c5e2cda118e47b7848151647ec343cab8683d2a7becdae4c2fb019216cc85826d335b0f654352394346bb651f08f6bba9f137b793caff3b8373b1d740eb28d4ecb0cd00d59022c357da3d18338c150442e2c416d7bffc1b70306c9a2d2e380006b09060fc95cb381a8b8d990f9bea6d7c43b1f889b7a952755b69abd712f51c860de01e949246676ca91ea30c3a45ddf0ff4442b59e048e5bcb08a6b01972357d537fb8d1f5a4fba8965df2d05f0cef9a5255757f36e2fb3f5dbfb8dc8399fdde1918b559d3bdfa444785ef499810986347afb867eb766a01439e00a20b00c634eb2387f29bf7588ed78a2091dcb54c4e071352c5ca7dbb1ed41c63713982922413883b5c8c52e493bf2e4540886b64eed48110e01bba10d32e7a150f21ad66aaab2621c80efc7918b3914f7ce489aa0d592e1701004e784a8f93766da0f2843e8076d6d47c18f21cc675818b1e35fa6ba0b534910d34d2e42884310e73562eba9fd7d65dcc23fc43699a87173088cdf5499963b754ac9a9e6cd7e98aed3716eae1b23116e29c370ca65b81278953bc009446f2cc8ec85a7957d157a6e05e9585abbb926552da170a3a57fd3f09ad5e8b082c0dd7f19416072dc390c1131989c0c9f8e699b5ff38d611d27f5a2e532b49594a4a5dac06e890be23b306ad22a3a38ffa20f0dcbd6a0136836fff99eb9248abe3b9cd128676ac3950012bb6b1343ab9ef40d26c4a59b9c0131c10a06cef5d6f1c37d0bedde98ca8576eadf9d1ddc21b11a7f2198477ef42a82cec0f703a2bfbec57b3ab64fbbb7351ff071557ab05feead94bfc1ced0efec90df304ffbe44c93c3530d449d9651471b501528f3028b3517d2e45d123aeb6bf4af766f6fe401d836c121eb32d523943b5a4f561d350ae4409d30492c1425ef742f52fbdc2f07fdae3111b750718ca49af7ee67add4066baacdabfe386ad62c227940bb6237ff7773f6ed1554966f0df829e808bc7ae42226a5223bff04724b1618c4bdf9e562bb166bc17ff8cf81fe957a5979ec17b7e5488f625049e51b87f7d2a5c6c4ea886525870046b6bb3ad11dd27e8be75184c610f0b88138b85d17653e17688e0ba97274c242a4f9fcfbb5bd2570ce8662ef867201ce1d8bb05b0ec4520f42fbd6072343828455dc797066691b8f6f85e8bf6f3cce9ccbff35f4dc967325c33eed6a6bf9e8ce953465cac5cd4aef568aed792c59d482e85b414585815cfda3ea1eb9f82eddf0439baa375ac2b9bd47423ed9360a792c311e7ce9bb2e2b35df8f2e22dba0a9a1befbf77a4152adbd984ea71f26db47210d5bda171c960f53ebdd5c42f7ab7732cd7ca838e1b7d80eade188248565997bf693ba8198ab64a3c0bf867c7770298ed4375b1b43a58a0ffcf7714b15d905c7cce9bf502083a8fea1caf754416fe2e88599aa867127aa77bb3e3c74330ad08cc2a0fb898e6dc59f06fc7422500b7c7670d794665db97dfdbf53277da5b49e0df8797595f5e213cb4036cb541e6ef82b2bd3218035f66089842a0fd3c339dc56157fe9bbf10694a7033bb11100ffa2aa547149b37a960e0156f8a4ca52a05df078662b6c048963e2bb2e964bf8b5846e4751ffddb373a20d4a7e3fd3ab923dbaa9a2fa48016d352e02b09ef0455c73f0f06d6be8701d60ed333c0bf13dfe1b82ba7810e91804903ff8fa133ea6047714d82e74e1793500a4fa3e102520bf74ae7a644bc29eb064200263447ae92f243a6744c6cdc440b56e15a57deacfd6f7bfcb40239c4559d305740e5193f524f217f5ce43e8d85866627a4337318e3190f9f4a1c7364f083e76f66672fe03a0a73b9b26aa45a3cd52d99ccb9aba277440c1220141d23964193b0bc12c06a227fe92f2e73aa1bd0fcea70bbc53ebf34c46b68acc6679c688fe6038892d6e1d605da889f539b7b7cbad646d72f2d8892b31ebea588965faab882e5bbc056b0341243ef1195fb716f19f0b52aa37d40307a1bb7394139026c11221f989c0ec2a8fffdeb1bf8f7b3eb2681343e93934a89df528fec8f40334fa75fb6b7e71123fe3240108601e7351a6def27fdf88ae45e962022d39b9e1dbd3ca1bf4fc67f4fbffe59855138f6a63797f9ac30e2ba7752f8632f609d9e243bd365844104b96b577aaa265a6267af55a7aa24286fdf01d8fb37a0ef1db2de1e3d83f9fd8379a00cdba2c0e57478c953065a4e5698fa583c2433f8f289fc47ee39a10bcdf67d64244e9137f9258dae7f75499904f9d10aa1c53d1b3be25764c8078d6b6415be28016b14d02a3f4e443a42c885b4161bc8cbe8b1baee76752473c36fa3d0ba085e8c2e880d105db6b08958607674f58804f6cc22e1d8d9b08458cb5d1ffe016eaa40110502f414aff45e39197ca2495597c81ed073c7d3933de17fc3b7ae704216bb607fdbcf78adf807f94b6b9081583954eb4b4cb8df945bf34da40d1084dd66efda0f3f433ad3b4ee9e165399c7ca792c025619b87c73160c2b940f44275b9203bf428706776e05fe3a37c62f6db3839918abf2de27c062fbe335141a43e26e9f80ee58b6fecb6ed5112d4f42c15762deee22f44611e5df5c88a49cb81c0d47038d932cd453f9b767f86387b2bd2c4511f5ee4b09bd1e5c7d35e4ccad0b083a89f5ec0130a09a93d33b2be47eb35c94c4461e8af51fbba6721b7faa05bf82a8231197fdee2320cd9a535f0e8b3853f8876b6a6d338a0e16f329148b1cc3f18141fee5477f969497c92385890d4a98774c48fb2ca3bc76a0512ede4dad728594f44744bf4010e24857b326709ad94808a1c381e57492e5082c10b4808143516482043c58c4860b36ca60809ce59d6e21fd77bc7500962f3f83c6da5d7008775bac24ad32d1169332e4955d7b95f318e8a04bc900871c30e6f77039b0a167d4e830ae65c7b9ccab34dd7d389f22765b97c213dc4ead2e33ef181ea5a6e8d13b3e8aa512d5a58d9b4584fe700f45fbf955819c2226e5c5466f4d3a25cd4c7f4746ea57cfc50aad68d64b3076d7a4c891c5e98a10391b2dc7f814d417b93ae0c1a9fa9a9ca9d420ac7f7718dbbdbfacb5b765003496535968be0fabadce84ae3ad2a2c9f5bc017a86a9628a35034da490d5cee954e31423c78d66e96182bb3b73f0af0036565dbaebd8becb597812a3a15aaf1f5c9f9ec809ed2e3f88ec2241a6362140f416973c60f33e58864314ca9956628b34562a63c7c23c81fe53f916f633951d1a6dd64843ee0dce4f7aa80f9125e6a50aa41ee87deea95281545d06018674d803a4700741fec570c016e517207a6d37616bd22a23bb3287beb101dbacc9f5802002641e68dd0cd4347a5559af124067584e9877643485c8591722b94858bc043dc20d180f78bb978d9542029089ef74d2afdf113d2a2a27315ed36c01b1924ceef07330edef7ba038c17068e118e01fdd045c0d988447c66a458661717c9efa843d5060b7622f2627e4d6f67e7b1b802a9433d2ef2e17a77485976af9222e4b69d21e90b529970e991a00d91519d125fdfd62d080a7d2926a4067940c4959a957404da3f363d91b61da2d8fca69d0aa7480551e82b8d602ca0eefbe2809bbbed85f7f9832e2f0aa8ae96e8915380bb2fe6dfd045bab23050c9e9d1f060657af531a041469b214c8f28f328a1bececc8fcbe44edc4875b057fdb69a089737ee30671132c5785d1379598861e16fdd8c6621f482ccc4b19f241c04161ae074492fcb5a3ff65cea5eefee5cffc3b830b6e7c0c8a0d7af8289bfadb09231577ba0b4d2fb905b1e46661a79664ac796007466b8c7963787c4abc3613ebcd9204495aeca319c909e17eb9c3cd81256d4bf0a3032aab11f70b4331462929d334a00c9c7e0f7c2e125c466ed63149b19be8ccf5cbd2319ab53ef50a0a739f075025b0036c625b190383793cb6a24e06d066e97f541019ee2b41b31a2a239a2f6d0bcee712437eff5f94ce21c9e3b1b82d2e454969df244812ea5b69a03e011c08beaa71feb51501afccaaca150af8979abdb346b7581d1f95528c5bfeab00f4a06d69f3fcb1d8a573d05faf12a6ee68b772b217a6f5f18ffd9e8f80c38b6bc7abf958439d54d1778ba1b0bbe26bc1512312daa200e523a8987e8c017097551a4308304abea29de6ee45b563faf2f5f75892c5bf9f9ce75983c9759f17030ae0ccf6b28060789b8ab2cb0fc616c28aeac45835a398f0c0dcc7bbf6b33c88029e5cc7da1761b6d73fbfd65e259dd6fd3908580e4ed0199a69bf944d2aea94dfe27edf2f2f760e8b98d9698674e1eeee5862f71e24ef7593533bb6e3bd1b8d0bf07ade438ff3f82d5ac9e373f2807c2081e235b9e4bb92617e222ec4bf0903bf538d1769c7c426d10b404e30914e86c5bc899531d5ee593509762dc1cc5461750c042549fe743e1e9ec70fed3ccb1de8e43131ee0ece883ff9dfa5927aa0c485776863c7b5f2fc6f912b1979aa49044806a8b43f1b947106d9a08b6b27bb5881668001e4277d2da3925d3682d6007f19e0f3b3d8571918b7a652235f5d90a186109e98d53d8da019217cc007719846b48a3b98b4be39151567532dd32d9c33c00859fd132e3f2a4c5e327626ac7c604ecf07328b413d9c93b1d470e4fe21ecd3dbef6b3400120c60842946fcd53fa144dfde00b2f0c8203427d7f88bd04986143cc633971b2c667e36e9d9bf4d808464c496cf82ca93fca40cba3e63ebf893a495ba46c419b4f8cdaf964b69dae79f897dfb2a11cc08bf840ccc5494ea9f602489a714947d19ae479f3edb0837fb9ff83814fe1990dd5563b9e0aec7d5751e4e9dbfdafd70a635a6dc6d9d59816385fafb9b152bd04e69bc6aaa3cd32d2d064b6a6864a873335762ffc298315442cee4038ecc5f9e7ab3a0d620b2cf27f95e1b66087994abf1d0055bb97dd1d3edcf99dde50dfbc7749df1f1e4a4d68946b0d2da67f7404dd1d8947b6183936dcb3b777db723a23c94fbbf208eaf5a65bc35aa9770ce67e9885e6d6d3e0bc5c89261ed302fbd24cbe7225cd3127f6eb13443001ab4b9be680e8dc81ffc03ab6610b3a23c46969aaeb5b63df4559d0df53d16c3cc48cad7bdafd29b30edf1278e2a2d314ae9fd13e6b58c92fe95e4670ae9c8eef5cf52af71bee3921f16fce53f426614d6daa92cfe2bbeed4faf52eb9a37a81b6a3cb3c0c548290624697cc4215fe013b5061686e7f918028697941dd3bb47efe8b8507d4cc8dfeaeac7f9c7002d480230441c746652559af95bbf3ca925e4c20d5a2ce913fda3a9a071977f2ecc9cf39ee98796df929a26205bd1f43a8ebf3f9334275e9821008db4bbb4c4a8f0aac0d3e54ac0e76f99a22868e62a7d7096195f4bf0d40cd2ec46ecfed514172b89eb63640211a146d3a0f8cfc82b2f3455afef2c1bc0446cc5bcca27a3545fea4777ed6ccb399dcd719d5f5a549b8b5246e6ff81450ca5fa047de9c6f6ea8f93c543596686e2a08fd86466d9c58a1d6babb45181a6d87f433a271839c56a33c4c55943ec7f3115c7ff4eeb4ce04e76be29c56fd165f334602d3e433385e9639eb53847cf3dec9fd0d3b8517156a2ed97ebd5d994d76942f6c57d9e86f8b740c8f93cabe45608e9c6479be60fd8db0576cc95cd06387b19229f75bb82c11fd32996d128046ca12b657fb7f54b91dd2b66eae812bdf971865003737ac07f953f3ef1c753b223c0635c23d0e15fbea0088748b3860ccb54781eb04b4957e851646e5c69893e2f3bfff7b3221dee358b78c7887865d51bea7f37fe10b61f13726acdb994d0c554d43e739d131194b9316286d37f3d2b12e75f65c228a72b4382e7c383acc4b4b670a2d9287c4709ddd0f8424ca6b83c8336270f417fc6904a57440162bbbe080a1ba034e264692c2d298d5b30ff50c1abc5b911ae11e34cf1e44c9a7b7d633f5e94950463328ac35afaf3e7fd99366d0fdf57979b7fac4441218630a7249f9d1f27872ef8c7972929fcb5cf271fd3f5f986fa394878cb649c1114a10493342fd6a0356fe2b152089fb30bb2f4f226d92f2ab9d6f938a9dcd487ff9fe624e49834a3c527b5434da89df3193568cd524b6ace77a4d69f6d6e14ea24e87f3093c1f438a3cf267d85b651f1d7cfd7e5a176c9f5dcbbef5805654c9421e6380597ed0d6912b4ffe88e2a3856a133d74a616b7ef75363a9cd472ba9b17fc2963e89d6146700b3b6bc31069d993f4d7f627b654801f91730677a49295aea30ad746b1fdfac6d54ac854665c4ff5fd3de3b957abce291f0fcc2ef47c748301ff87c15278dcd4c4b0c07510d8bfb400856248ce22fae0b2061aaf00ace98c724410cfe3ad6068633dc514a80652de101b62e77698a7205214a46045fa2eb18efcbdb865815c347f0f7f5fd1441dabbc84e62000c200824cc1e5c7ae60bbff0f3a9a5f566f4e16e8593e0896c4c9fd99a528f462f00e86435121bdb85b8329497b357ff1ba98c06442b963fd05217f77c914542f472ec8270d17aee2728b86d9aec4cfa479a513e2c6698740e4a51e8b1dd66e422c821fc12ef03fd3a6ae0ed51adf6bbec7e5ebab0abb2ea26db200b7385e8b4b1f4efa0576e17469924361114d83d3591bd6ee5c8743420b986c96356900141d76d77200252e40b9d25f6effa02483730ef1514f185d18bdcd27291c3c31a2d5dbdb2f424fb3fa15b24524c10b6e6dfe114a613b784129448ebd9bce38198714566d01adf2b35f84b249efe9aa551f41487ce3ea179a7afe7fa990f8c019a6e47bca1571576550d13c68895bb4c3f4e5b6e90d2ce3207cbb9225c6e3d6dbdf3dc9c0ef31b2883fbcaf384243ce5c79cf9743b7dd3be68c81c6fbee822b4400cd0d49c871ac42b108953ef2d606f11a44816e1e02910925dc6a4c45513aebc2703383485312dcb6443dc9417aee8a5a81f10611e10f37823281b67f7b47dd20e871a0af0694c37023a4f4e9a4b80d83ac65d73d63043a701d816be10a86c8d1c0d8c148451dd8d59112b2cfdd05bfbd59c7a06f56bf5c5fb2db886d7f1813331cb1d10dcffe6a3d5410edbf648deb31b84f6fa458daa811e604e69b338c6507f22fea30b62ba5bb51ec018dee398affee7f7ee0fb583501c9ab4430e11b2f2bc6371e9797389b09466118003d2e78d01009fa6f43d7849eb21ad8d0e9b5bbda9e9b76bedb6235f10b473cc29c1940c2db05c56e1130d43649ac716ed5fbd33e9edd0075cd5a246922a786176a053f86c537d28b2c9efbdf83ff49f29c480676601949c17ba73d68117853b6b2393914f46cd9cc80f9cf268fb2865cbb8ce13f5c26518c384a47b4ce5b359cd636ab32170bb27933d0b2477875e63f85a4f93a6100d68d4636443931caa51b9b399f1da0d4ba3a006e9bbcf5c68cfc0ce020f15566100c655f23846637775bcf822f2cff7ef5d0f5b1a05e072efd99ad21654d244fa0d2c44f03515544a664481c19c8314cf21774cbe63f597fb3bd93c0bede86ea43752355ead639f6b757a0c4c49f6604215e45006097f8c53a305df733b78dc66bc2ee2b849a5c07f5fd7b34d3241f23c924f3c676b1a41a291742ec9e247dd135b769c9b7b80763b827b37863146d9f2f4f13ef907957c6018feee2dfdbb1f0684f9ad54f29b913a95187df1f18f06210edf1c2630b32077535b95c6bc3bbdcabe5ffc94d01fe75d06a289fa988e2c9e7eb5abbef930a26de8b34ad5d5c99a3abe734a2eefdac7d974aa736b00aac8dc3d960f83c95dbfc7fd409f4e0e2e3da592b4a34bcf02ce135804ffeb8f43b78cabe5992727eb1f63a0a913736da88e0a63edcb1113a13eb7136f7ff46119b5ee23e8d47822da8eaf8dbd451d3b9a5b6ff5922ea3b782ec002b0ca6fa1ec1bd8b2aa972e27852232de5cb4fa48a2979c6eac1449f67b399dfd8b77f02a792ae66fda91a6c6e817888a140af0562002e09e259b9db80bfffb39d029865fa4c558945c030f507f037e77bfc8443c8d800b88ad1c13d8aa364cb61040f8d010be7b4c893783a739b3c9f45dbb119ccdd9e456f11c553980c8bd107bb853a07ff9b586904ff24eb1c4655ca8d38b518e42a79637852ab9a573236d726cdfedd394ac0589d13c0f3f78fbc203b8d19e77b53234dec118e01fe42f687f4ade22cf3a68dd941b62e4c5189543a9f4d05be7c15553f26039de84f173445e381177c3a8c80b1a5e0d13a585ce96e50b53adfc8f109a9037137ca8bed5b8ccd46e85302431b69b6fa471fc1c184afffd838beb4ee1be72ada88f63970e140adacb05a06ede2ce04a9538ea7fa07deb797c4e6fb9411ef805fe9b287a663dfe7fd2bfdc0e61e8c7df0e113af9c0778eac0d63449830aee78f470c946f959b7f434c741dd7d60d2560c7508f78cbb3b67acbec486f95bf13247273adba2c811a61da87dc4607aa2eaf7d5eaff79589ef82c1adcaf788fdebf7eefbd504a322a6e1978a095ac2251ad6180a9bd7160db953137c380e5799bd610b5091bff36498a86fe07e1dae6386f097987d532476a70b6a51d82350b2465eb06f979c3adf4fa1561928243044d069288de875a12a73249d9dba92617b389801ddda74dcd00dc6a1f7ea1c3faa71d99ff7001defe445351c8eac5b202811812655558678e2a140f9dc2848cf0f79254e499125e186641ef3105815a4313b1581bf813ac5bd37a3a0ed3650224ac97739278fc967b0b4113d74477f80c94471fa7ff8af9ff615429327c289f3a1757874b4320059fb5296ad3c556623f96049f42b0500fd89257ae145396e03dd5b2eb0f0a9ef91d3441cd768956d4c62ae305c08ea7f01524679b00a5a15ac251b74cd223bcf1bb5805ca43e071de35d2fc06b48065c6002397bd4691099fb513837e21af96c2cd638c9d49f1e8ada14233c600aa872e8556a94890b47d720684df826344cf1c0225107f9455d4c45718058dbf90b61850a4d7f57b47a3d25793f7ddd1dfaa1af03f53e521304cf4a63d4259e683bb60eb00aab6a34bece0b5785091aa83c874894d2013ea5950a185c0807448a62295dd196ef1154bfc8977f788ea8be609b6f56415c7a8ebf2f643350b201f1552c4720f053386e55966dad0fcfd63c5507a029d81b38ec0c5b7e90916adafffa7318b086852a36d2e9e963ff3ee9a0b3488e65df7d894391093a37eca543fe3b8fcf48f679d087971267014366e9d51280d2c1f1d56c5cadbed0d1100c874151ffb5a74723abfe6bbd7663619d5375d22391d31a6a3b1f6cf5d240db5b9bcb36fff0a2e7dc1a6d39bbe275e1f35223d63efd4d594fac050e3b7eb79bdc090f7eb29c666c7fd4d76bce22def7d9218fa12a75344b6e10782ffc5e1339e8c9edbe6912fc1f361748f03d56a323249e539ee7d28faba7e5c639441f54bc8ffe97e5ed4e10939ee7c1dbd3fd011f4271dcd7820d56688fc094b3e7d44b0b2f24bde3fbf3234edb4c93f920f4889c7e09c1d6dbdd8a138c638ec4e3a52b46a831e58a647bb2b4ca49cddaba301b848229e8ca468c449fab73d84f5744900bce98bd289fe7f2d46158d65e16a0f925ac476f6b46bcf52f7972f1d2477de2a63d1f9cb9769fc40bc5fc8440c458a18977ee00a1805a2015df979d3ebf318b7df485464e9dd3613b86faf77758f612d26e1d50bfc828cb0c1da1c6ba6808d725fae0522f243fdd5e97bd6e126fa56dec82b32a690fe1e89c64bd0ce42127efb2882dee587a3669846c094acdb8543d736f71d7363f2e5c040c53568bcc7a49520880f8e1298c2ac84045a2e96aa33ae886df5af218031df576a3889ff15eb74d6ad179f4cfe53b9ea2a63b3dedddcf0ca670a0710c6f7ae5cd6d39a83826bbaf041f2d903a7390df630a4b52ee5d2fbbd4e0ed45c948df67970e9c5905ab16276d748c66e88538e8f9ebceae0fe5fa734a75d6c225c593bd88232595521695a2f94d0dd431b924a9c48f50144b7ad3019f03d771efbf5a9ecc54e9a7b951aeef263584de89cd527a4df63a7fc0a422d5ce9dee34af6ddde3c2bd52734c37bfc94a528806e902850a3986626ad76a0ef76192c18b56c51e25169b2064039148e976512b26138fc9359ba1ef715e1668af3a67bcb4b572a34894b07270fd46dc297d75123180b7e4317723f80ab187fbaf03387c7d0f2925f3ff3438c66f41672b023267b005ac8fd5ba782b7d9cfa5841c613742d0cfde7f3bfcf2e02f5105612d066b5f395de08f001de20d420de146663f7a4e1b537dab7b50086c6fad3cff1db89274fbd07d6ed16aa6dbd2c5ada51c0900e04497a480f3d9f54acfc3a38a4bba3af5495ec10c5a0cd3a686ec3efa0d991ddcbe3498e9f2a68c254dc4bf8ba70897b1e94f399cac4cd8ba4e0bf30a4055c596b2a13f24d0c859c1840393a562ed65039e606b86a7469681e436964287cdf5abe48e5ef983d8a086e74b2b1bacdf28c6b16753990f6b054680e9567b507b95c1e45ed43334dcab3f3e517a9edd17e74478a8622fe511ff758bbb30e8e625b00ee0682cc4cb606000ac68ef45677beb04ce32e115244daae104bb76c088ff8f9d138a3a46e43942ec2740a2289c6308da701a72d481274f10c4beadcccd3a4540e9e9250be522a857ed820ce6d79788d1359d609e48ff3d63d409d0027f0cf15169a6f70f24d890f0b7d7bbb16c133b23215d5068998480b4c7ab2589744f3ae45d92ba94e4b840d40e256a55c0d27c089796f7fc101d457699fbf562b2800f810ca45b15aa1092e9e15028b385a389268199493665628a9e32c54a5d9e3155e7b768bb33169f5555755cbe009b6327b82aa9c4cce11e6ca43292e3024b9a2f5794904d51f9994f851c58444c4ee85950120ae89a64a209fbc000b441c6b18db7856d487f7d7306a735dbced1af754f75e8f77d93426fb17badeb80e82471093dd8d339d9bf11573a8626e2aaf4af97a5ea612958e33fb702bed2bb43676b2070582b580597454e7e98583d6fe58c375aa5a2795e93b96cc3e001ff2fa0df8fcddaae70a1ab9c15d6e352821f3d7e4d4f2ece6646a65ec992246b3cd5c7597c084bf4983a3b5ecd5d4daa7df568856c70e4eff6063b673fd658bf16ba31e0a10551c33cae586ccb10d42c4269d1a284981002c3eb143aec6b705ae9612930ac42d42ca13897515d613490db1aa3f8c70c3975e6de5d59023b7081a5fdeb8cf92eef40fbff6f71bf7558542474c6cc60d603ece3565658f0af6b79d60aaa29986cb5281f6f3a74a3c705efae93cbef884949a9ad8e19212db2390eb8138c41526a79259056b5fc91a46d74467f66541baee1552ce2c149cbef06eca698e02711703700c72c2941791aea5a10d531fd3fe435f103ba61576353f2324d56d61a205c45e61f7160420c5dfbe2f9f65bbea15c6a734aac427fb7b0127830a105c9e40b226ac4cad7960c7c58a31cabeaf9fd58d73343f44e6e5c357ecbc4120e20959665c85bd25804e3d0e1585abb5b07ec7c56c953ba2102b5cdb8afe8686c6e9f8ded45b48c4b940b922355bf34e28712855a254cf75a9e67fda3e23da0baa928ad0de644415c99ecbebababe8760a98ca1032fce5565cd850f0004e8c2f3f26fc57df682f6f9583ae6d51ae31e146cbef89beca4a82d84637f800b5f2bee9f89a874cc77d73ad031a3595de31f99187de9f9745848a150e102fdbcba400cdcddb91137a9872af7044280f1d0a946a2959fe9867b5cd12e48f0ba9ef02fc31aa01f99ab318a39d5c4a59948590e4ca9612fd7c85485667aaa3f4fc21fca999de9518e1b60c0c10d93c334e20b0f4053181d07985404854aa11b7e9b6dcfd9b41bbafc7be40b3ad194d029b75a0b08c1eda23ccd509b750e7466fb29df09db370ee61797002d00b30d17510feb87c6dc12d2cd56d5efd153bdff0af430afb56985b85de829ae3b6bae47820bafd67185f143f65150e67c28d4625b5311ffd26d53375d2135d27f602143bb3e33cd3e38e056b6ce97a70b9f5c984cfcad11efe1ca6b602a5807309a323785dc491a56b0b14b802a995f1b4d4080e7a64fa0866c0a5fa36fb5ac7d6b24f8b5a742fe500be2dc96674e826b8783e5e692b2d0c5e7b90724c71b823424a7bed26eb9ad088656f72bddbed0d612a39bf949a18f6f217863bcfb27a669e6885b6ea5e62c1898c2b3d688f73247a74ca1a328e3825f76f3bb80fa97c1897f21ddf483967db2f975070aa3d38e22cf72e638751ad810c6e8f60f08049079339f0d71f383582cf7fe0b43ca43bef3b726b97fa69b4c0411d2ad9a087170c411dbd7cf71ffc9844c4d12c1bf38ccedc4619ec7c1ad41a368bfd0a2f99049cb448c0b5c29c7ce0f7bf958900052f4816ff31d7fe6eb2ca8142ebcff9dff860c56eaeeedf89e5efc6553e7a793eaa72430422d1ac5e9005cdf5ab2b654caad56ac4802bfdfb08e39dddf90e5eb040fcc5ef927cd4b809d6b7a76164c2aab84b651cf8e234c313d4efb6a1fca027b493f43e5b8d0c0a1330d185e0deae495069f604eb8edb66910d88baee181354a2a39d006cc0167ebda8b961a8d2df23e87cd94b90bd37ea14e80655626e1931cf2cbbd5983db0f66cea7c0e38f0ead245d9ad9fa06464569f4e22ea82973ddf38ee2694c86552cb3484bf883fd55fe00bac26880ec4c1d860c85fb976e14afcee7826d483fe53efc18c5d0ce0458cd2edf2b7f3d108476b3575ff5f79af167898b9ef3201167776c68649bb8c3425fb414b8aa6008d09ce60d65fc986db918f47b45cd3a7114d5e45f15dc6302a6f24e87eb5ffd4ec3252df373f0f4eedef680b20d21162605a240aa147cf0ef9f2fdf5dad38d99fdeffb71f26162f39eb81a9abab8368ea7b604b60f41823f9ada52463d1e5e6973a60996967707abb0be6809b763a62b501fc68d32a596855bd7f39046aab4dda6382a277e54aa0dbde3ca3556ee867fcd507eff8bc112906fef35e6dbcab491904e02b098db3591789dac59e9d09a1f132399ed05a19040d3ec1e1b3884dde6eaafa9f7199cfdd563f4a2f45a166118c9f7e6394904223d601f658ded7594c9f2f637bc3129a75fa42fc90aac4e8e31b080134d09fc9fdd149f0a2d213b6e9cb3cbf6ccbf42acd4b6e79ac1e75ec1b234325007fa693aebdd31612eeebd64076794d94baca1c94fe3ffaab7083261f583affbacc2ed2a492c15d67f062dd975d30210c3d82ccd4e376308b43f80524e82275d01769149aa7c04a634a0aab4a16e886a6bfacf5c49ba4ea77bd7d8245492d00c5ae2fd67112c0d0d84d3d31b064fc3ddfb01a1e545198dd23ad1b994466eed8054e05d0fb6c631fecef55d8345592e4597d8c14a11d4346b89bb3e7a9c1d0dee5d6786ce0e4b8d44934d55ba5eb133b864d45ddf3b0d5df84fe44ee834f544cbc80abeca9bfe437c4578baf63d659c26b25dadb444940d4bd45075a9ba6df8b7fc9ba3dd2edc5fea4e56f2d8b99dfafe5a93e42706889c5a238c144d2a4ee3105ea33fe8d2963fc2299255a84a83bb0180e1e8ff79544097f93e607b5dd4f0948e1344f4416f26d6841a114d8985dd936b5bffee10e8a177385ab30e511f58e2ede9e4744089ace76c276b42dbe85252f63bc471396fd43675add0eb662d45ec24c555287cc8be7cc47fcbea19491edb2a4b1abededbec294c5fe9c3e14066be6003fcedf01e543bda0f501878d54f51f10b48e8f354eb38c3636f6c423002c04782f56028e867d4f4e161d08de89cf61b57c917935394bd0cb81a72630f3fc3ea3f08bfd68e2ca4a02c4ba3093a1fb9594bc7c2f04a9269ae44ed51450aa91bc425e2ffdeb7744e852d01654541fbe68b133b2baf40f0b5d16fd927e7227fe6716546c4fb340a73ebd04d862468776e4faaa52f75e65194d9656e223ef576a3b3d968f9d3812dec90a6bccf15b056fa884c9cb46d9d6f025ef5fb5d98622dd490d20b4c9dea395d97215edb7698c886ef34fae7d539190a8c742f484e4e27e860537843c5fdde7ffc78c39dbc970699c1dae41882d8ec9e8bd6ef14b4a6cacaa1b0a0f8e2123b074e48f545b9cf5a71d7fbb1fa85edc305a7346a9619f4891b587fecbfe97cdcdd6ff4ab6f3cd1536d97a879e5e90f821073adcb63538e2054285d412b8602357502c3cd81f868866b4f1e3a3a1adbeffc718e35a9d817d3d459f6abf602b1f060861fdb863a84e4fd26fdf610a580f69df8b866e3a3fcbe52ca863ffaabeb657b547ef6d100f19707cea2a44c8fa83eaf10ad3d4a9896802fac61d51a96b2da9032d0d545bd56d319150df0d6f245fed7a2167b9b4d24d59baaaf9d8f66c1a22499a0a42e1b2697c2c221b5f3136de5160580f3873681bd4869e4cd2d41500924fc8abbe8aa42f3b5a946eaa4e77539def6677f229967147cc7fbd3ee6da1d3f5abdbeced5a2ff4c99176f95c2d616925c408d3e0a9c87fc739612db58351be4330bb0279c35ab634fbb16ae94fd530cbba40d15b292cafc1a2ffa3bd4d2ff6db7618a658a3277b54e77281996f2f5623042741ee1bf2c5cd5d983704ac5681a56ac2efc738fa974910c25487edb4a0664dfcf3edd2bf6d70a9e5bcc40d8dbe5dea091d2548b6046c3355a358abefd3fadf8e1695a47e6678828a9ac76e5116b6d76af6960d22bead1f75746c6bb5031a809f6d304f097d2805c5c2ea0c895f6077baefdcbc6b711d3558973a36ba6be5e03e7e4f68a65a09f0a54dff92c8df06070db07214596a38b7d1b1d85fa052382370b0756163f6ad80474ffbdebea3c94148a2381034226a076f32450ea96f38636b69fd0e4d812e846af8649fcbc0886bc48bc9a2bdf86227ac4165697c5edc1397ea76d19891289313549e751120bccc92ee9d698dfe556b23e6774c273c7b2f60fe90ea6332a4c6ef593e5e8f44027fd720c52dc99c6feb58330feee859b8ed2bdf5df59c8836d4517b6b1e9820b259d947e367b162ad00fe944435cc64057b712baacaa24df596a689a783e8f8647a71d214ff500f3f667d0588399662eb88d082beeb925336ce22358c46799a042e55014739af52e706ecc109f715c9e1fa54dc54bc99dcd646c52171a7fb73e3e2fe6c4aacd4c03609e375a778a065fe866f2f6339b499a5123b8d1ab8740fb92bc1f74a9dad6be2fa2056cffedce54c1439e02db2e8ee6374c29eeceda1bb6d6f8fa89668300a1d9471a058d5df83225ca78f892f9a6090a775c343a53d5427d2e2c6378a7be69536282d8660370a04a456c0923e35cc66df5713e03c1618990f993f9310a4694f347c0291dd781d2bad8cab1d09d3fa021400c7925c9b2db7bd0f95871e9ebacd1cc231b19b2de2cee5f275ffb56c3a7fdc1c51331b09583cbc91f341b77f0b5b290febdc8f5fb262bfcbe50c0a88195f17aa7632c56ac363b893adf2050b32d6a85c050b9c3d16920d207e97402ef7406ddf9e5ebed40baad1d0d96bc67b78b9939f02b46ba389d7f7c52513e5f0c5a803a0a9c066ff59e52ebb3e09d68cca706c97236a731e0c7ca439f23a950ba164649237fa833a3b40690ae14d5810b9da5bb42055763b18ef35f6668618af5107db5e599bf401b40c3ae27e19d27db3f57923155a9f1fb70f3c061f6d7d8275bde7f564081f23a4a80a74575d96815e3426d2ca11e9fd3088f442e17b2a5e7381e7d91ddaaec2fe7b3b6789c6a6513e445006b54c37a9929b8923ca5bd77f3b31f233d09fa9c784f9805a80208377774edc17383a5f5636b5f6f1a7408e256821a110cf0255ff6cdb50c70b62fe04b54ecdb3e2bf38d1e4b1c38b7ed2a067eef8316aead09dbf754d93e9a12a7f0bd8c219f81e30e63ea58313bb38c75b8ebe3332b558ccbfed0ecf5e8a27c72c46b80ef20c78b635231eb978ccfdf846ca96a1fbb5ec348af9cdff4fc8cc9f10dfba1812ace8243e8746fe21f21dd28e658fcc03ea3355f44ea23f801fe3d1437c0cb25062c9734e11ccfc0e0c696c7db41a064b65e5c562457773e1afc955af69de9593e0236e562687a818285c009f0b5027145d86758e0bb6586325d7011475dcff64a34945f198a297a97b83a8e9754711bbbf2733d4f2c2f0f57f928e36f5918b103831cab558dc7dc3f02e7ca564734f9d1e0f70f98aca240e7a063968c7b0aeb095a384bc9407c40a0e629fdbaff151564202b7deb447003933fe1c80da69ac61c472a697b8df9d0125e93d1730810d37d662e04913b96072039050a0ad36814af77129343f16690a63113985b52c20c2d02991515f8b76be50dff8d115fdc2c91d232b07a193729484f26c7efe760f06af154149cc12bf438e6610085b0d43b2408b50f5e6b0f6ea202bb7491194a2322c3a69b1a9af42b1c1f2dcd8c51f1859f63614ae507dae8ac919c16a3d7db4c33d1907e99d3406039073b9af2f2b5925fa1b503a590c2c70e45b78b44d0805f29b82a92ef4cce43c5d3da7d3d0b1bc9097fc788e2c324db1811bbe6a9abc7b2e72df3e6c52ea62458afecb6e8f886ae26ae8fdc28e55f076b8e114f5d13bf06ea717996559aed87ab91d3d772e3c6eb9033bdca1bdf96c6dbd2ee9c442f9db2056e1c73baa8bd378be395c18925ba78b5ad7ea9d4ba030b57019521666060e5629cee180171359a3e9c9f89baed61f2557aad80b28a816aae1272cbed3245ef3af44fb20f49f7cb48573d46ebb6f158292446fe19c563289b4231fc31dba4b219fc8f128812c8746c97110d6856e49e8e861b7e5296c1e6c6c28ae72c06de77564ae70f0eaf3ab5130def90805e58e6353451862b59738b1015141fc651130ec91213c90bd266cc820a25ca4335a41600f10c260b03a17bba29172ae66b4ad2db7608e40a4f2a40a998a28ab7dc4d5c31339c1f1e67dabe83ca7e44d41554efbe2d41602240e5073a563e5e96e672da2423e7fc7c53579f43e1ca5f4e301124217e467971cccbe18d3186f1b0c4165a85665a2c5cd99d060d6c8de64109dccdba67cf8f1ad1be81c05375f237104205e4db9a50d24a68e6e41a81c8e49f0f6528f47b08750e17bdae6c0182149980f1bf00bdc6e8ac869045ddf56553e72a710e01304a5a9af9b998f9650fe1d2f7cc7e6bbab5f44c686eff02e6d27bbdff7ef09adafc5e053deeb9deb5b3ffb58b1167874c5064256e089288a9ec1301f6828cb090681b07a590f22c72b4f2a8f86187d61f64a4d2b3f40cf63aaecd446dce6d5b515ba29d7a25e0a1db413eaec66a66b8521020f83f2f925a3dfefe5bd59c1f4a971cff7eaa70d25a8d08d2e4e56b9721fd9ba37208c033d2ea57149db8daeedf5448d2bac28e8e946fb2558b6dc4296cb889fb8041e8475338cc309c8d5ce9cb8c237fb61a5f0434657d883f8e6ffa989cbdad826373e91bcfb9f9e84e080d6b2482c077cc6ebafc47b5975ac4ddef25c15eb318405abd67a9eca41edefe36712f818be18d1dcd5bebec27af9a5a69f66195f0614617047cbb447dcc60acff62ff4747f1f50882a2091446542fb72058efa8d4acb182e4efbe8f7bd14d255d3cc37dee7dcf6c1c1af69d9d8754849f58c72659680f3747255ad82ea84856cd8ea3c6d772a0037444a7fd21c984fb1064bc850ced161b29326047f8afd52c8a6a75a16f6f7e5bf9113e24017a31a396617568d94bdb7025180b52ecea4bf6e8fae969ca6a84900cdb337fd07ba6d30f746994d7fb19cf16c8ab11ca61e8447bd36566e410efcb668ffad7eb2bccde34b243934411e0a5658d79266cd276a51dd1b9c007ff8e7fdbec7f4cf529a3dabf5a71c4c5e768ec0d05c1e1172230b6af0e52aa3f3bd2c13a6a9087d1e244fdc1a7cda34b45e29ea0c4f6d2d4a966e018ebaaf41b927de2902152dc47885c53f6806cb1430b4c1aba7d7c7c80522f23d0bc99949537d46106e6e5387b32babfd60affe8699669a45ddff0d1031a21f000cda25be629a99181d90cc2d29b2115732ded8f0a56968da0c4511f85e68888ab000100bb20211c6e2568844ad43a861c2022a98e0ade247afc48813959adca5cc750d48546d9608f0fbc8c114de08314a963ecc504198bd99acf493946b10467e763cbce4100767863e8b15a4afe1c8d62a7bf8b6415734b6b3ba4c7710a40fc96c6743111a813af003fffd5a64f6e59c2da7952bce0a792f767281fec2333ca274c1a8e2bd2965fc606febc1ffe423ef3ebf26b1d978157d8cc20816ab8a5e9a2567efc898a25c19aadf2b31030d7a8e5bc3d6aa3b92e79216ee18bf2134075bbf8e951a1c76f3ac68c16f3bd22966686d057a641f1e5fd1d54af5e7426eb7e878036a9669bfb22d1ce4296c19830e0930afd676bf8579bf7b7f10c784c9695a3e95bb888021a9029ee31b3f295fbf40999a7877d35f9377bcfa5b11083b259cb9ad18bf08cf55abd594a7a2d57830857e6dc702c092fd53514bc4dc8fe86ccb9e96f3d11bf0de81f48bcf08f5ac973342ec5953c771c0218deee5115d5ea2f4807f3531013511ada67765715d178d61b6a953d0bab029cd6c48fc3702e17e8e56cd76f25f95501fc2ed204b2835da3237898fd9a9635b1c437e3a8ca7f144dcc1cffef3d409e54558fe38444e305e55af6380ce07f1e1f20fc0b0e9af4567d05b0b82a08ecdb90252af08dbb6a00d3c1a34d9b4aea97e2e944cd0ecda898f90aed426d4ec874cf8f06d1be85c093c9b2a2cd4bf354f87c35f322f43052f37fb38b6535a895c959ef01bb7f5e671e066d37e77678f7f89b7f952eca1b890f0dbe5e8622ad3890dbe6ec68bf187d949a8eb3d311fad693f5d68b87547e351caaf7161c35968dfa79592a21258090d1f565f7b496aed90b47b3619dd768f4f5c9df99f1235f021c97c0f8f1924fa976ffff7bd997c23701915383aef85caa203bb8491acc75c57e6121c99d1bafce614ccbcc676d0d7716617850961e6ead990db4005d86ef5b1299d4db746b6aa12c845a0e0e989c849c630fea27a1684c74fb8737ff00fece03770aa699f9ee9512deb728f655d96e83b4814a07109e453eab896589d69dfded5d5ef58947c22c6ba76d0717927cbf257a5766a42cf703d3e681d0d7e9e03a93cfc91754407b298f7690e68dc884a886d9cf69de9a6984f01fe849f8280f5dd6756d1cb6a68548a81f1b57ae4cd29dffbd71685793b73b171971bf82a89e5bf5a48850cd1ba6ded1a62cdd5b9c2f8384f827b6c7acb32631263bf97e042aa0c747b68aab61aeaaf7c859836527777de1393b39a260385f1f91b6898aa300cfe0ab7757f38b4afabf17b87b92ad2f19679a69b4f36fa82a3aa64ff1ae701fe1301f50e187c6d03ad61b32bac5c3539670ae6386c66cdac19db65ec2cf8d5150fe25aeb27e2a340286e73d322feeae25190f1c349a736ff8c65802d233fb21da63a1b9f3c872c5e97ba8da1018502aab95d41f827acfad0272a312c9920ded0adf2db8bd96e9a88578444a04001b1f1bd9f74de7786b70a67db72e6c6a6ac1d839efa979afb4c6f4a53d383edc0e7068830c64b6c853bbbc6a0f4de564c84048072c8f70ac561b78ee61c471c3b37dc39ae77f9080e5ebf1e2b3548212fb25e202ad8f611f2ea9e006c59d0727584fcadabb0897fc0de0f48595c5d6a6d33b94fd3c75d9837aea5ef3d6a2b88bba996c64487ee235841af181ee8e3e6c4fec152c96a08dfc762ce33058fcee57124a7e4794a1fb6b9bf041b1ea95c6802c4bc2365254ddb8cb82121cea0d45acde982f0573d8956811a936b9dab3a7c23c24a3d9f1316c7e772b6c113fc2361e5cbc96c2094bdf940a5975d6ae7a3141d08690b3a2462c686d9bf687e7bedc07602ed2c95ea33c6561c8fda2ba81cc93d2f5cdf45cebef70fee4dcdd87aa1dd6397c1311de9f7a81b9bfe558fde7f82f72a6843d9168138d44d1dde4ec6bd7ff7e4d915ec3017a49221ed7d55c26cf22b3d5865953dd20bf7d40a2940330fd1b62625378ba4f3541a1728e13b50992aa6553b96f958863beeed290980c06beb4088a011b0ccc5f9a4d50fd662b116b9b6fee8c4b8e6c7450125b9e959cc80ba2d651d3985e1a4161cb78d3b5bd2c7f61d87ef7f39e7010a4bb744ade28b8a861dc9b56be9c27e472e52f136c8ab21ce15c0a9f11379df43b7da4c8947f3670e1fd77635fbf6fda431457938407adbe06cc4d18b08fe6ed5fdebaffaa4d82297ed7606109092e5e5a3e125cc5fde5a8dd2d5eb8157e37d5dc64400b909541dd2543b7ef28a0af89011bc12a747f87b8c4880af88aa9107c6aae6e8c4a869e32d6e4aaeb8cefea976684eb97670b1187922415ab775b84eee4b3ec8235d67b3ede627661d693ed9b2c3aa4e2a72545a0582843d896456d3134388bc032b3b11a01a6c9a4b51d4d87bcfa142201541c4d74ad6febeb10e3fe23eea1bbf267f910198fd287af325551ff1957333cc3cb5e8259ff7daddd1edfa295ba73f1fc3894986116250d7bf0fd37c0b924d29b7958194fadc12afaa0e36e8dcc9ae14122baeadfd32766513cada6de2bb4413f463882ae58e3b9fb61b348d52ee24f1433b3eaf961003e8bc0c662168b135b2d514d6d610aefcc570084db409b1f60a345c04df01689990637b182a5597d621e74644f2234fbc30cb62f5d9afd153fd0aa893e974ca778e2ffcb3748e58ebb28f4df9190ad1de6fee2dc62172989560d2d781b66174b9d719e79e977a805cafe8009db6cbeee7ea8ceecea75f8f3b814dc4ac07b1e6b46c57eef3163f9f2c65190e7cf0f65fdc17bbadf1cf3400a91f8be13ebf24b1a096b0f5d30b9fc672058c0ed9fa7a2321a9c78eeb8771384f588a6ec1e5301242a242c686fc958dc2b78463f206b3d628b7f7f85ac34e222cd781dc520c42e9632cc20e3e221258eaf6f97c8ca5c3f83f62e42f485714ea1a7b36db52d65ebd8df6df8727791b86126b0cb5380e8f5861640a0d3b27caa13316bbe91bac0f5b6edede05864bf0473607078bb711d072fdfdc11604fbdece8a78882238b74e0d79ebec25ba9da62ce71d4f7ae35a767e6bf1c339ba78cbad5c3141a37596c956ac3ea33753ea027d75993b8743fc6c4aa0fc3ffc85bb0eebd69a8cfb5d8523dc294dbda6d9913b2bd1ce6a6d11408e4d20400bb1107a97c00b320aec6f4c393a354f41952a2c14dee54d21e986ef4731fc06a99ea34a61701f778849c4bb33c83bdbbe6ec25f07da592b9842ac414a85fff67f5f7e17d8d439bd9fca241d6d5cadf2d33e1a4150e3d69c2c14b1463746aa41814d8d2eba22b3f4f0be1dd5bd365a3ddbed08d280278a6f5a147d5f394487683dffbf66fe0a2a7c1c29dfadd8cfe09ce58231a2a747c727a57d545286f8da6284dbdbddde063c9c935a8c782844cc2b5d0edeb43bbc4018a2135b2ad617d3771d2e0c784f73588425d5d9deafee10e8d7630ca680212e5b9dad7f75869602d47ec836aa24ca1c3ff345fb4978e605ea87ff5f4f6f9e9afcca4af8fbeb1267d20b154825e9f7d1a22136490a66de725c601d8f737b8b3d87db031706837e987ed2e67d48d7f6b60d4ea95bf58a689243ce1b9a4373a92e96a4e36396d0d9be57e819c66d6ca328f245648c1d048137c29159a432c6012ce7a58cef348c49f09feb06482992ebf81fbf6b235d9e83efa37c54b0710700d8371503386e9d77ea50805ac7ad64ae7ac3db8d4c9298cec2631ceabed77e1f59e60164bcfab150b6b7ec97ba5a553173a2f5dae17162db0a233597303ea4067f36f9dc865699865f2e2f87e046a7010b7ced0fbb75e8248b7ccd03ce1b6c820f308747b09682fc0fbe7ad1bcb25fe86574390e1f3c1cb5108b717a2197cf4174219bdb8d482cbadf3405d49ad392d7aebf7397f68fca8e79401ae3f4f9b68405fcf075729a660f66fc76949d3f88d816b5f6f595fcbceede915cf4a2d1943845462c7c79b3fa9237fde8f029a19662d7ef92a5966c3aad68687c963f6ba0ac33cf62f2c00962e8019a751111f1d2a5a322d2f4b03643b36748cf2d7cb4161aded97b2d29692ba37ffbb01f369c9aeef67f7bf40bbc8f3193cdf264f5a1c777abd6f4a3d5d57c5f5c55910d11a6f3ee315ba9c0414f1fd3a743d5e1237e2bf7d62477d09036bda2342c64bfe5418de3e35041f641cbef6b50fa9070c525fda2b2b5e8e0286a8df4e22380c97d473d30e86c156b1beb826eb868b43e46fae5d05e29b7822569e469770cccbb513c3d903a9dfb497bf23bb701c0047e0e84c1df5bf8f4560af390f93d5531b6ce09c548a0227f657b5a2be8cbec1eff51d49b66004fc97b4e4ded965587833ca7e6a9681a76e1b7c1adc15b7e28704644d27088f14f73f5508ba45bcab0334a8c9583a812001e40e50261977eb2f005a2004e0ded1c5fdcf8cfc95f3dec40681928a51489a6e07da90b01d0d3b93d048c8441920f6a45e220ac053695be6959e8d9b459076b39be3d8431d54cfdf0e8735c19c7a4c3262192539b4ddfef545fae224bb6e1213dd5fa255c499c71659d031b2cf59efebee0e22ff3ee64c1ffad462e288148b7fd38d760d923e96f9d1ed0eae8952188bb4dfcfb73b4932eaed9ecafe67a1c4b5b30bf7318feee0c80bbebdb14af9087f0e39ed89a0f7f62866fe5b3d8d6ba22f6ae12df5010eb70c2c14742c5496492a59120dcc43344677a2b7bd88c4db5d849b68969a54f766061b9130e88a47df58baa4d1727b2508b2cc53334911e7c7a01873ad1d5f2d6c74d4ec5797814c1e2c1fd2345e4d204a9bdebfe032a3470d689eecf2bca5c6fb3617b6e62dc7e1e97566bb736fb3f133cd109e8be6a8aa5ec9b622d0ca2d16915c08e8ba0fdf2d581ca534c922a9624b2fa4c511470a60c1d314616005ae10d7ea9b8a021bc333b0221a623981827d3dcd471b02d8a49410e512acb47d1caa3647a128d7fc730aa312bd9e2799f6fe2f6d669f6a4f16209cd235a8d9008985063a76f7f7d77152f99b1ed7f7319a7022a86c00931ae8be92cb53fd555c31898e63558c0a8e686fd2218a69535ecce293b991f4c727ff6dae18a946f25c86bf5414cfbc2dff89a36049b3ecf2b47c6112727f4996defc34900c4d0048825ff0ffe77c0a3224dd45a79d2edf2202b42266963158b357829891fe39690039e7e1610bf57af9d7eee70afe2106b11681d8e48d6858652151c74f53592ff41dd840c4fdabce9e72e9f868f7f335a6e2e5ee3a1ae27c94a4a518f635cd935720d57924e749be25320fbe92cf6d1e3d21a57ff7d43d975b949ee8cdfab7ad30f480e8455fc7676b2f7875f145142078287dd7b725543b57ef3f4bf2d53367fb3871ba97fc2200395bc4564d4dd049071ff05a97e9ccf9cb391aeaaa3274f04e2b11ec8cc802f56950a5125fdeeb07448f629f812191e3b1cc963e11c9535da4d08e5aeb6d47c2496044606e50fe1a3ed6949ad87bd6f4c0ede13cb1e968f86383f84f66fd0b7d0a452e4ddd7d091195f6ae52a7f00ff4f6a638e6056c98d6caff53a2d273a52f384a79bcbb02b8a8316a5176644c668197d8af2040a8a9b6fcd5e9e48fc8f5a8c59b61cde7bddd4663f0793dcc066e5524454adca9ce0880ddc9e120dedd39d3f86199208245087502a1e1d185d80604acdc464d804a336b22df18b2bca4afc63232ca52bb70fcbf005bb36fe7a86eb169c2cfb201b06bb16006067dafce2e7364460d88962125c2d9b245b7570a199e1915477d96bbc01643ff351b7c649f37bf5cdcaac591239915d9fcded5f6ca082b2b6a3469429f813cd6697d84ddec5acc3167165547814e2860f7828bf447441c37840cc71167477117b9261fb63f715c66f1f125c073726b887b4233f27fe24e2485240b6d115c4f0c2e0145bdebbfafeff3facc68f5c7886592e45162587d207ba1954fae18f646015b049d4dc23c9c30c8becaf7b19555c64d0f6da885b4f9ce783356e215a6112a3001ade10bcfbb365b61375400565e5edca63fae32b70cf51d9355c578e0cabbd5c3353f5b429e9ed2a6bab59bb8680a14dc36613483f1053717ba069541feacb20817d2e427f2188c2893bc9952a1d962110d911c563612d2c8aefecf472064de65934930f5e3c07d1e823f0a12c5ee477a9b97eb9ff3aa440e13bc0b900672e233abcecda9c34e731527fee84096ff50197ae269da2c8a57dbdd1cb8dff15397fe63ee88e319e849db3fbac537cdbacfb0989b8e382b26eb8e0dcf4b86be5f380cb239c13464a5b65d128019cc01ee84a2e564f8f98cc66085e1f1f30b200be6c52582652b66eaed28f067102e234cde8d6250d6a3a40dcd8fca2f3b4df591658de1e0ddab81e88059c86afff2c3b9e78edf6ba2d2bac65d156baa9732480388f1dea9036c69ed6da3bcaa29805e00b6105855b96c2b0ee30794fbd2d628cb9a6bfdafb278ac3b076cac3ac32ad78de97923f2b7acf6df12d7708e558dfe9e8fcfba0e9064bf393203a1fec5d3d46c64b6dc33abe33ec71bcc8e6e7c6de586eaaaff27bebd1e360995870b417a11183c3e1b30fcb33c140e42bf62847a2f724fd84586f3a677b6febb52f1917c46d9312d0ef4de0a6b69b0bc9fb502790fef199f784303fe54410b2120a83a5e2c89159bbcd2a8c1219768ed38404c05b203e2b0aeca7958d855c98c01de5d7a4a31de283b2d45a98fd758dbbc7e0effbe322995c0db7db1b5ee853b1be3adc74030507cb7786aa20d79b523be7559e529e87533d64b75ed7fc2be35e106a70cb523ffbbe6cc69cc00bc83c39757e5908905f3256aabdb708671adf4cf4253eed6fb295fab731cf3d32e8c96e0b2c583f58b155d1f3bceb84a877f7928f53d1583df32d9aca1798ba3d6ee0bfef9e1b3d6db107a4659b2d089555f583a2a3a17a2006215d1907442e8eea120c273adfc43190ab3cd4ae74575bf1110bbfe56ea50e7d791de33e5f9bef43ef252a67fb08ff3c48e526487285ed9908883eb3e80cdcefbfddd65f0bdbf23f143a183390a935f92a010ba6c8c9284059bea5bde8133cdf3e493c57e27608a461c9bc23c4a8f945cd2595175328e0324e4f18d161c7f446e1f8336ae11e681aff905f94a167bb95c2b1d9974861d52df9e6259dc9613c840411de0b6469d88f7e24be0fe0634e77afe5d54a4bfda11e53f6cb343c4d89c4b842a4a4dca3936064d4b0c407014b17278165a66360b2dacf7dcaae91f1549bb71f47c2b2a2af21790f7b3c37b2df602defb7f7b14d3f66b319d8fad85d35e246fdf67a99d7ba9e5fefb3056fb0e15568e4642fa4f07ace193e920c00e32c7b3796bcfff99684fd96dd66f3b9dd6ae4441f0858b97a07e03bd57b321dc759d26eed212a1c645d6d883a00b8d9dc88e7e223bf90145092ab7ce618294e7381d4b2184674b60afb78dc55941e4a74b45539377f53a46ecbe850a96cd1137a00ef5fd2601c2444814deee7ed69123f413949dbce139fa0c9486b9196ade19108e08927ffaf88f6f671116e3ffb61705efc1d8e0c04649077d67eca799107758c93ce770b674e8f09f56b7788d4461f19cab540d9d48ff2c4c726faaeb4c592504cee66044ae395b8caadbea590bf3037c45c75d7d43a07cacb1c591b063ae4335894b53f1c7d8b4620eb91606d7366338396546e7be3740adf21440f147ce86af90e205cad83ad3708a4edeb0a1b7adfebee34368f3b51d785c0c08b9bf8b7e505d152b6caf3b637329d0094b80a27de706afba061b08978174fb303063452560673532c56751c79d7d3061519ee28447ad25d1865a369a0ed872fd6d500bb7a2b3bac1e5b1939a2afa4ea0f3c7378c2ba5ad203d115933c50efc3a97ee330e78db7d1f6e08b51b2317b560e755b0e79cfcadf86bbffcde95e704f0508d3a55bd796ac924e1f38f52e4d672e6a6f03844ed698bdcfbe5a5a4a847fe51fb5774bf4777a0eb827504bf8a16a070acefe35d604009f27218a2f8a3413c290d0d8d5a7bfa4c1de91a83c608a59851175fe6536bc0001d57244f9c668ccea889c55856803b4d988b94d6b1f1678a1c8aa6db2aad1b658bcb35eabee08b2242fd7e1fec7f7befa09d9c4cec927fcf4d7972ee03c9f7fe29b6bf047eb4419fc6998b246b70024b11c49df5248d9e7ca431f2b7a1438011380bc4c47e8b3c5d4feca602a48045f833ec26ebf3fd4ca84a2e30c8ef1e88d83d796233c27e323e235cfc24a1d5206894cac12efc7abc1a860d57c1b67ec0ed84450060c5dc29ef19ac4d5757f425e5a61d74e39dd5310cc977a883398c24eb0c9644214ac45d9119c8654ea855e7a1e6590ba6d8bd9d90aa4515e4ffd37b39ffbd256f97c193bc75ab3b77489f6a3518461ce1e48514097eea2fff9bd5e3444b1d056aaea8fe107657272e16af1438c4029962297d8ac52080ee457775de037df286388aacb8f3fafb0a69b0d03fff28379d16f6ba9881d6fbf51cd0011c71cad7248ced4f1f0cba4da5d2417911620b8ca9311693969f898e9303a644ca017fc663642b1e9092eef113da117d15fd25a9cdf861fedfa923f4fec0971851692f1509d84cb6e387c148aee0bbd526c9c13e9f59790fcb7c1b29381fa3821458610a1fe7f3235d6e874ad3871fd733222bd064960a609100ed1807836640c182889c840d87397fe71be492f144bd93682e05ee73c9b01fc71e6dfaa2e5cc04b8638f7d74a04c9c25060cf969e64226637449e717b7ea8aadc69e4437bcc281306f0bfc1dc22fe7be2763e3a8081d7b9dc5268d78bd8f53145da70e06f7dd4f42866400c7feafb824044932fa741035a618cd7fabf6efd0a1b370d02cc54fbdcd78923c52b61cae2df0fb7c24e751aff986f4114ada419ad742852dd7ab24080e61b55e93eba344b0a4b9eecb50396eef41cb8d6430535cb51c1951e4064d5b2d6dd3fd19e06bbfe521b11161793a5879ef9bbf1f4a364d09faf6735f93522f59532b5e86eaa8adbfb0856ac676abf54c677f24c75e7f0a06a782a18e3145f05deb250d1fa85d5ded8b590c890bb36e13c1a54b42e194d8f9c62cd0325d7fc89bdef1c34a867cf97bf507b9b394b13c1f9d03e5cd8f2b112f3784749af0d7d96891b01485addfc43f5fdbd5fb6dd95d03b951907a691491debfcb95b5cdbd3b045363f521c1e6de13b7a33b39789c4c4e3a9a3e76800703f341a887a8b860a3f7e921e8f081a65f579707536b6f23a524684d0c4d024b47ba8f4af3d6e766f9b21339a8b8b945d4fcefbe5a79c36aa47254c4b4b8b96bfe8fa2cabecc8d40cfa4636ef66984169001e4a902989b4c20235e6de60dfe57d09fe33370ff7cbe41da3e855dc193e13c5d002bdba54cda161bce76fd6d3c5cd979a6c7dd54bde3fa047d0e86603bc6335ed89fd0124005b41843bc59530da4cd41a36a0b42af163185ce8b8eddc97da0571dcfe90f324711e9a79bdfe88012e006008571a7e7bbd386e85c10d9921aea681a4b08a34f2b3403fe2ef203f8646190a0aadc1f829a573422e1dd7bc6a82cad19fb6f2d37a3787948824befa71c191fc848fccb829032a1edbb31731b4f2f53771b5316ed5fa50ed395252c86ee92f096aab2ff33c799a55d3b09ec5720d2fe49d0a1b95b17b09efa337c7b3bb84b496112eae25aac5a6b123b2380d346c8b296cac0bd4a3db4f4074a806661b249010d44b73b8c1dd28e5f9ee5723abf4a06afbd9e12062c713a89b98d99fafabe6747ea15ff2bda4d295369b233f89fc14cb222c01bbd4e3aeb9d46237402a9fbce652ba518230afc26a372810ebfb21b5792fbf6868b193a28adc7243bfd618c19bfd72ac3c64483514a65f7f485007408546f452c2aa79cea1bff62237ddefb6b6006b0defac711cd326312c17d9f05b831ed79a5993b2819d6cacacd582f700afa36c69046df33f40d791e1586d1f5d5dae84b65e5874c08c1f5224c37a690793bb00a3ddd9811830f14f3249ac38886bd3f2cb4981392ee0ab5a00de5f3b2b5f20a58e9734b07641053c0841c8b4ae1f5151ada4a64526cf8000ac927556b0bb5a94a42ce59bfd031ccde3ed619544db3d90d4ed7d9dd0f46a1ceae2830a7e1d87fb15a589266b31efb14127962bff608141de7d5dc6a2389edbff276d6ae42b9441d42b7bfa74f6d7d17d5c6a59cb3700163626c2068ab92237a329c774c8293f477d988cadd0738bc1360e6780dde796e5d50ada6c09793995eab55c29458b117098567004b10c3e58f2e2c3977a54d49e95ba117b57a59733a014371155babfd6977dcc0c9d78789c5f827f10e28312aa154b5fd1f010c24213dd203d8aed798e9fad01a121badc2fca534fc2664b164c47feaa13ad581668a9f8481732c2d4e1408c6598e7fcf49040643bb690d1e201e201011ac1b2733d6e78f169951fc2e6951e7d341ff448f878c87c856361603a73ab0b2dfb1ed44de63e14bd04f7de280912bda50ad7e53fac82de4596edc95b8c099421ffa5436aaf3324421c8d1f57cf028b0d45f8ccbe4c4aa23e0f357dcdf448b5f39f15f059ce92f03c9b8fd4e3fd8c520cc5f00496bc69ea087b54aa6b7839be5dd241ec14f4a2a1807b99f1faa96ea578819b1618c12bf72564ad1b2b5900cb03c27c48bd2112df0c9743d30852dc569ef8fd49981efabe059d84889d69c6302f48b0b1dbcdda9dfdd557a08f7bba8c9285942863eda8a21bc6b0e4bd378b5f4864a7b7eaf10f5fb436f0b58ea9aed4968d17f345538cf29fd6b1763d2dad5901fc777fc132da98fb14af8db0aa24cc018fae69e3e07a340610ad44ca5797d4d08fd75fbabb431963396c7dc52dae496e2272297ff4f7f17e633ffab9a45b6f9a7aff78f5606526bdb0f532c53a406c775667e02f69e11d2920b9a8e0a37ba49ce424c52e3666f1bddff060da3bd385b115ddcb5fe5c98c1e2dbb01e5ca6c44dd8605645d4f0da88b89656181e3fe2779311498354ddb38a25fc94a191d964bf7bab6a518da31c8844d21a9da3d3e6af1f9d79170fad416afd67589dc47aa76a3eb4cf6200b6c149932448c0b2d24571a33218e90ffba8c266cf3ba146f92de7308afd447c34fc7110b9abda2232ec5bdcedf0835456c51f5a688d46114ec19a1302487f3cf00c999ac4a7130c5e0caaf8d806e0fdb25e3c3d65eebf4a4f3ef37dfffc1f1cf8c643f024ef49007f0d51f7fc35052905fe01060952c75d7e2e68f3db831c2a957edc8b0d716f37d71969b001d8f9b13fe74cae72831d317688689d9701d084bd3ea9439713fed65f48a6cff4a6ddc5635b2ccc019a65e2279dff914df63ac04d7f88f586254cb30ecff5d6bc59fd423978929571d8a4efd78dcf1fa4078083d8dd76f49c748e29fa2c082862887d1149f9bb22f0ccfc1534c396824b644761d3f8259b666236bb605735f32f4f1fd2b51463f2075305507e230587bc32b51c0f9b95efb6cb54a058f7acbe0db17b279c808dddaa76b4a8f7e1b7b41962d12af97c8cc2fed875711ffd90c930dd39327fb75c0683b7a60d48c10498b118cbc9e8b6db9caea760d65fea4864fd25f80a6455af64268cfee276ec5a76de426b2996c6fe21a5810875fb48f6e6b40bb170ef5d3fcd578b81252a93cbecec08ffdc637f6e5483b71ef790dc7757f373c0bfafb8150f036ba16161d313eecc0851673fd42351ef8d706a6efa9ecf5b049c726293c2ec55aa87596efa5c381db183a114fb94283a1c219acaf0316f69fc3c860f0226825d6b0a41ce7407da3df598310b2d76530d15309e405eabe96e27f10450d74a0236fa1566cb3f44d0267962d925f6b5501d919dd22b32c1a1975c2153095ece72f206d4b2f4413630f02c0487042cd15a1fe2b64a194e1297419c404c627fbd59e7740e2f9aa4ca933d3302651c2924e4f5dd549430586557f1abb445c3f97919f617cd5ed85d14a9a98b7e6185e3c9e34dd73cda62e2bd0bfe0ef276c0b746770995702ef4cf83c254b41ead65b3345e50a98f6c01165857ad1d8e3c0c620bb795b6c178ee1c8bf3632c8166b2471fff58288bc0add12a5f091ad78fa35ef1c0ac0d9cd764c93c68d840e538bd8f58800fdedaed3e6eb47b41bb0e3852ab8ef93b40e4ede7e4caddebc5ffa2323a69724b6f94c3e24f823758f54426df0bbc0c2820115bf109ad463ef13630963c183313378c6013751dcb613f72de8892fd7becbfe15847a7bab3a0baa4f337f08b57fc73752e2be57e3cd2a8c0244639fb6528a23b7ab2a6938edde1db944e92febb461c739ab3d547af65d3d3cd8bfbb9dce38f379ff73906a4da6f649ba5528212edaf27ef602e41405f959156ed12877c3932e4e9bc2f2bbd2a3dd69afd020e5b7b9de6a8866a632c300f85dbba2c4525f9c546db04f869c70c666d663c7dc449393468fc787c8c3af528a14bdc39d4f65afe8164601ffbb835a7796bfcfbbe29e79d570f15c2ddbd209487320720181d5359b9a383ccf647d4753cb9f4d38f7e522d21812c588e204fdbdf75ac4c5d605ea5ec854beddf822cadec4b3cc03441a426950ab3392b300e7689db35ee9bc1cee063ecbb2dfe215842ea20a9fa49b98bb9d477f1bf68ae4e7d223cfc5f2ec67b192232045a3df039821661acea7fc26116d7ff52de4faaba54cede789b353cb7827b9985bd311b63b19aa6c664714959774ca34aeebdcce21eefb3d15f93dea4378cfcbf1d47e6e49a5212b6a96bcdd0ad6f43601f19deb8ca617357febd1fc38b506594ebda58266a6b96629b98857d2cbbfb8f6afd721382eca06a857a27e108b4257c49b9372d6be72f57da066047d285a9106fa6f9cdff8c436f5e2bd5a3c0cdddb8e95eff3dbb36d9404237de19089a66ace5b09645f34fe70e4146dfe752d7cc24176461c9e8d138083f0c6c37ab8d68b0e17e3573d15909d8f2ffd177447aab308168f39c23d92db5be023d05e59fe4147f93a73ed106980c3e91027d9eef105d4d4269a69434f0942dab298489cfb544e5b886dd277ddbb1693a2bd61b19db9938a3b148401adc8b47b7a44b3d914f5b028cc167081bda25e299429b9eaf11d2ec55cd194c44c36dc8201a920036aef13ef7e2078c33652f75a5a61a13181a255c632997a7f458190db0bfa95279b32650dd38d5bb1866423c1e0156770137a35c40772a03c5e0eeff06f2c208c9260c44f39d2fd7dd3bc6c4be1b4afd577151a3d24f4030e5efb2fc648782e6c1531f1677a946a07029e43efb300f3500343f816faaed99d98bc99fdadf6f0909a7bc7ee261c9ac5b3422d7bdfc1f6b171db14d61b916b28d69e9e90a6d9e37d20d92aa07f5ff5c7213b2c4fc1b49cb539172e8da8b674d991ebe2d6b0a2c01d37947744f8c1610b48c56babf705b4d6b60d62d6f69e798ec2fe45ab10a7c31f993f47b7281a72a4168f93527a9b35c502beb579d47de4d6be6a28a2eb610a6fe74658fe0aa9c922a7b4337b0ed263ec27754d1c90bf252b944d221b1d6f5b2201c6a8a007cecada296084c4504da5382aa1f40738f0c9d574c6ead13bb33c7546f591473bbc0f66fe5d8fe0491571c32c5dd0f097e5fc305dc22c1590ff5aeb78deabfcc25b1fd7b033e1d0ed8c4129ceeeff7002f75aaee3cb19bff3b4225b378a9825fd1251a25392e82413fa6c14b624599fdc5ea1241e2998b93e4e167b1ae211804281a35ad9d8df42c76ce0da128389f60196cee6b7f06114a9ac82270ac566ab61f5d61b9740299e61c8bf301ec95edfe083f706374000ca99d0e8358f2f0e0527bc43b97559dd8a65f6b6feccae470fdec52b30764b2f526f32b9cc84b27855e22b4ef379d064fbf593d1002b887e910dd15967e12f65ffa0f575b8392afaa9e3652003d6d932e85a673ba4e0738a0fd6bcbbdd0fdcb1c7e7ee91bc6ce83bae6efa70fc6f426ff8ccb599aca71218e35c8e0538417f325aad6296b6161dae16c33fca2dc6c75faa1463216ea8b48c8d81ac08007fd428485ddded0ce2dbc2da4ff75ee43cc2a8db3c8c22007d77cc7fbddc21064101a1e9d313b8781e3988c73e8ac695ed174938124c04203cda251ab4bd4f867789db14f667297451efcdee8b7352028cd190ef061817e8083c870003db36c3876362c41d6f27e9a27f70db296de6be49b0b6abf84af7f8b60f3e7a5674ceac91e45b1fd5e7bab28eb6b6b66e214976af36d65c623c42f8be439e8ea33effa9504236fd58d2fb3ca2fdd04da2c2e92f7ec21b1ef0dca237cce05f28f6934f8eb5988f02868592ed17074e42fdf2055efcb41006b73be5e11a3712bc3754419f0245192e310e80c184f748f145950a5668d963a8a3364de7d753583ff383b7f91c58c3c1fda915a02da529e392a4d4a120554c56229335d0edf06c2c5ed929d873948e5fc018e55785d504bc9ca28ede26fa918ffb40c44d2463e27200f026a10c47287aba62a02d40c8d989edc630b3162f16f8871bed65ad0b578579e4df829208f7d2c994f0a8d210498fc234b9da19d1adba4ed7a34846f2a54f318246f3c18fd2071e65dfbd717951160fa653372d12485c7c04181f425223ba2c1c6d8b5aec8f33c8d3d00cc4580a807b3c8d7de5d8f85a4586ebc52fb3f3cf6ad0ef78b38d5fa4a921fd11a7e700c602c6616b262b7d678b88341aae344bc2b64e4bdc0fec7ffbe5f472de0d4bf7a3a9bf3e1b0e3894de06ea0beead64b29c7586f43bf1e6d6766ca68a42d18ebb8815dbadd4bb6cc25c0e49f41a5a529edb6292f19c2c639b453dbb3971ae29e27990de1c9e31131fede794fe217bda4983be739ad328b27fc7def7aee50921598819e5b9464e53f6ace40c5eeb041d6518bfb9553d019391fcb50ddbf74f7b9ac6bf41bf72e437ff3d56a19097c55554f22c365c68801f2b81c876a0b72c14f8ebcaf641b56abd5b2306281a00ebc115536fc1739477be3ad6f347c4b6dfc861c3af5a4f376dec4cb327b712320cb21896540fbf521fd0f26249fc910c4b5316f0605334b0b0ae750b94f20ebaa38602e86743b819edc5c7ff7aa9a505049f2df5d6890b3d1132e894c2b6d7618e96f1cd34e1d283a443c81ce159e3c78c7426914b0f70cf33be99546b03651eb60a0a544bc3294304d63350f378977685beb6419274e5a411ced7d784dcb518896764d70257f97d0fbd6957745af0c9e8f3aea8cf3604cad4a25fa0b2847628ce89e8827b67cc2cee06f9bd9a6fd11278cad52ce98ecdec044f11b7e6db951dd12db0d889fddfd0a1806820e61d44bfba3278675441d93b35f3997816a468832a220a51bd1be686a8eb302b13e0a4e691f94a0b50e66359ce2d69d268ec3bef771aa1368940d016191acaf82ea4afa651bccf24402ffd5e276edb5d5d3d49d164c53626a90a30920be3b02cefa78e077e4ec7555406142f399452b9edb16fc6ef953d94f45b30d9d19c83ffbe5a5280f28aff78bafb6468f5738cb5d8123fcbe54a869b619a4ee41d5850f4bddfffd8f38dec317f5cfa5e1c81b7ef6e14fcfff8e4a0656d8b6b2f42ed7d4de7d2e409a3ae5e5a17582b71eb9f3167dc523fe126fcf77128f691ffee3a0c10549a7c51dd2f114ca2f1a3e425fde85e9ce45c05c9a34f570d50a8af20981afe6614a6dd44e2677157cae933e4c6e1104f79bdac2bcba6b7e09195726c0499d43eea9032d1a65f18d8f45dd0be24a0d19c95f5c338ca18a637abc6835241355dcf8aa1a4b7ad0bf9186fa3130248a9521703b072ff8a039ad0a1825ff98cb4bf8cce8433f460e58a22c2ef12278903604568fe7c90a8ab78535c6238d29ee624512340d4c45cf3f827de43cae7555276666abc886918e5e7564ca6a0334ca7f9f39798ad0525f80bc64edd5a62f6eac95565d9849259948b4d63f2f8d9fa70290ec291091f996fb206702c519bc19ccdd0305db42299619b19ffed905bde89941552bfca9762c031d3a0d11f0537ad3c4cd56f65f347c45f0957a08a84a7e7b965e166cf5c1c5c0e3966d6271be64890748a6dcfc096ef342c1fe2dae566c1bd4038ba0fda50e65b3718cd71fa7bab948d131c2fb2027ad710e2a962f6a24c91e15b0022b16d82e1fd993adb3cc64d3096c5897424024509946796789f0466381c803c68040ca760f492780b9e77fca55c8a580ff125f82ea27e4ab6a3edc5dd7598f8f453c9211a8b68c6612d9cc40641303a46012ae5b00a42d0d51b63e34ead83b4f6019078c4a1a5e5b5ff4c8768f22b4433abb738552c1869eb63d5973fbdf228b1d50b2dcb0c6ce4987ed12a057aae69ab16b21e7ac608e94ee6474be17705fedf47f7600fffd79c75d13f0bcdd52a05ca42224ffd332feb686ef9a7b1476f8bde5698207e777e74d0bd62f4037ef400c5ac1a2126ff4ae1189d2b7903eb1b2ba6855304a633799f38759a3193030cf8405e57151f9d37ba539555061cdde513dcc13c6092533995362ba9bfa00989b56a3109fa65986bbcef7efd87e85e122109dc4606e45f441213018eaff72026647093805e21a5e77d19fbe208a335a04d9bc89d1d035fef18ee6ffc560dc4b1d228903e8d919961ae1f6642d1be6d7d2083470b913cf18c04a0e9a60146c5811fef17c1ade070ec4e8285881e6f71491f169d438fee2952374fcef3c4f025aa559d135e59d3da4d6f559235f01526c1594634d97f0abadcaa0ccd792a48458e778647fd1720229a8820792968bc53cea6f6647955f5e2380ae5ca976c308ef85cba54b4ad0f9bdc20afc7a923242494a6092124f52026781781b62bf459ea6b09b4a968259cfc867b825c4f0cf6621d87faa952f5fcf4ef7cf6130700cab72b002af8644c41ed5dc257613f294d8ef4dc86b8d25337aaa2b72b92c9f0a4dac420f0d43f4939d92d34c30f7426d68c3c23bda03b8437ad5c031a2202ad3423140e8e5dc4e0a7f9bc456ab6a8ac63bfd2ae590d1d4cc0dc65a1599fa8a5e033e1780db8927ab38d569de3ffd5ea79a0bc5ff9dd79b706364a7cfb8a457a1a132a5786633f7012e88803b9c08e56fc2e693e323f2f5608d320d90213e3b69cdbe10a0880e95ed99f56d7bfaf0d224f3a27b90e6fc6a127ec05fd6ecd976d936d6ef5287a8ef8947ab2111b1fb7f7747f8ad8da8221c3a069fc5a4cde3dcbb3231b7ac71c5fa8951adb7b7a33f718913ea2f387d924363d63f00fd4f33bdba5344a776ac42db1c326352bcfee8bb93c8e42c7871c428783499c20b2568c2b500f5966eaa8397fd46786f71474aabc4be6ca220b41e29853c7757074d3e52547acf3c0e1064cdce0651415444aa1a30b1cf5b5419a8ad6168cbdb94e57d9c8758a2d35984f99e50c40760a2deddd9147d7b2e5c4dc7be8601ff68382a50a9ec47c95083ac6dc0776b4eef4031c59373f9513fffa0ba228a3a87dbbad29e13244229d31eedafd407705d3ac3abbff9bd35c6b3c9a0f591d83a33cb5561abe6bf73aabe3e8687a81135aaae22720da6eb45b25580fd372dbf50e65d19ad2272d395482e12fe763bd8e70b618a8a18cfd99663121527ae7e178b64cf9a5774bb7ad792df8750d7daec06bb3a584d1bac90f48ff8507d65129c084fe038141d0f47c77f3c4971ef57b1ee623d94be3b79bd772fa85f7b703183d9bce97b2cdc9b90cdbc9f99750153e895087defd534c64f2d7041ba8062bff3aa91da4928e15680031663f1b71b6c0fed554f96e9f4d682dcc2bb2024f4a2bd223a3b4330a0d0a26d4839ad6a15e9f7d4f14112195a99bf4cc59d4b6d85d08b613c78782a0e00c6d262714219c487a8cee86e76fbe7ad25edce0168fe74f0afd5442aaacaf4ff6a58eaf9d121da8f11b852f435e51abfe8e4ef9aca71d4d4e421897f4c55dc87739efffdcea6fa558195cb0b904cc8275228e49d24eb525876446b8ed5bfc3477200ad03e0fe8832fe3ac518e24491f71afc30d6c2c1196ce3e47c7b50e9fd66c665797c83d93d9d35d8de61a913be8c8d632490ef7bd05e5520f459f6c92a261187dd55e68bfaec191ed258dff13c8f4d64c466c8cbf96d79ef6fe122caf23b9b9615b78bf73c8e8942ebcf3675ef3a8f6e8c237ec1bbef8eac25d7e49969f0195746d9a67cd1b986e3f5d0d89a9e6f656ce5f2e7ce03a2baf27267a7e6f09310a7651f8f8aee063594c4440f2ccf04e8967b235cf56fe49e0b60b4c8ab77f71a3cbefab45478ad36cdbcbf8e3f2a1f121215f737b9458a4d2404505b82defabe7a869aa8aa70ca588745bab1648ca4e53ed45cee83ea3120600609d8c0dbfc433327463544420d7ce19913b7a823bf9b69297ba85828e7c2a37da5e982fd0d97f0f281c6089934d7230aacb6d67855069af951c43c3a3d222f87439ae50ba1b3056ca0bc874dd441737792dabc48ee1c4fcf811b32902ce40c8b4b69c536fdfbce9999dc4cfdabbb4d70ba0e73e035c1b2262321ad9324ae6399806c5e3aff79ea7264f8e7680f6a09698902876092bd73d3f46820aaa4085d068f44f669b9785189726b045c4b49124bd33ad1bc0541ba9812909949fe21c7d6f6989d5bdbf3f2c9413fe335e84d64c95d239b5e886a7116dde327b746dc584330fdf579cbc30b8a7e824fe7a0153744706d4b660865f56a456592942f1510e40229ea873cc3af0244a83103fee04b4405be89db8fd75e786d870b41af1a0ef93a72e5f3a97039c3bef94456ca3e21d8c6e84784486ea8518ddfdcc6826d279de7e663f16b8014fd5e5fca84529c89e79f8d928b85ca356c1967b5dd879fbdc0d20384a0e8fdd586868d37796393b5bf81183972b8d74ba0893cbee7ccdba163b73778075b9d80f0451622ea45bf2134a3adbe61380ddc09c6937607abbe39f86f920f82122b35bf2df437926f957c02e548ee01a61125a1396d6e75bd3e2ea8c68404964b2cb45c644a028d90a04eea2bcb16d0d3bcfb17e45e75c0ad623064306ffaca7b1b657e85a0a8a2dbd12e2957a03c9082b039278609e9c46b1610272b20d72edcc36a61ae42b580d5b8296fa28dd9943ddd88ed32caf600a8ebbaa056da3229fda211f5690b68958effac0fb849c3d3cc65d5af3bb6b8bbe10e03fbcc08987e1f5a129355aaa5cbbf7922097794d7a7eb211851404b3ef8d328292218f9d280ccbdb222de78c10bfbbd6deff917570cb3fa5c7a2a0e2a47f7b15138e1cd51b6b2c41dfb204b96bbe3c04050f771d1e9a7a531966da1b43832e325cb5527244921cc0c6c575652dcd7c4868b5d0065e4910ba5d9588d615bb5aa150b65352b3d1846f06a95b05f1f2a8f922f61f10dddac74c09a7821c125a92c66ef53173d45e93d2c1b8a4537e9a056444ac12e71784e83f4dcedc0f0b945ad22e9e6d76f5a66217cda79435da438d4294018548154319a2f4ba7e2c047a382529505fd9d2424ef88ca097f5768e0238928c6a5e2d00576633c270dd642c22a1b5dacf45188f3eb631fa8e00167a858ec44a97a687e382a980b92b8e6c785861e28dca231ceffa58760fffdeeec78f82b60ca390450bb6d808fba87ba71c8a8f7c931f7c887682e61e5aeef782a12853db9b973addec024faf28a42331c986da2d90cb5a2c4a204321db79544037182c368ad844cf7e294aa8124e6ff4cac25b117c6cc39adcf29c460a5fe6bdd203532bb716cb3a462b716c2efbcd92463e495eed56140cb4fdead6f65ba096166bb201822fb4b11664592c29b63b54f4b63e9e4909cafe5f462d160f8cb6c4e7a083e5f99371df9bd2cb4dec23ad6376eb24f1611d393302ccebd6eb95e0470c25b227328c791de911b2f6eeac31d35d1ba9215b3f5bcebf05d0d178ae6ab729b39c7dbad22d44ddf4ec797852c1790ae6312d93ec8af26bb66c2d1a5eee2e3dbf61e1f077fc35173af2d904199f580807487ddc6808e88086b1cf063641671a7cc27b80836103e573a1087bb724e80febf8bb6eaa2108161a2b0ae038506a0c38f49c9f333c9225e62cd4b82c890d4e8f5e258301ff64ce5ced22039379df9a95764ee6e5608f6e4146ba577e7aaf0f91b46e48c28ee90cc26d0bd2765d0170f6b874e15989073c7328c103ae7cb79aae619c5e66a12fe48e8d9c200a11a1a20b6f4120900806800f62014a55d0302d3532b4d5fe9bcead16fea05e82294c263ce5857693a75dbfd5c8e1db596fecd9a00a2fb2648fa120bcbb85405631a810be70bc29d9d20675486de68d55c19e7b35ee7c119cb38c302c2b1117482304fa53f4be710c25d25f6541037bb43aa25d1fed9b3ba6b3a37ef8d6125d53aae0a0f698afda4917f0c1a9d9f4cb5e833f0e2c9906b0ef111b3d8cf20fc16ef3695bb758115d30af5266bcebf1de188f1b31b4a0d591b7edf4b25b0b155cca98e901dc01cd32489a1ee9add6a13b84b8a9bd7499da7180ac9441f99af53b22775d1473911455d70e00b77196694d12d8a91f1c7f7559f9c79e41afcfbfa5d15ded230ed67c3a3818b2e9ad8a72789545c0b7b215d327d52f8100e44cbd22622108eba723846212b1b6444f7293b5e918567925d00fa0a4bad8f59fe1a8b8233fdcc0e6b04bfd22b139980c7bd1b6cd4f421560baef888a4a727e9a2b6f615195f633f6597b5ffbed246a4e0c45b220d23d14096e57af5608d1cd51000663f1f5fdc703bc571084d0a648592545d98ea32b9892dc6b81a0a5ae7587113d6e1785feb0f5682f55acbdeac2572a8ec7f89062591b8ce94e77fa63d188d71fc18503d1f8a1b4ac803e5ceaad111555c5553afca3379de2b5c1e3f1ba9edf5ab4b6e570b40a619aeceb25d8cafd5a39f93cad291dd6b63129f17314f232259cce1357208a0f1caf03f84bf772baba20eb872eafe00a9b273f1394a664b630331c6fb492a002057a9f93c794dd38e8d107750e1f5ab477c88b0647d67d15a1d6070c60e9dd8eac232d1c467722e17b82ddd89f9c0be81ad6e334efd9b1ad1fbd5bb6f358c9f1586cc38865dbe0fa007376fcf2edf53dfb6ae51df7e5743dc78209444a0e017db35889cd05db3e68396745ef3ea3f7bbe767de6f17ba062aab6e06c166e2583f62e1117957fb607677e38c03a3718d3b6b89be107b2607e7e4166af726b1cf24efdd9469e8327e3abee888ad461164bbba1260b43b85995ed5faa18d3162e880391958a88a1acdceaabdff61887ef0941497ab7731283c867a0275652ac3e87c8a46a7010fffb13052e49cc2bf20cfefaf7eba6c254899aecd7af06d8796c0cd25cfc0f9234f6e6180aa35b3bcc2beab3b08f16f8dd54cc95ed486688a685e93bedbb47b5e5c973d92aab436696dc56b4af55080cbf4f05d0972c23eca0849283da18a281e143926d758e718fa45ecc24ff774d2c2c47d36374e643863d234bc4596968592472284086220f6e369def97d6de51abc948ddd10afd2016d3fca95215c1523c8ba2f626ff4fb4886f65f9e5c95575711f9fe121dbb5d6aab3566c8dd773ecace00d19a0289ddcfbe79bbca3b3f9538460c6b01baf6ff744f8f1f6ea5c9e11bc52cf121e69f9520d60f992414872965e0602cfdeab145bba5eeba53afccf58f44a33e15df27c8855f1abaac7d78eef9ab7b1f348a0ac224584bcccd75aca63f1b2ad4b98b8658ed7e1a5ff7b65a508b096c1eb6a3332643739bf04cae3370faed282a35b6d6b70bed5cdc5169364d78c038bf9e447f1627b8769338b239e36281de54a2003ceabaaaff71ffa10d2f463855c33c71bc7e06da3be9ed07902564b7eb61fa27f9082f16f55bb6e5fe7999630384133dbfdadf46e2bc33ff718e80150499aec48906d6086e4f04651c2b893e708f31ba27f2025fdc8397c84ff71406842c4e6dc7c8a01ef1c243247ca4333d589883784993128368cbe581a9eadc16c4cc33b5c56e22f54b8edc356916b45affa9d80fd35d47dfa79b301268e5499ccc30debc52ee730f2c42ee19e5a5dffae7cfd4a2b99c4ed08c68f446b07a1ef6f3868410048702467850f5751ce0a26d0ace3a3985d0f0b3c07dd340e33769ec74b0c529ca73a5495a8b8c3e7ab508dbe2725887125dcca865a4059438a0c7995fa1529e4ea44e94799b6237d7121499692a4d335b53cce1e32404380e0bc185f44bc33b1bce335dfc54eb288ab5a5ef27550a37e46ef2ba9e23bddbf5e177b55e691e09b519cd42331ccf5be51ebb146fa56fa48bed6d1aa7be90bb0f671ff4ed038ced9d8371fef9cc6f191881a34aa6952654970a530284cf1d42807149cf0cf3de63d836cb0e90db35424ed853c15deb9cf98caee3ea972ff7d27f2416953ba0dd20d7d16d3b09e52a43654b092a0a14406c8b2abf27582fe00a18d6f7bbec02d3f099cf5c8e70fdc885472dd7e129317a953ed428e9a520db9aeec81908e3fead02db61f360338ccce63771054b9566733fd0f4d5047be9fc5a333ea626d88d1e8d398b83080f48a408864e198c4e2b3706f6e80771164742fe405ee3e50f776ad837733f65dc86791594449eb046abb15c2b42b23e644aaac54b73aace855a4229540165bf5b8d94e0963c7cf3359b467b00db127e6f6194f2926da6eb0bd73dd1d2dee116dbd1d1dd1fd7f89123dda86086a23450a7af34fdb79d873f8671cd381d8c0f80fbe6cf1c697f2be6171719f3f0c3ce381482595fa9a78ab87cc9658d8e5b83267caf2fb57a75a88faabcdaea0443afd8debbf68cda278c18ecc8dc89527ac4638aaea8fec6d016813577c6f26eb5d940ddc532657662932721b74113d48d7ab8b9a6d08623c1292338e2138cb48020adc7142a5acbb4ae25173adce9a6f20f55be1adb7e197adf81fde7ed8b0e82969a5392520dde77ea5c1850a5be72b381f05d546e884229947de4d52e69e9477ba3e737f831544b25e774d35be90e8f37dbf59ee84e329974d171193421b9d1f42b6510c61043ae94ff38eb93ce706119f329ac4c847f2c3add75faf49b5d0a395e6604a6b8731aca6180f07fefaf7d26891789701a8c92d7adfa1ccbcaf5cc716ba89f2ef26fcce88707c6571eaa2e55805d6c8431a78ccaa0e00af44877e901b32862e780c560bb6fe579b79167fcab1b9d958ae531addbc8a01179f208a183e532d6d28a6d5e697c2ce30be155e6cfc9c96db2c450cb90ed38e0377658d75b2a0cabfaacf48a2e90664da793aca09d936912c31b18bcf125f8de9e861a6b61257940d8fdf5c8fb3f961500f6491d10b09e56e9037ec9fc9c5b3f4ec4a08a93f643927386fb1f7b82f770976a2920c3dd51c0b8664c3c1fc5f5577e8c5784cb55bf5dc14e180d216c2d3bf37774b6705365ddf7420395c4f8cd57033673ede08c792acd5a6b9942aaaf567ebda59b97fa3740a8513c2e98d9f9f2d3f635366bd735646fbf998b43334649461f7217193ffdc382dcf221b2425943897a8453c8c20494c59553f9f2dde9e6eb012554bbb0d98966b69a2ffe9818c0f754d194b0acbaa9898df1088a810f9893bbede7dad51d58457970eb5c37e07ad7f3a87ec7fae498e0efff63cf26c847dec6d0b43f71e513aacd555ce143cbf0b2de1ae1cfa17d1b4a453900e77a7042b455ac3010f81d8f0b1020e48576fbce61a5cdcfdd6a4d8ba6cf14a72ea055fac65fd6603ee1f6132e558cbaf0293e5f5e4458d2f6f57b159efba249035e623508b6ebf4212880537054d2638794f65aaa8017b1f7982b3196940545698acf38825e190a4d7268936d38994caad4700a22b921d8f0d6372ef9543cad36d2c8db167953e174b33e0d71375cc296a8dce8b4f66a3ab868106131e54cb21e3a355baf2c2d04da339f4cb36cece67733a25e54195ffdb08eae0350b891fbefa1bf40f8d6c5513615f3ff0ff8a3be412c2a747327b6f737fd8790f5e0078615abc18d3428362aa08763522cfa86e07ad9eb7fcbfa9ab43f7329fc910353ba011cf50b5519ae25f0e6741357fafde7acac2807104c9acfbe107bcb1cd9b1aec4feccf4531585bf8fd1a9b1f3a14267f86ab85ada513e80795cb990bcde6edd3c214cf431902ef30e6c7c5c83f85fa64d81e62b969f925fda617700727896341006b5cfd71cec0966bdea79116667600b7b8fca3f7f5c38a598c544eb4b9c4ed471dd82012e8a7c5ba1adcfa7dd8ba392fc7ae6e2b716743aef3ec95544ed8557085520c693341f11519377fff8dcad507808df581eea2eecd79a526324d2c9de1c05645fdf97976a695738fa74cb609f13c38ea66361a2d05b085fb33b72d973dcfdcbd0e3a88c15cc8981d57b9493fc8d17368bba45767940f" +} diff --git a/contracts/test/contract/sequencerInboxForceInclude.spec.ts b/contracts/test/contract/sequencerInboxForceInclude.spec.ts index 43634737c..125379e69 100644 --- a/contracts/test/contract/sequencerInboxForceInclude.spec.ts +++ b/contracts/test/contract/sequencerInboxForceInclude.spec.ts @@ -26,6 +26,7 @@ import { Inbox, Inbox__factory, MessageTester, + RollupMock__factory, SequencerInbox, SequencerInbox__factory, TransparentUpgradeableProxy__factory, @@ -38,6 +39,8 @@ import { MessageDeliveredEvent, } from '../../build/types/src/bridge/Bridge' import { Signer } from 'ethers' +import { Toolkit4844 } from './toolkit4844' +import { data } from './batchData.json' const mineBlocks = async (count: number, timeDiffPerBlock = 14) => { const block = (await network.provider.send('eth_getBlockByNumber', [ @@ -219,12 +222,25 @@ describe('SequencerInboxForceInclude', async () => { const admin = accounts[0] const adminAddr = await admin.getAddress() const user = accounts[1] - const dummyRollup = accounts[2] + // const dummyRollup = accounts[2] + const rollupOwner = accounts[3] + const batchPoster = accounts[4] + // const batchPosterManager = accounts[5] + const rollupMockFac = (await ethers.getContractFactory( + 'RollupMock' + )) as RollupMock__factory + const rollup = await rollupMockFac.deploy(await rollupOwner.getAddress()) + + const reader4844 = await Toolkit4844.deployReader4844(admin) const sequencerInboxFac = (await ethers.getContractFactory( 'SequencerInbox' )) as SequencerInbox__factory - const seqInboxTemplate = await sequencerInboxFac.deploy(117964) + const seqInboxTemplate = await sequencerInboxFac.deploy( + 117964, + reader4844.address, + false + ) const inboxFac = (await ethers.getContractFactory( 'Inbox' )) as Inbox__factory @@ -252,17 +268,14 @@ describe('SequencerInboxForceInclude', async () => { adminAddr, '0x' ) - const bridge = await bridgeFac.attach(bridgeProxy.address).connect(user) const bridgeAdmin = await bridgeFac .attach(bridgeProxy.address) - .connect(dummyRollup) + .connect(rollupOwner) const sequencerInbox = await sequencerInboxFac .attach(sequencerInboxProxy.address) .connect(user) - const inbox = await inboxFac.attach(inboxProxy.address).connect(user) - - await bridge.initialize(await dummyRollup.getAddress()) + await bridge.initialize(rollup.address) await sequencerInbox.initialize(bridgeProxy.address, { delayBlocks: maxDelayBlocks, @@ -270,11 +283,26 @@ describe('SequencerInboxForceInclude', async () => { futureBlocks: 10, futureSeconds: 3000, }) + + await ( + await sequencerInbox + .connect(rollupOwner) + .setIsBatchPoster(await batchPoster.getAddress(), true) + ).wait() + + const inbox = await inboxFac.attach(inboxProxy.address).connect(user) + await inbox.initialize(bridgeProxy.address, sequencerInbox.address) await bridgeAdmin.setDelayedInbox(inbox.address, true) await bridgeAdmin.setSequencerInbox(sequencerInbox.address) + await ( + await sequencerInbox + .connect(rollupOwner) + .setIsBatchPoster(await batchPoster.getAddress(), true) + ).wait() + const messageTester = (await ( await ethers.getContractFactory('MessageTester') ).deploy()) as MessageTester @@ -283,18 +311,103 @@ describe('SequencerInboxForceInclude', async () => { user, bridge: bridge, inbox: inbox, - sequencerInbox: sequencerInbox, + sequencerInbox: sequencerInbox as SequencerInbox, messageTester, inboxProxy, inboxTemplate, + batchPoster, bridgeProxy, + rollup, + rollupOwner, } } + it('can add batch', async () => { + const { user, inbox, bridge, messageTester, sequencerInbox, batchPoster } = + await setupSequencerInbox() + + await sendDelayedTx( + user, + inbox, + bridge, + messageTester, + 1000000, + 21000000000, + 0, + await user.getAddress(), + BigNumber.from(10), + '0x1010' + ) + + const messagesRead = await bridge.delayedMessageCount() + const seqReportedMessageSubCount = + await bridge.sequencerReportedSubMessageCount() + await ( + await sequencerInbox + .connect(batchPoster) + .functions[ + 'addSequencerL2BatchFromOrigin(uint256,bytes,uint256,address,uint256,uint256)' + ]( + 0, + data, + messagesRead, + ethers.constants.AddressZero, + seqReportedMessageSubCount, + seqReportedMessageSubCount.add(10), + { gasLimit: 10000000 } + ) + ).wait() + }) + it('can force-include', async () => { const { user, inbox, bridge, messageTester, sequencerInbox } = await setupSequencerInbox() + const delayedTx = await sendDelayedTx( + user, + inbox, + bridge, + messageTester, + 1000000, + 21000000000, + 0, + await user.getAddress(), + BigNumber.from(10), + '0x1010' + ) + + const [delayBlocks, , ,] = await sequencerInbox.maxTimeVariation() + await mineBlocks(delayBlocks.toNumber()) + + await forceIncludeMessages( + sequencerInbox, + delayedTx.inboxAccountLength, + delayedTx.deliveredMessageEvent.kind, + delayedTx.l1BlockNumber, + delayedTx.l1BlockTimestamp, + delayedTx.baseFeeL1, + delayedTx.senderAddr, + delayedTx.deliveredMessageEvent.messageDataHash + ) + }) + + it('can force-include-with-max-seqReportedCount', async () => { + const { user, inbox, bridge, messageTester, batchPoster, sequencerInbox } = + await setupSequencerInbox() + + await sequencerInbox + .connect(batchPoster) + [ + 'addSequencerL2BatchFromOrigin(uint256,bytes,uint256,address,uint256,uint256)' + ]( + 0, + '0x', + 0, + ethers.constants.AddressZero, + 0, + ethers.constants.MaxUint256 + ) + const delayedTx = await sendDelayedTx( user, inbox, @@ -309,7 +422,7 @@ describe('SequencerInboxForceInclude', async () => { ) const maxTimeVariation = await sequencerInbox.maxTimeVariation() - await mineBlocks(maxTimeVariation.delayBlocks.toNumber()) + await mineBlocks(maxTimeVariation[0].toNumber()) await forceIncludeMessages( sequencerInbox, @@ -352,8 +465,8 @@ describe('SequencerInboxForceInclude', async () => { '0xdeadface' ) - const maxTimeVariation = await sequencerInbox.maxTimeVariation() - await mineBlocks(maxTimeVariation.delayBlocks.toNumber()) + const [delayBlocks, , ,] = await sequencerInbox.maxTimeVariation() + await mineBlocks(delayBlocks.toNumber()) await forceIncludeMessages( sequencerInbox, @@ -417,8 +530,8 @@ describe('SequencerInboxForceInclude', async () => { '0x10101010' ) - const maxTimeVariation = await sequencerInbox.maxTimeVariation() - await mineBlocks(maxTimeVariation.delayBlocks.toNumber()) + const [delayBlocks, , ,] = await sequencerInbox.maxTimeVariation() + await mineBlocks(delayBlocks.toNumber()) await forceIncludeMessages( sequencerInbox, @@ -448,8 +561,8 @@ describe('SequencerInboxForceInclude', async () => { '0x1010' ) - const maxTimeVariation = await sequencerInbox.maxTimeVariation() - await mineBlocks(maxTimeVariation.delayBlocks.toNumber() - 1, 5) + const [delayBlocks, , ,] = await sequencerInbox.maxTimeVariation() + await mineBlocks(delayBlocks.toNumber() - 1, 5) await forceIncludeMessages( sequencerInbox, @@ -480,10 +593,10 @@ describe('SequencerInboxForceInclude', async () => { '0x1010' ) - const maxTimeVariation = await sequencerInbox.maxTimeVariation() + const [delayBlocks, , ,] = await sequencerInbox.maxTimeVariation() // mine a lot of blocks - but use a short time per block // this should mean enough blocks have passed, but not enough time - await mineBlocks(maxTimeVariation.delayBlocks.toNumber() + 1, 5) + await mineBlocks(delayBlocks.toNumber() + 1, 5) await forceIncludeMessages( sequencerInbox, diff --git a/contracts/test/contract/toolkit4844.ts b/contracts/test/contract/toolkit4844.ts new file mode 100644 index 000000000..258a2400c --- /dev/null +++ b/contracts/test/contract/toolkit4844.ts @@ -0,0 +1,136 @@ +import { execSync } from 'child_process' +import { ContractFactory, Signer, ethers } from 'ethers' +import * as http from 'http' +import { IReader4844, IReader4844__factory } from '../../build/types' +import { JsonRpcProvider } from '@ethersproject/providers' +import { bytecode as Reader4844Bytecode } from '../../out/yul/Reader4844.yul/Reader4844.json' + +const wait = async (ms: number) => + new Promise(res => { + setTimeout(res, ms) + }) + +export class Toolkit4844 { + public static DATA_BLOB_HEADER_FLAG = '0x50' // 0x40 | 0x10 + + public static postDataToGeth(body: any): Promise { + return new Promise((resolve, reject) => { + const options = { + hostname: '127.0.0.1', + port: 8545, + path: '/', + method: 'POST', + headers: { + 'Content-Type': 'application/json;charset=UTF-8', + 'Content-Length': Buffer.byteLength(JSON.stringify(body)), + }, + } + + const req = http.request(options, res => { + let data = '' + + // Event emitted when a chunk of data is received + res.on('data', chunk => { + data += chunk + }) + + // Event emitted when the response is fully received + res.on('end', () => { + resolve(JSON.parse(data)) + }) + }) + + // Handle any errors + req.on('error', error => { + reject(error) + }) + + // Send the POST data + req.write(JSON.stringify(body)) + + // Close the request + req.end() + }) + } + + public static async getTx( + txHash: string + ): Promise { + const body = { + method: 'eth_getTransactionByHash', + params: [txHash], + id: Date.now(), + jsonrpc: '2.0', + } + return (await this.postDataToGeth(body))['result'] + } + + public static async getTxReceipt( + txHash: string + ): Promise { + const body = { + method: 'eth_getTransactionReceipt', + params: [txHash], + id: Date.now(), + jsonrpc: '2.0', + } + return (await this.postDataToGeth(body))['result'] + } + + public static async chainId(): Promise { + const body = { + method: 'eth_chainId', + params: [], + id: Date.now(), + jsonrpc: '2.0', + } + return (await this.postDataToGeth(body))['result'] + } + + public static isReplacementError(err: string) { + const errRegex = + /Error while sending transaction: replacement transaction underpriced:/ + const match = err.match(errRegex) + return Boolean(match) + } + + public static async waitUntilBlockMined( + blockNumber: number, + provider: JsonRpcProvider + ) { + while ((await provider.getBlockNumber()) <= blockNumber) { + await wait(300) + } + } + + public static async sendBlobTx( + privKey: string, + to: string, + blobs: string[], + data: string + ) { + const blobStr = blobs.reduce((acc, blob) => acc + ' -b ' + blob, '') + const blobCommand = `docker run --network=nitro-testnode_default ethpandaops/goomy-blob@sha256:8fd6dfe19bedf43f485f1d5ef3db0a0af569c1a08eacc117d5c5ba43656989f0 blob-sender -p ${privKey} -r http://geth:8545 -t ${to} -d ${data} --gaslimit 1000000${blobStr} 2>&1` + const res = execSync(blobCommand).toString() + const txHashRegex = /0x[a-fA-F0-9]{64}/ + const match = res.match(txHashRegex) + if (match) { + await wait(10000) + return match[0] + } else { + throw new Error('Error sending blob tx:\n' + res) + } + } + + public static async deployReader4844(wallet: Signer): Promise { + const contractFactory = new ContractFactory( + IReader4844__factory.abi, + Reader4844Bytecode, + wallet + ) + const reader4844 = await contractFactory.deploy() + await reader4844.deployed() + + return IReader4844__factory.connect(reader4844.address, wallet) + } +} diff --git a/contracts/test/contract/validatorWallet.spec.ts b/contracts/test/contract/validatorWallet.spec.ts index ecd504b22..35fd127a2 100644 --- a/contracts/test/contract/validatorWallet.spec.ts +++ b/contracts/test/contract/validatorWallet.spec.ts @@ -46,8 +46,8 @@ describe('Validator Wallet', () => { await wallet.transferOwnership(await owner.getAddress()) const RollupMock = await ethers.getContractFactory('RollupMock') - rollupMock1 = (await RollupMock.deploy()) as RollupMock - rollupMock2 = (await RollupMock.deploy()) as RollupMock + rollupMock1 = (await RollupMock.deploy(ethers.constants.AddressZero)) as RollupMock + rollupMock2 = (await RollupMock.deploy(ethers.constants.AddressZero)) as RollupMock await accounts[0].sendTransaction({ to: wallet.address, diff --git a/contracts/test/e2e/erc20rollup.ts b/contracts/test/e2e/erc20rollup.ts new file mode 100644 index 000000000..a09e5c26e --- /dev/null +++ b/contracts/test/e2e/erc20rollup.ts @@ -0,0 +1,405 @@ +import { + L1ToL2MessageGasEstimator, + L1ToL2MessageStatus, + L1TransactionReceipt, + L2Network, + L2TransactionReceipt, +} from '@arbitrum/sdk' +import { getBaseFee } from '@arbitrum/sdk/dist/lib/utils/lib' +import { JsonRpcProvider } from '@ethersproject/providers' +import { expect } from 'chai' +import { ethers, Wallet } from '@arbitrum/sdk/node_modules/ethers' +import { + ArbSys__factory, + ERC20, + ERC20Bridge__factory, + ERC20Inbox, + ERC20Inbox__factory, + ERC20__factory, + EthVault__factory, + RollupCore__factory, +} from '../../build/types' +import { setupNetworks, sleep } from '../../scripts/testSetup' +import { applyAlias } from '../contract/utils' + +export const config = { + arbUrl: 'http://localhost:8547', + ethUrl: 'http://localhost:8545', +} + +let l1Provider: JsonRpcProvider +let l2Provider: JsonRpcProvider +let _l2Network: L2Network & { nativeToken: string } +let userL1Wallet: Wallet +let userL2Wallet: Wallet +let token: ERC20 +let inbox: ERC20Inbox +const excessFeeRefundAddress = Wallet.createRandom().address +const callValueRefundAddress = Wallet.createRandom().address + +describe('ArbERC20Rollup', () => { + // setup providers and connect deployed contracts + before(async function () { + const { l2Network } = await setupNetworks(config.ethUrl, config.arbUrl) + _l2Network = l2Network + + l1Provider = new JsonRpcProvider(config.ethUrl) + l2Provider = new JsonRpcProvider(config.arbUrl) + userL1Wallet = new ethers.Wallet( + ethers.utils.sha256(ethers.utils.toUtf8Bytes('user_l1user')), + l1Provider + ) + userL2Wallet = new ethers.Wallet(userL1Wallet.privateKey, l2Provider) + token = ERC20__factory.connect(_l2Network.nativeToken, l1Provider) + inbox = ERC20Inbox__factory.connect(_l2Network.ethBridge.inbox, l1Provider) + }) + + it('should have deployed bridge contracts', async function () { + // get rollup as entry point + const rollup = RollupCore__factory.connect( + _l2Network.ethBridge.rollup, + l1Provider + ) + + // check contract refs are properly set + expect(rollup.address).to.be.eq(_l2Network.ethBridge.rollup) + expect((await rollup.sequencerInbox()).toLowerCase()).to.be.eq( + _l2Network.ethBridge.sequencerInbox + ) + expect(await rollup.outbox()).to.be.eq(_l2Network.ethBridge.outbox) + expect((await rollup.inbox()).toLowerCase()).to.be.eq( + _l2Network.ethBridge.inbox + ) + + const erc20Bridge = ERC20Bridge__factory.connect( + await rollup.bridge(), + l1Provider + ) + expect(erc20Bridge.address.toLowerCase()).to.be.eq( + _l2Network.ethBridge.bridge + ) + expect((await erc20Bridge.nativeToken()).toLowerCase()).to.be.eq( + _l2Network.nativeToken + ) + }) + + it('can deposit native token to L2', async function () { + // snapshot state before deposit + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + + /// deposit 60 tokens + const amountToDeposit = ethers.utils.parseEther('60') + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, amountToDeposit) + ).wait() + const depositTx = await inbox + .connect(userL1Wallet) + .depositERC20(amountToDeposit) + + // wait for deposit to be processed + const depositRec = await L1TransactionReceipt.monkeyPatchEthDepositWait( + depositTx + ).wait() + const l2Result = await depositRec.waitForL2(l2Provider) + expect(l2Result.complete).to.be.true + + // check user balance increased on L2 and decreased on L1 + const userL1TokenBalanceAfter = await token.balanceOf(userL1Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenBalanceAfter)).to.be.eq( + amountToDeposit + ) + const userL2BalanceAfter = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2BalanceAfter.sub(userL2Balance)).to.be.eq(amountToDeposit) + + const bridgeL1TokenBalanceAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + // bridge escrow increased + expect(bridgeL1TokenBalanceAfter.sub(bridgeL1TokenBalance)).to.be.eq( + amountToDeposit + ) + }) + + it('can issue retryable ticket (no calldata)', async function () { + // snapshot state before issuing retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const aliasL2Balance = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + const excessFeeReceiverBalance = await l2Provider.getBalance( + excessFeeRefundAddress + ) + const callValueRefundReceiverBalance = await l2Provider.getBalance( + callValueRefundAddress + ) + + //// retryables params + + const to = userL1Wallet.address + const l2CallValue = ethers.utils.parseEther('37') + const data = '0x' + + const l1ToL2MessageGasEstimate = new L1ToL2MessageGasEstimator(l2Provider) + const retryableParams = await l1ToL2MessageGasEstimate.estimateAll( + { + from: userL1Wallet.address, + to: to, + l2CallValue: l2CallValue, + excessFeeRefundAddress: excessFeeRefundAddress, + callValueRefundAddress: callValueRefundAddress, + data: data, + }, + await getBaseFee(l1Provider), + l1Provider + ) + + const tokenTotalFeeAmount = retryableParams.deposit + const gasLimit = retryableParams.gasLimit + const maxFeePerGas = retryableParams.maxFeePerGas + const maxSubmissionCost = retryableParams.maxSubmissionCost + + /// deposit 37 tokens using retryable + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, tokenTotalFeeAmount) + ).wait() + + const retryableTx = await inbox + .connect(userL1Wallet) + .createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ) + + // wait for L2 msg to be executed + await waitOnL2Msg(retryableTx) + + // check balances after retryable is processed + const userL1TokenAfter = await token.balanceOf(userL1Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenAfter)).to.be.eq( + tokenTotalFeeAmount + ) + + const userL2After = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2After.sub(userL2Balance)).to.be.eq(l2CallValue) + + const aliasL2BalanceAfter = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + expect(aliasL2BalanceAfter).to.be.eq(aliasL2Balance) + + const excessFeeReceiverBalanceAfter = await l2Provider.getBalance( + excessFeeRefundAddress + ) + expect(excessFeeReceiverBalanceAfter).to.be.gte(excessFeeReceiverBalance) + + const callValueRefundReceiverBalanceAfter = await l2Provider.getBalance( + callValueRefundAddress + ) + expect(callValueRefundReceiverBalanceAfter).to.be.eq( + callValueRefundReceiverBalance + ) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenAfter.sub(bridgeL1TokenBalance)).to.be.eq( + tokenTotalFeeAmount + ) + }) + + it('can issue retryable ticket', async function () { + // deploy contract on L2 which will be retryable's target + const ethVaultContract = await new EthVault__factory( + userL2Wallet.connect(l2Provider) + ).deploy() + await ethVaultContract.deployed() + + // snapshot state before retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const aliasL2Balance = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + const excessFeeReceiverBalance = await l2Provider.getBalance( + excessFeeRefundAddress + ) + const callValueRefundReceiverBalance = await l2Provider.getBalance( + callValueRefundAddress + ) + + //// retryables params + + const to = ethVaultContract.address + const l2CallValue = ethers.utils.parseEther('45') + // calldata -> change 'version' field to 11 + const newValue = 11 + const data = new ethers.utils.Interface([ + 'function setVersion(uint256 _version)', + ]).encodeFunctionData('setVersion', [newValue]) + + const l1ToL2MessageGasEstimate = new L1ToL2MessageGasEstimator(l2Provider) + const retryableParams = await l1ToL2MessageGasEstimate.estimateAll( + { + from: userL1Wallet.address, + to: to, + l2CallValue: l2CallValue, + excessFeeRefundAddress: excessFeeRefundAddress, + callValueRefundAddress: callValueRefundAddress, + data: data, + }, + await getBaseFee(l1Provider), + l1Provider + ) + + const tokenTotalFeeAmount = retryableParams.deposit + const gasLimit = retryableParams.gasLimit + const maxFeePerGas = retryableParams.maxFeePerGas + const maxSubmissionCost = retryableParams.maxSubmissionCost + + /// execute retryable + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, tokenTotalFeeAmount) + ).wait() + + const retryableTx = await inbox + .connect(userL1Wallet) + .createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ) + + // wait for L2 msg to be executed + await waitOnL2Msg(retryableTx) + + // check balances after retryable is processed + const userL1TokenAfter = await token.balanceOf(userL2Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenAfter)).to.be.eq( + tokenTotalFeeAmount + ) + + const userL2After = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2After).to.be.eq(userL2Balance) + + const ethVaultBalanceAfter = await l2Provider.getBalance( + ethVaultContract.address + ) + expect(ethVaultBalanceAfter).to.be.eq(l2CallValue) + + const ethVaultVersion = await ethVaultContract.version() + expect(ethVaultVersion).to.be.eq(newValue) + + const aliasL2BalanceAfter = await l2Provider.getBalance( + applyAlias(userL1Wallet.address) + ) + expect(aliasL2BalanceAfter).to.be.eq(aliasL2Balance) + + const excessFeeReceiverBalanceAfter = await l2Provider.getBalance( + excessFeeRefundAddress + ) + expect(excessFeeReceiverBalanceAfter).to.be.gte(excessFeeReceiverBalance) + + const callValueRefundReceiverBalanceAfter = await l2Provider.getBalance( + callValueRefundAddress + ) + expect(callValueRefundReceiverBalanceAfter).to.be.eq( + callValueRefundReceiverBalance + ) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenAfter.sub(bridgeL1TokenBalance)).to.be.eq( + tokenTotalFeeAmount + ) + }) + + it('can withdraw funds from L2 to L1', async function () { + // snapshot state before issuing retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + + /// send L2 to L1 TX + const arbSys = ArbSys__factory.connect( + '0x0000000000000000000000000000000000000064', + l2Provider + ) + const withdrawAmount = ethers.utils.parseEther('3') + const withdrawTx = await arbSys + .connect(userL2Wallet) + .sendTxToL1(userL1Wallet.address, '0x', { + value: withdrawAmount, + }) + const withdrawReceipt = await withdrawTx.wait() + const l2Receipt = new L2TransactionReceipt(withdrawReceipt) + + // wait until dispute period passes and withdrawal is ready for execution + await sleep(5 * 1000) + + const messages = await l2Receipt.getL2ToL1Messages(userL1Wallet) + const l2ToL1Msg = messages[0] + const timeToWaitMs = 60 * 1000 + await l2ToL1Msg.waitUntilReadyToExecute(l2Provider, timeToWaitMs) + + // execute + await (await l2ToL1Msg.execute(l2Provider)).wait() + + // check balances after withdrawal is processed + const userL1TokenAfter = await token.balanceOf(userL2Wallet.address) + expect(userL1TokenAfter.sub(userL1TokenBalance)).to.be.eq(withdrawAmount) + + const userL2BalanceAfter = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2BalanceAfter).to.be.lte(userL2Balance.sub(withdrawAmount)) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenBalance.sub(bridgeL1TokenAfter)).to.be.eq( + withdrawAmount + ) + }) +}) + +async function waitOnL2Msg(tx: ethers.ContractTransaction) { + const retryableReceipt = await tx.wait() + const l1TxReceipt = new L1TransactionReceipt(retryableReceipt) + const messages = await l1TxReceipt.getL1ToL2Messages(l2Provider) + + // 1 msg expected + const messageResult = await messages[0].waitForStatus() + const status = messageResult.status + expect(status).to.be.eq(L1ToL2MessageStatus.REDEEMED) +} diff --git a/contracts/test/foundry/AbsBridge.t.sol b/contracts/test/foundry/AbsBridge.t.sol new file mode 100644 index 000000000..1ce9737bf --- /dev/null +++ b/contracts/test/foundry/AbsBridge.t.sol @@ -0,0 +1,522 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/IBridge.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "../../src/test-helpers/EthVault.sol"; + +abstract contract AbsBridgeTest is Test { + IBridge public bridge; + + address public user = address(100); + address public userB = address(101); + + address public rollup = address(1000); + address public inbox; + address public outbox = address(1002); + address public seqInbox = address(1003); + + /* solhint-disable func-name-mixedcase */ + function test_enqueueSequencerMessage_NoDelayedMsgs() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // enqueue sequencer msg + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 0; + uint256 prevMessageCount = 0; + uint256 newMessageCount = 15; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid newMessageCount" + ); + bytes32 seqInboxEntry = keccak256(abi.encodePacked(bytes32(0), dataHash, bytes32(0))); + assertEq(bridge.sequencerInboxAccs(0), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 1, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 0, "Invalid seqMessageIndex"); + assertEq(beforeAcc, 0, "Invalid beforeAcc"); + assertEq(delayedAcc, 0, "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_IncludeDelayedMsgs() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + vm.stopPrank(); + + // enqueue sequencer msg with 2 delayed msgs + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 2; + uint256 prevMessageCount = 0; + uint256 newMessageCount = 15; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid sequencerReportedSubMessageCount" + ); + bytes32 seqInboxEntry = keccak256( + abi.encodePacked(bytes32(0), dataHash, bridge.delayedInboxAccs(1)) + ); + assertEq(bridge.sequencerInboxAccs(0), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 1, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 0, "Invalid seqMessageIndex"); + assertEq(beforeAcc, 0, "Invalid beforeAcc"); + assertEq(delayedAcc, bridge.delayedInboxAccs(1), "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_SecondEnqueuedMsg() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox and seq inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, 0, 10); + vm.stopPrank(); + + // enqueue 2nd sequencer msg with additional delayed msgs + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 3; + uint256 prevMessageCount = 10; + uint256 newMessageCount = 20; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid sequencerReportedSubMessageCount" + ); + bytes32 seqInboxEntry = keccak256( + abi.encodePacked(bridge.sequencerInboxAccs(0), dataHash, bridge.delayedInboxAccs(2)) + ); + assertEq(bridge.sequencerInboxAccs(1), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 2, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 1, "Invalid seqMessageIndex"); + assertEq(beforeAcc, bridge.sequencerInboxAccs(0), "Invalid beforeAcc"); + assertEq(delayedAcc, bridge.delayedInboxAccs(2), "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_revert_BadSequencerMessageNumber() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox and seq inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, 0, 10); + vm.stopPrank(); + + // setting wrong msg counter shall revert + vm.prank(seqInbox); + uint256 incorrectPrevMsgCount = 300; + vm.expectRevert( + abi.encodeWithSelector(BadSequencerMessageNumber.selector, 10, incorrectPrevMsgCount) + ); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, incorrectPrevMsgCount, 10); + } + + function test_enqueueSequencerMessage_revert_NonSeqInboxCall() public { + // enqueueSequencerMessage shall revert + vm.expectRevert(abi.encodeWithSelector(NotSequencerInbox.selector, address(this))); + bridge.enqueueSequencerMessage(keccak256("msg"), 0, 0, 10); + } + + function test_submitBatchSpendingReport() public { + address sender = address(250); + bytes32 messageDataHash = keccak256(abi.encode("msg")); + + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 0, + 0, + seqInbox, + 13, + sender, + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // submit report + vm.prank(seqInbox); + uint256 count = bridge.submitBatchSpendingReport(sender, messageDataHash); + + // checks + assertEq(count, 0, "Invalid count"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid msg count"); + } + + function test_submitBatchSpendingReport_TwoInRow() public { + address sender = address(250); + bytes32 messageDataHash = keccak256(abi.encode("msg")); + + // submit 1st report + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + vm.prank(seqInbox); + bridge.submitBatchSpendingReport(sender, messageDataHash); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 1, + bridge.delayedInboxAccs(0), + seqInbox, + 13, + sender, + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // submit 2nd report + vm.prank(seqInbox); + uint256 count = bridge.submitBatchSpendingReport(sender, messageDataHash); + + // checks + assertEq(count, 1, "Invalid count"); + assertEq(bridge.delayedMessageCount(), 2, "Invalid msg count"); + } + + function test_submitBatchSpendingReport_revert_NonSeqInboxCall() public { + // submitBatchSpendingReport shall revert + vm.expectRevert(abi.encodeWithSelector(NotSequencerInbox.selector, address(this))); + bridge.submitBatchSpendingReport(address(2), keccak256("msg")); + } + + function test_setSequencerInbox() public { + // expect event + vm.expectEmit(true, true, true, true); + emit SequencerInboxUpdated(seqInbox); + + // set seqInbox + vm.prank(address(bridge.rollup())); + bridge.setSequencerInbox(seqInbox); + + // checks + assertEq(bridge.sequencerInbox(), seqInbox, "Invalid seqInbox"); + } + + function test_setSequencerInbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setSequencerInbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setSequencerInbox(seqInbox); + } + + function test_setDelayedInbox_enableInbox() public { + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, true); + + // enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + assertEq(inbox, bridge.allowedDelayedInboxList(0), "Invalid allowedDelayedInboxList"); + } + + function test_setDelayedInbox_disableInbox() public { + // initially enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, false); + + // disable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, false); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + vm.expectRevert(); + bridge.allowedDelayedInboxList(0); + } + + function test_setDelayedInbox_ReEnableInbox() public { + // initially enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, true); + + // enable again inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + assertEq(inbox, bridge.allowedDelayedInboxList(0), "Invalid allowedDelayedInboxList"); + } + + function test_setDelayedInbox_ReDisableInbox() public { + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, false); + + // disable again inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, false); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + vm.expectRevert(); + bridge.allowedDelayedInboxList(0); + } + + function test_setDelayedInbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setDelayedInbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setDelayedInbox(inbox, true); + } + + function test_setOutbox_EnableOutbox() public { + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, true); + + // enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // checks + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + assertEq(outbox, bridge.allowedOutboxList(0), "Invalid allowedOutboxList"); + } + + function test_setOutbox_DisableOutbox() public { + // initially enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, false); + + // disable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, false); + + // checks + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + vm.expectRevert(); + bridge.allowedOutboxList(0); + } + + function test_setOutbox_ReEnableOutbox() public { + // initially enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, true); + + // enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // checks + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + assertEq(outbox, bridge.allowedOutboxList(0), "Invalid allowedOutboxList"); + } + + function test_setOutbox_ReDisableOutbox() public { + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, false); + + // disable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, false); + + // checks + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + vm.expectRevert(); + bridge.allowedOutboxList(0); + } + + function test_setOutbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setOutbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setOutbox(outbox, true); + } + + function test_setOutbox_revert_InvalidOutboxSet() public { + address invalidOutbox = address(type(uint160).max); + + // setOutbox shall revert + vm.expectRevert(abi.encodeWithSelector(InvalidOutboxSet.selector, invalidOutbox)); + vm.prank(rollup); + bridge.setOutbox(invalidOutbox, true); + } + + function test_setSequencerReportedSubMessageCount() public { + uint256 newCount = 1234; + + vm.prank(rollup); + AbsBridge(address(bridge)).setSequencerReportedSubMessageCount(newCount); + + assertEq( + bridge.sequencerReportedSubMessageCount(), + newCount, + "Invalid sequencerReportedSubMessageCount" + ); + } + + function test_setSequencerReportedSubMessageCount_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setOutbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + AbsBridge(address(bridge)).setSequencerReportedSubMessageCount(123); + } + + /**** + **** Event declarations + ***/ + + event SequencerInboxUpdated(address newSequencerInbox); + event InboxToggle(address indexed inbox, bool enabled); + event OutboxToggle(address indexed outbox, bool enabled); + event MessageDelivered( + uint256 indexed messageIndex, + bytes32 indexed beforeInboxAcc, + address inbox, + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 baseFeeL1, + uint64 timestamp + ); + event BridgeCallTriggered( + address indexed outbox, + address indexed to, + uint256 value, + bytes data + ); +} diff --git a/contracts/test/foundry/AbsInbox.t.sol b/contracts/test/foundry/AbsInbox.t.sol new file mode 100644 index 000000000..1654b6326 --- /dev/null +++ b/contracts/test/foundry/AbsInbox.t.sol @@ -0,0 +1,411 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; + +abstract contract AbsInboxTest is Test { + IInboxBase public inbox; + IBridge public bridge; + + uint256 public constant MAX_DATA_SIZE = 117_964; + + address public user = address(100); + address public rollup = address(1000); + address public seqInbox = address(1001); + + /* solhint-disable func-name-mixedcase */ + function test_getProxyAdmin() public { + assertFalse(inbox.getProxyAdmin() == address(0), "Invalid proxy admin"); + } + + function test_setAllowList() public { + address[] memory users = new address[](2); + users[0] = address(300); + users[1] = address(301); + + bool[] memory allowed = new bool[](2); + allowed[0] = true; + allowed[0] = false; + + vm.expectEmit(true, true, true, true); + emit AllowListAddressSet(users[0], allowed[0]); + emit AllowListAddressSet(users[1], allowed[1]); + + vm.prank(rollup); + inbox.setAllowList(users, allowed); + + assertEq(inbox.isAllowed(users[0]), allowed[0], "Invalid isAllowed user[0]"); + assertEq(inbox.isAllowed(users[1]), allowed[1], "Invalid isAllowed user[1]"); + } + + function test_setAllowList_revert_InvalidLength() public { + address[] memory users = new address[](1); + users[0] = address(300); + + bool[] memory allowed = new bool[](2); + allowed[0] = true; + allowed[0] = false; + + vm.expectRevert("INVALID_INPUT"); + vm.prank(rollup); + inbox.setAllowList(users, allowed); + } + + function test_setOutbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10_000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setAllowList shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + + address[] memory users = new address[](2); + users[0] = address(300); + bool[] memory allowed = new bool[](2); + allowed[0] = true; + inbox.setAllowList(users, allowed); + } + + function test_setAllowListEnabled_EnableAllowList() public { + assertEq(inbox.allowListEnabled(), false, "Invalid initial value for allowList"); + + vm.expectEmit(true, true, true, true); + emit AllowListEnabledUpdated(true); + + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + assertEq(inbox.allowListEnabled(), true, "Invalid allowList"); + } + + function test_setAllowListEnabled_DisableAllowList() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + assertEq(inbox.allowListEnabled(), true, "Invalid initial value for allowList"); + + vm.expectEmit(true, true, true, true); + emit AllowListEnabledUpdated(false); + + vm.prank(rollup); + inbox.setAllowListEnabled(false); + + assertEq(inbox.allowListEnabled(), false, "Invalid allowList"); + } + + function test_setAllowListEnabled_revert_AlreadyEnabled() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + assertEq(inbox.allowListEnabled(), true, "Invalid initial value for allowList"); + + vm.expectRevert("ALREADY_SET"); + vm.prank(rollup); + inbox.setAllowListEnabled(true); + } + + function test_setAllowListEnabled_revert_AlreadyDisabled() public { + vm.prank(rollup); + vm.expectRevert("ALREADY_SET"); + inbox.setAllowListEnabled(false); + } + + function test_setAllowListEnabled_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10_000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setAllowListEnabled shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + + inbox.setAllowListEnabled(true); + } + + function test_pause() public { + assertEq( + (PausableUpgradeable(address(inbox))).paused(), + false, + "Invalid initial paused state" + ); + + vm.prank(rollup); + inbox.pause(); + + assertEq((PausableUpgradeable(address(inbox))).paused(), true, "Invalid paused state"); + } + + function test_unpause() public { + vm.prank(rollup); + inbox.pause(); + assertEq( + (PausableUpgradeable(address(inbox))).paused(), + true, + "Invalid initial paused state" + ); + vm.prank(rollup); + inbox.unpause(); + + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + } + + function test_initialize_revert_NonDelegated() public { + ERC20Inbox inb = new ERC20Inbox(MAX_DATA_SIZE); + vm.expectRevert("Function must be called through delegatecall"); + inb.initialize(bridge, ISequencerInbox(seqInbox)); + } + + function test_sendL2MessageFromOrigin() public { + // L2 msg params + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDeliveredFromOrigin(0); + + // send L2 msg -> tx.origin == msg.sender + vm.prank(user, user); + uint256 msgNum = inbox.sendL2MessageFromOrigin(data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendL2MessageFromOrigin_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_L1Forked() public { + vm.chainId(10); + vm.expectRevert(abi.encodeWithSelector(L1Forked.selector)); + vm.prank(user, user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_NotOrigin() public { + vm.expectRevert(abi.encodeWithSelector(NotOrigin.selector)); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2Message() public { + // L2 msg params + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, data); + + // send L2 msg -> tx.origin == msg.sender + vm.prank(user, user); + uint256 msgNum = inbox.sendL2Message(data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendL2Message_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendL2Message_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendL2Message_revert_L1Forked() public { + vm.chainId(10); + vm.expectRevert(abi.encodeWithSelector(L1Forked.selector)); + vm.prank(user, user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendUnsignedTransaction() public { + // L2 msg params + uint256 maxFeePerGas = 0; + uint256 gasLimit = 10; + uint256 nonce = 3; + uint256 value = 300; + bytes memory data = abi.encodePacked("test data"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + L2MessageType_unsignedEOATx, + gasLimit, + maxFeePerGas, + nonce, + uint256(uint160(user)), + value, + data + ) + ); + + // send TX + vm.prank(user, user); + uint256 msgNum = inbox.sendUnsignedTransaction( + gasLimit, + maxFeePerGas, + nonce, + user, + value, + data + ); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendUnsignedTransaction_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendUnsignedTransaction(10, 10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendUnsignedTransaction_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendUnsignedTransaction(10, 10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendUnsignedTransaction_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.expectRevert(GasLimitTooLarge.selector); + vm.prank(user, user); + inbox.sendUnsignedTransaction(tooBigGasLimit, 10, 10, user, 10, abi.encodePacked("data")); + } + + function test_sendContractTransaction() public { + // L2 msg params + uint256 maxFeePerGas = 0; + uint256 gasLimit = 10; + uint256 value = 300; + bytes memory data = abi.encodePacked("test data"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + L2MessageType_unsignedContractTx, + gasLimit, + maxFeePerGas, + uint256(uint160(user)), + value, + data + ) + ); + + // send TX + vm.prank(user); + uint256 msgNum = inbox.sendContractTransaction(gasLimit, maxFeePerGas, user, value, data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendContractTransaction_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + inbox.sendContractTransaction(10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendContractTransaction_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendContractTransaction(10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendContractTransaction_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.expectRevert(GasLimitTooLarge.selector); + vm.prank(user); + inbox.sendContractTransaction(tooBigGasLimit, 10, user, 10, abi.encodePacked("data")); + } + + /** + * + * Event declarations + * + */ + + event AllowListAddressSet(address indexed user, bool val); + event AllowListEnabledUpdated(bool isEnabled); + event InboxMessageDelivered(uint256 indexed messageNum, bytes data); + event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum); +} + +contract Sender {} diff --git a/contracts/test/foundry/AbsOutbox.t.sol b/contracts/test/foundry/AbsOutbox.t.sol new file mode 100644 index 000000000..98e92958a --- /dev/null +++ b/contracts/test/foundry/AbsOutbox.t.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/IOutbox.sol"; +import "../../src/bridge/IBridge.sol"; + +abstract contract AbsOutboxTest is Test { + IOutbox public outbox; + IBridge public bridge; + + address public user = address(100); + address public rollup = address(1000); + address public seqInbox = address(1001); + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + + assertEq(outbox.l2ToL1Sender(), address(0), "Invalid l2ToL1Sender"); + assertEq(outbox.l2ToL1Block(), 0, "Invalid l2ToL1Block"); + assertEq(outbox.l2ToL1EthBlock(), 0, "Invalid l2ToL1EthBlock"); + assertEq(outbox.l2ToL1Timestamp(), 0, "Invalid l2ToL1Timestamp"); + assertEq(outbox.l2ToL1OutputId(), bytes32(0), "Invalid l2ToL1OutputId"); + } +} diff --git a/contracts/test/foundry/Bridge.t.sol b/contracts/test/foundry/Bridge.t.sol new file mode 100644 index 000000000..7e7dc4a4d --- /dev/null +++ b/contracts/test/foundry/Bridge.t.sol @@ -0,0 +1,317 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "./AbsBridge.t.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; + +contract BridgeTest is AbsBridgeTest { + IEthBridge public ethBridge; + + // msg details + uint8 public kind = 7; + bytes32 public messageDataHash = keccak256(abi.encodePacked("some msg")); + uint256 public ethAmount = 2 ether; + + function setUp() public { + inbox = address(1001); + + // deploy eth and bridge + bridge = Bridge(TestUtil.deployProxy(address(new Bridge()))); + ethBridge = IEthBridge(address(bridge)); + + // init bridge + ethBridge.initialize(IOwnable(rollup)); + + // fund user account + vm.deal(user, 10 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + ethBridge.initialize(IOwnable(rollup)); + } + + function test_initialize_revert_NonDelegated() public { + IEthBridge noTokenBridge = new Bridge(); + vm.expectRevert("Function must be called through delegatecall"); + noTokenBridge.initialize(IOwnable(rollup)); + } + + function test_enqueueDelayedMessage() public { + // inbox will move ETH to bridge + vm.deal(inbox, ethAmount); + uint256 inboxEthBalanceBefore = address(inbox).balance; + uint256 bridgeEthBalanceBefore = address(bridge).balance; + + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // expect event + vm.expectEmit(true, true, true, true); + vm.fee(70); + uint256 baseFeeToReport = block.basefee; + emit MessageDelivered( + 0, + 0, + inbox, + kind, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + baseFeeToReport, + uint64(block.timestamp) + ); + + // enqueue msg inbox->bridge + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: ethAmount}(kind, userAliased, messageDataHash); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethAmount, + "Invalid bridge eth balance" + ); + + uint256 inboxEthBalanceAfter = address(inbox).balance; + assertEq(inboxEthBalanceBefore - inboxEthBalanceAfter, ethAmount, "Invalid inbox balance"); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_TwoInRow() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + vm.deal(inbox, ethAmount); + uint256 inboxEthBalanceBefore = address(inbox).balance; + uint256 bridgeEthBalanceBefore = address(bridge).balance; + + // 1st enqueue msg + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: 1 ether}(2, address(400), messageDataHash); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 1, + bridge.delayedInboxAccs(0), + inbox, + 8, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // enqueue msg inbox->bridge + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: 1 ether}(8, userAliased, messageDataHash); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethAmount, + "Invalid bridge eth balance" + ); + + uint256 inboxEthBalanceAfter = address(inbox).balance; + assertEq(inboxEthBalanceBefore - inboxEthBalanceAfter, ethAmount, "Invalid inbox balance"); + + assertEq(bridge.delayedMessageCount(), 2, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_revert_UseTokenForFees() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // enqueue msg + hoax(inbox); + vm.expectRevert(); + IERC20Bridge(address(bridge)).enqueueDelayedMessage(kind, user, messageDataHash, 1000); + } + + function test_enqueueDelayedMessage_revert_NotDelayedInbox() public { + hoax(inbox); + vm.expectRevert(abi.encodeWithSelector(NotDelayedInbox.selector, inbox)); + ethBridge.enqueueDelayedMessage{value: ethAmount}(kind, user, messageDataHash); + } + + function test_executeCall_EmptyCalldata() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + uint256 withdrawalAmount = 3 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, user, withdrawalAmount, ""); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({to: user, value: withdrawalAmount, data: ""}); + + //// checks + assertTrue(success, "Execute call failed"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore - bridgeEthBalanceAfter, + withdrawalAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceAfter - userEthBalanceBefore, + withdrawalAmount, + "Invalid user eth balance" + ); + } + + function test_executeCall_WithCalldata() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 vaultEthBalanceBefore = address(vault).balance; + + // call params + uint256 newVaultVersion = 7; + uint256 withdrawalAmount = 3 ether; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertTrue(success, "Execute call failed"); + assertEq(vault.version(), newVaultVersion, "Invalid newVaultVersion"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore - bridgeEthBalanceAfter, + withdrawalAmount, + "Invalid bridge eth balance" + ); + + uint256 vaultEthBalanceAfter = address(vault).balance; + assertEq( + vaultEthBalanceAfter - vaultEthBalanceBefore, + withdrawalAmount, + "Invalid vault eth balance" + ); + } + + function test_executeCall_UnsuccessfulCall() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 vaultEthBalanceBefore = address(vault).balance; + + // call params + uint256 withdrawalAmount = 3 ether; + bytes memory revertingData = abi.encodeWithSelector(EthVault.justRevert.selector); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, revertingData); + + //// execute call - do call which reverts + vm.prank(outbox); + (bool success, bytes memory returnData) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: revertingData + }); + + //// checks + assertEq(success, false, "Execute shall be unsuccessful"); + assertEq(vault.version(), 0, "Invalid vaultVersion"); + + // get revert reason + assembly { + returnData := add(returnData, 0x04) + } + string memory revertReason = abi.decode(returnData, (string)); + assertEq(revertReason, "bye", "Invalid revert reason"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore, + bridgeEthBalanceAfter, + "Invalid bridge eth balance after unsuccessful call" + ); + + uint256 vaultEthBalanceAfter = address(vault).balance; + assertEq( + vaultEthBalanceAfter, + vaultEthBalanceBefore, + "Invalid vault eth balance after unsuccessful call" + ); + } + + function test_executeCall_revert_NotOutbox() public { + vm.expectRevert(abi.encodeWithSelector(NotOutbox.selector, address(this))); + bridge.executeCall({to: user, value: 0.1 ether, data: ""}); + } + + function test_executeCall_revert_NotContract() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(234); + vm.expectRevert(abi.encodeWithSelector(NotContract.selector, address(to))); + vm.prank(outbox); + bridge.executeCall({to: to, value: 0.1 ether, data: "some data"}); + } +} diff --git a/contracts/test/foundry/BridgeCreator.t.sol b/contracts/test/foundry/BridgeCreator.t.sol new file mode 100644 index 000000000..f6178d769 --- /dev/null +++ b/contracts/test/foundry/BridgeCreator.t.sol @@ -0,0 +1,255 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/rollup/BridgeCreator.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/bridge/AbsInbox.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract BridgeCreatorTest is Test { + BridgeCreator public creator; + address public owner = address(100); + uint256 public constant MAX_DATA_SIZE = 117_964; + IReader4844 dummyReader4844 = IReader4844(address(137)); + + BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, true), + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + + function setUp() public { + vm.prank(owner); + creator = new BridgeCreator(ethBasedTemplates, erc20BasedTemplates); + } + + function getEthBasedTemplates() internal view returns (BridgeCreator.BridgeContracts memory) { + BridgeCreator.BridgeContracts memory templates; + ( + templates.bridge, + templates.sequencerInbox, + templates.inbox, + templates.rollupEventInbox, + templates.outbox + ) = creator.ethBasedTemplates(); + return templates; + } + + function getErc20BasedTemplates() internal view returns (BridgeCreator.BridgeContracts memory) { + BridgeCreator.BridgeContracts memory templates; + ( + templates.bridge, + templates.sequencerInbox, + templates.inbox, + templates.rollupEventInbox, + templates.outbox + ) = creator.erc20BasedTemplates(); + return templates; + } + + function assertEq( + BridgeCreator.BridgeContracts memory a, + BridgeCreator.BridgeContracts memory b + ) internal { + assertEq(address(a.bridge), address(b.bridge), "Invalid bridge"); + assertEq(address(a.sequencerInbox), address(b.sequencerInbox), "Invalid seqInbox"); + assertEq(address(a.inbox), address(b.inbox), "Invalid inbox"); + assertEq( + address(a.rollupEventInbox), + address(b.rollupEventInbox), + "Invalid rollup event inbox" + ); + assertEq(address(a.outbox), address(b.outbox), "Invalid outbox"); + } + + /* solhint-disable func-name-mixedcase */ + function test_constructor() public { + assertEq(getEthBasedTemplates(), ethBasedTemplates); + assertEq(getErc20BasedTemplates(), erc20BasedTemplates); + } + + function test_updateTemplates() public { + BridgeCreator.BridgeContracts memory templs = BridgeCreator.BridgeContracts({ + bridge: Bridge(address(200)), + sequencerInbox: SequencerInbox(address(201)), + inbox: Inbox(address(202)), + rollupEventInbox: RollupEventInbox(address(203)), + outbox: Outbox(address(204)) + }); + + vm.prank(owner); + creator.updateTemplates(templs); + + assertEq(getEthBasedTemplates(), templs); + } + + function test_updateERC20Templates() public { + BridgeCreator.BridgeContracts memory templs = BridgeCreator.BridgeContracts({ + bridge: ERC20Bridge(address(400)), + sequencerInbox: SequencerInbox(address(401)), + inbox: ERC20Inbox(address(402)), + rollupEventInbox: ERC20RollupEventInbox(address(403)), + outbox: ERC20Outbox(address(404)) + }); + + vm.prank(owner); + creator.updateERC20Templates(templs); + + assertEq(getErc20BasedTemplates(), templs); + } + + function test_createEthBridge() public { + address proxyAdmin = address(300); + address rollup = address(301); + address nativeToken = address(0); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + 10, + 20, + 30, + 40 + ); + timeVars.delayBlocks; + + BridgeCreator.BridgeContracts memory contracts = creator.createBridge( + proxyAdmin, + rollup, + nativeToken, + timeVars + ); + ( + IBridge bridge, + ISequencerInbox seqInbox, + IInboxBase inbox, + IRollupEventInbox eventInbox, + IOutbox outbox + ) = ( + contracts.bridge, + contracts.sequencerInbox, + contracts.inbox, + contracts.rollupEventInbox, + contracts.outbox + ); + + // bridge + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + + // seqInbox + assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); + ( + uint256 _delayBlocks, + uint256 _futureBlocks, + uint256 _delaySeconds, + uint256 _futureSeconds + ) = seqInbox.maxTimeVariation(); + assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); + assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); + assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); + assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); + + // inbox + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); + + // rollup event inbox + assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); + + // outbox + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + + // revert fetching native token + vm.expectRevert(); + IERC20Bridge(address(bridge)).nativeToken(); + } + + function test_createERC20Bridge() public { + address proxyAdmin = address(300); + address rollup = address(301); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + 10, + 20, + 30, + 40 + ); + timeVars.delayBlocks; // TODO: what is this? + + BridgeCreator.BridgeContracts memory contracts = creator.createBridge( + proxyAdmin, + rollup, + nativeToken, + timeVars + ); + ( + IBridge bridge, + ISequencerInbox seqInbox, + IInboxBase inbox, + IRollupEventInbox eventInbox, + IOutbox outbox + ) = ( + contracts.bridge, + contracts.sequencerInbox, + contracts.inbox, + contracts.rollupEventInbox, + contracts.outbox + ); + + // bridge + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq( + address(IERC20Bridge(address(bridge)).nativeToken()), + nativeToken, + "Invalid nativeToken ref" + ); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + + // seqInbox + assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); + ( + uint256 _delayBlocks, + uint256 _futureBlocks, + uint256 _delaySeconds, + uint256 _futureSeconds + ) = seqInbox.maxTimeVariation(); + assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); + assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); + assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); + assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); + + // inbox + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); + + // rollup event inbox + assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); + + // outbox + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + } +} diff --git a/contracts/test/foundry/ERC20Bridge.t.sol b/contracts/test/foundry/ERC20Bridge.t.sol new file mode 100644 index 000000000..fc1d2acbf --- /dev/null +++ b/contracts/test/foundry/ERC20Bridge.t.sol @@ -0,0 +1,404 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "./AbsBridge.t.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol"; + +import "forge-std/console.sol"; + +contract ERC20BridgeTest is AbsBridgeTest { + IERC20Bridge public erc20Bridge; + IERC20 public nativeToken; + + uint256 public constant MAX_DATA_SIZE = 117_964; + + // msg details + uint8 public kind = 7; + bytes32 public messageDataHash = keccak256(abi.encodePacked("some msg")); + uint256 public tokenFeeAmount = 30; + + function setUp() public { + // deploy token and bridge + nativeToken = new ERC20PresetMinterPauser("Appchain Token", "App"); + bridge = ERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + erc20Bridge = IERC20Bridge(address(bridge)); + + // init bridge + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + + // deploy inbox + inbox = address(TestUtil.deployProxy(address(new ERC20Inbox(MAX_DATA_SIZE)))); + IERC20Inbox(address(inbox)).initialize(bridge, ISequencerInbox(seqInbox)); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq( + address(erc20Bridge.nativeToken()), + address(nativeToken), + "Invalid nativeToken ref" + ); + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + } + + function test_initialize_revert_ZeroAddressToken() public { + IERC20Bridge noTokenBridge = ERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + vm.expectRevert(abi.encodeWithSelector(InvalidTokenSet.selector, address(0))); + noTokenBridge.initialize(IOwnable(rollup), address(0)); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + } + + function test_initialize_revert_NonDelegated() public { + IERC20Bridge noTokenBridge = new ERC20Bridge(); + vm.expectRevert("Function must be called through delegatecall"); + noTokenBridge.initialize(IOwnable(rollup), address(nativeToken)); + } + + function test_enqueueDelayedMessage() public { + // add fee tokens to inbox + ERC20PresetMinterPauser(address(nativeToken)).mint(inbox, tokenFeeAmount); + + // snapshot + uint256 userNativeTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 inboxNativeTokenBalanceBefore = nativeToken.balanceOf(address(inbox)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // approve bridge to escrow tokens + vm.prank(user); + nativeToken.approve(address(bridge), tokenFeeAmount); + + // expect event + vm.expectEmit(true, true, true, true); + vm.fee(70); + uint256 baseFeeToReport = 0; + emit MessageDelivered( + 0, + 0, + inbox, + kind, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + baseFeeToReport, + uint64(block.timestamp) + ); + + // enqueue msg + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + erc20Bridge.enqueueDelayedMessage(kind, userAliased, messageDataHash, tokenFeeAmount); + + //// checks + uint256 userNativeTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userNativeTokenBalanceAfter, + userNativeTokenBalanceBefore, + "Invalid user token balance" + ); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceAfter - bridgeNativeTokenBalanceBefore, + tokenFeeAmount, + "Invalid bridge token balance" + ); + + uint256 inboxNativeTokenBalanceAfter = nativeToken.balanceOf(address(inbox)); + assertEq( + inboxNativeTokenBalanceBefore - inboxNativeTokenBalanceAfter, + tokenFeeAmount, + "Invalid inbox token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_revert_UseEthForFees() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // enqueue msg + hoax(inbox); + vm.expectRevert(); + IEthBridge(address(bridge)).enqueueDelayedMessage{value: 0.1 ether}( + kind, + user, + messageDataHash + ); + } + + function test_enqueueDelayedMessage_revert_NotDelayedInbox() public { + vm.prank(inbox); + vm.expectRevert(abi.encodeWithSelector(NotDelayedInbox.selector, inbox)); + erc20Bridge.enqueueDelayedMessage(kind, user, messageDataHash, tokenFeeAmount); + } + + function test_executeCall_EmptyCalldata() public { + // fund bridge native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // call params + uint256 withdrawalAmount = 15; + bytes memory data = ""; + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, user, withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall(user, withdrawalAmount, data); + + //// checks + assertTrue(success, "Execute call failed"); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceAfter - userTokenBalanceBefore, + withdrawalAmount, + "Invalid user token balance" + ); + } + + function test_executeCall_ExtraCall() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // native token balances + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 vaultNativeTokenBalanceBefore = nativeToken.balanceOf(address(vault)); + + // call params + uint256 withdrawalAmount = 15; + uint256 newVaultVersion = 7; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertTrue(success, "Execute call failed"); + assertEq(vault.version(), newVaultVersion, "Invalid newVaultVersion"); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge native token balance" + ); + + uint256 vaultNativeTokenBalanceAfter = nativeToken.balanceOf(address(vault)); + assertEq( + vaultNativeTokenBalanceAfter - vaultNativeTokenBalanceBefore, + withdrawalAmount, + "Invalid vault native token balance" + ); + } + + function test_executeCall_UnsuccessfulExtraCall() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // native token balances + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 vaultNativeTokenBalanceBefore = nativeToken.balanceOf(address(vault)); + + // call params + uint256 withdrawalAmount = 15; + bytes memory data = abi.encodeWithSelector(EthVault.justRevert.selector); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call - do call which reverts + vm.prank(outbox); + (bool success, bytes memory returnData) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertEq(success, false, "Execute shall be unsuccessful"); + assertEq(vault.version(), 0, "Invalid vaultVersion"); + + // get and assert revert reason + assembly { + returnData := add(returnData, 0x04) + } + string memory revertReason = abi.decode(returnData, (string)); + assertEq(revertReason, "bye", "Invalid revert reason"); + + // bridge successfully sent native token even though extra call was unsuccessful (we didn't revert it) + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge native token balance after unsuccessful extra call" + ); + + // vault successfully recieved native token even though extra call was unsuccessful (we didn't revert it) + uint256 vaultNativeTokenBalanceAfter = nativeToken.balanceOf(address(vault)); + assertEq( + vaultNativeTokenBalanceAfter - vaultNativeTokenBalanceBefore, + withdrawalAmount, + "Invalid vault native token balance after unsuccessful call" + ); + } + + function test_executeCall_UnsuccessfulNativeTokenTransfer() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // call params + uint256 withdrawalAmount = 100_000_000; + uint256 newVaultVersion = 9; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + //// execute call - do call which reverts on native token transfer due to invalid amount + vm.prank(outbox); + vm.expectRevert("ERC20: transfer amount exceeds balance"); + bridge.executeCall({to: address(vault), value: withdrawalAmount, data: data}); + } + + function test_executeCall_revert_NotOutbox() public { + vm.expectRevert(abi.encodeWithSelector(NotOutbox.selector, address(this))); + bridge.executeCall({to: user, value: 10, data: ""}); + } + + function test_executeCall_revert_NotContract() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(234); + vm.expectRevert(abi.encodeWithSelector(NotContract.selector, address(to))); + vm.prank(outbox); + bridge.executeCall({to: to, value: 10, data: "some data"}); + } + + function test_executeCall_revert_CallTargetNotAllowed() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(nativeToken); + vm.expectRevert(abi.encodeWithSelector(CallTargetNotAllowed.selector, to)); + vm.prank(outbox); + bridge.executeCall({to: to, value: 10, data: "some data"}); + } + + function test_executeCall_revert_CallNotAllowed() public { + // deploy and initi bridge contracts + address _rollup = makeAddr("rollup"); + address _outbox = makeAddr("outbox"); + address _gateway = address(new MockGateway()); + address _nativeToken = address(new MockBridgedToken(_gateway)); + IERC20Bridge _bridge = IERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); + + // allow outbox + vm.prank(_rollup); + _bridge.setOutbox(_outbox, true); + + // fund bridge + MockBridgedToken(_nativeToken).transfer(address(_bridge), 100 ether); + + // executeCall shall revert when call changes balance of the bridge + address to = _gateway; + uint256 withdrawAmount = 25 ether; + bytes memory data = abi.encodeWithSelector( + MockGateway.withdraw.selector, + MockBridgedToken(_nativeToken), + withdrawAmount + ); + vm.expectRevert(abi.encodeWithSelector(CallNotAllowed.selector)); + vm.prank(_outbox); + _bridge.executeCall({to: to, value: 10, data: data}); + } +} + +contract MockBridgedToken is ERC20 { + address public gateway; + + constructor(address _gateway) ERC20("MockBridgedToken", "TT") { + gateway = _gateway; + _mint(msg.sender, 1_000_000 ether); + } + + function bridgeBurn(address account, uint256 amount) external { + require(msg.sender == gateway, "ONLY_GATEWAY"); + _burn(account, amount); + } +} + +contract MockGateway { + function withdraw(MockBridgedToken token, uint256 amount) external { + token.bridgeBurn(msg.sender, amount); + } +} diff --git a/contracts/test/foundry/ERC20Inbox.t.sol b/contracts/test/foundry/ERC20Inbox.t.sol new file mode 100644 index 000000000..a4680eda9 --- /dev/null +++ b/contracts/test/foundry/ERC20Inbox.t.sol @@ -0,0 +1,661 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsInbox.t.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol"; + +contract ERC20InboxTest is AbsInboxTest { + IERC20 public nativeToken; + IERC20Inbox public erc20Inbox; + + function setUp() public { + // deploy token, bridge and inbox + nativeToken = new ERC20PresetMinterPauser("Appchain Token", "App"); + bridge = IBridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + inbox = IInboxBase(TestUtil.deployProxy(address(new ERC20Inbox(MAX_DATA_SIZE)))); + erc20Inbox = IERC20Inbox(address(inbox)); + + // init bridge and inbox + IERC20Bridge(address(bridge)).initialize(IOwnable(rollup), address(nativeToken)); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + vm.prank(rollup); + bridge.setDelayedInbox(address(inbox), true); + + // fund user account + ERC20PresetMinterPauser(address(nativeToken)).mint(user, 1000 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), seqInbox, "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + + assertEq(IERC20(nativeToken).allowance(address(inbox), address(bridge)), type(uint256).max); + } + + function test_depositERC20_FromEOA() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + depositAmount, + "Invalid user token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_FromEOA_InboxPrefunded() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // prefund inbox with native token amount needed to pay for fees + ERC20PresetMinterPauser(address(nativeToken)).mint(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceBefore, userTokenBalanceAfter, "Invalid user token balance"); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_FromContract() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) + ); + + // deposit tokens -> tx.origin != msg.sender + vm.prank(user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + depositAmount, + "Invalid user token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_revert_NativeTokenTransferFails() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // deposit tokens + vm.prank(user); + uint256 invalidDepositAmount = 1_000_000; + vm.expectRevert("ERC20: insufficient allowance"); + erc20Inbox.depositERC20(invalidDepositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq(bridgeTokenBalanceAfter, bridgeTokenBalanceBefore, "Invalid bridge token balance"); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceBefore, userTokenBalanceAfter, "Invalid user token balance"); + + assertEq(bridge.delayedMessageCount(), 0, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromEOA() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.createRetryableTicket({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromContract() public { + address sender = address(new Sender()); + ERC20PresetMinterPauser(address(nativeToken)).mint(address(sender), 1000); + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 senderTokenBalanceBefore = nativeToken.balanceOf(address(sender)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(sender); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + uint256 uintAlias = uint256(uint160(AddressAliasHelper.applyL1ToL2Alias(sender))); + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uintAlias, + uintAlias, + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable + vm.prank(sender); + erc20Inbox.createRetryableTicket({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 senderTokenBalanceAfter = nativeToken.balanceOf(sender); + assertEq( + senderTokenBalanceBefore - senderTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + tokenTotalFeeAmount: 200, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_OnlyAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.prank(user, user); + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + tokenTotalFeeAmount: 200, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientValue() public { + uint256 tooSmallTokenTotalFeeAmount = 3; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 1; + + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + InsufficientValue.selector, + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + tooSmallTokenTotalFeeAmount + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tooSmallTokenTotalFeeAmount, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_RetryableDataTracer() public { + uint256 tokenTotalFeeAmount = 300; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 1; + bytes memory data = abi.encodePacked("xy"); + + // revert as maxFeePerGas == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + gasLimit = 1; + maxFeePerGas = 2; + + // revert as gasLimit == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + } + + function test_createRetryableTicket_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.prank(user, user); + vm.expectRevert(GasLimitTooLarge.selector); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: tooBigGasLimit, + maxFeePerGas: 2, + tokenTotalFeeAmount: uint256(type(uint64).max) * 3, + data: abi.encodePacked("data") + }); + } + + function test_unsafeCreateRetryableTicket_FromEOA() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.unsafeCreateRetryableTicket({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_FromContract() public { + address sender = address(new Sender()); + ERC20PresetMinterPauser(address(nativeToken)).mint(address(sender), 1000); + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 senderTokenBalanceBefore = nativeToken.balanceOf(address(sender)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(sender); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event (address shall not be aliased) + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(sender)), + uint256(uint160(sender)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable + vm.prank(sender); + erc20Inbox.unsafeCreateRetryableTicket({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 senderTokenBalanceAfter = nativeToken.balanceOf(sender); + assertEq( + senderTokenBalanceBefore - senderTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_NotRevertingOnInsufficientValue() public { + uint256 tooSmallTokenTotalFeeAmount = 3; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 2; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tooSmallTokenTotalFeeAmount); + + vm.prank(user, user); + erc20Inbox.unsafeCreateRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tooSmallTokenTotalFeeAmount, + data: abi.encodePacked("data") + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tooSmallTokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tooSmallTokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_calculateRetryableSubmissionFee() public { + assertEq(inbox.calculateRetryableSubmissionFee(1, 2), 0, "Invalid ERC20 submission fee"); + } +} diff --git a/contracts/test/foundry/ERC20Outbox.t.sol b/contracts/test/foundry/ERC20Outbox.t.sol new file mode 100644 index 000000000..f97e96beb --- /dev/null +++ b/contracts/test/foundry/ERC20Outbox.t.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsOutbox.t.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Outbox.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract ERC20OutboxTest is AbsOutboxTest { + ERC20Outbox public erc20Outbox; + ERC20Bridge public erc20Bridge; + IERC20 public nativeToken; + + function setUp() public { + // deploy token, bridge and outbox + nativeToken = new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)); + bridge = IBridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + erc20Bridge = ERC20Bridge(address(bridge)); + outbox = IOutbox(TestUtil.deployProxy(address(new ERC20Outbox()))); + erc20Outbox = ERC20Outbox(address(outbox)); + + // init bridge and outbox + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + erc20Outbox.initialize(IBridge(bridge)); + + vm.prank(rollup); + bridge.setOutbox(address(outbox), true); + + // fund user account + nativeToken.transfer(user, 1_000); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize_WithdrawalAmount() public { + assertEq(erc20Outbox.l2ToL1WithdrawalAmount(), 0, "Invalid withdrawalAmount"); + } + + function test_executeTransaction() public { + // fund bridge with some tokens + vm.startPrank(user); + nativeToken.approve(address(bridge), 100); + nativeToken.transfer(address(bridge), 100); + vm.stopPrank(); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0x7e87df146feb0900d5a441d1d081867190b34395307698f4e879c8164cd9a7f9, + 0x7e87df146feb0900d5a441d1d081867190b34395307698f4e879c8164cd9a7f9 + ); + + // create msg receiver on L1 + ERC20L2ToL1Target target = new ERC20L2ToL1Target(); + target.setOutbox(address(outbox)); + + //// execute transaction + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 targetTokenBalanceBefore = nativeToken.balanceOf(address(target)); + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15; + bytes memory data = abi.encodeWithSignature("receiveHook()"); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: address(target), + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: data + }); + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceBefore - bridgeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge token balance" + ); + + uint256 targetTokenBalanceAfter = nativeToken.balanceOf(address(target)); + assertEq( + targetTokenBalanceAfter - targetTokenBalanceBefore, + withdrawalAmount, + "Invalid target token balance" + ); + + /// check context was properly set during execution + assertEq(uint256(target.l2Block()), 300, "Invalid l2Block"); + assertEq(uint256(target.timestamp()), 1234, "Invalid timestamp"); + assertEq(uint256(target.outputId()), 12, "Invalid outputId"); + assertEq(target.sender(), user, "Invalid sender"); + assertEq(uint256(target.l1Block()), 20, "Invalid l1Block"); + assertEq(uint256(target.withdrawalAmount()), withdrawalAmount, "Invalid withdrawalAmount"); + } + + function test_executeTransaction_revert_CallTargetNotAllowed() public { + // // fund bridge with some tokens + vm.startPrank(user); + nativeToken.approve(address(bridge), 100); + nativeToken.transfer(address(bridge), 100); + vm.stopPrank(); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0x5b6cd410f78e45e55eeb02133b8e72e6ca122c59b667eed4f214e374d808058e, + 0x5b6cd410f78e45e55eeb02133b8e72e6ca122c59b667eed4f214e374d808058e + ); + + //// execute transaction + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15; + + address invalidTarget = address(nativeToken); + + vm.expectRevert(abi.encodeWithSelector(CallTargetNotAllowed.selector, invalidTarget)); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: invalidTarget, + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: "" + }); + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq(bridgeTokenBalanceBefore, bridgeTokenBalanceAfter, "Invalid bridge token balance"); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceAfter, userTokenBalanceBefore, "Invalid user token balance"); + } +} + +/** + * Contract for testing L2 to L1 msgs + */ +contract ERC20L2ToL1Target { + address public outbox; + + uint128 public l2Block; + uint128 public timestamp; + bytes32 public outputId; + address public sender; + uint96 public l1Block; + uint256 public withdrawalAmount; + + function receiveHook() external payable { + l2Block = uint128(IOutbox(outbox).l2ToL1Block()); + timestamp = uint128(IOutbox(outbox).l2ToL1Timestamp()); + outputId = IOutbox(outbox).l2ToL1OutputId(); + sender = IOutbox(outbox).l2ToL1Sender(); + l1Block = uint96(IOutbox(outbox).l2ToL1EthBlock()); + withdrawalAmount = ERC20Outbox(outbox).l2ToL1WithdrawalAmount(); + } + + function setOutbox(address _outbox) external { + outbox = _outbox; + } +} diff --git a/contracts/test/foundry/Inbox.t.sol b/contracts/test/foundry/Inbox.t.sol new file mode 100644 index 000000000..9b345781a --- /dev/null +++ b/contracts/test/foundry/Inbox.t.sol @@ -0,0 +1,637 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsInbox.t.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/Inbox.sol"; +import "../../src/bridge/IInbox.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; + +contract InboxTest is AbsInboxTest { + IInbox public ethInbox; + + function setUp() public { + // deploy token, bridge and inbox + bridge = IBridge(TestUtil.deployProxy(address(new Bridge()))); + inbox = IInboxBase(TestUtil.deployProxy(address(new Inbox(MAX_DATA_SIZE)))); + ethInbox = IInbox(address(inbox)); + + // init bridge and inbox + IEthBridge(address(bridge)).initialize(IOwnable(rollup)); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + vm.prank(rollup); + bridge.setDelayedInbox(address(inbox), true); + + // fund user account + vm.deal(user, 10 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), seqInbox, "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + } + + function test_depositEth_FromEOA() public { + uint256 depositAmount = 2 ether; + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.depositEth{value: depositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + depositAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + depositAmount, + "Invalid user eth balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_depositEth_FromContract() public { + uint256 depositAmount = 1.2 ether; + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) + ); + + // deposit tokens -> tx.origin != msg.sender + vm.prank(user); + ethInbox.depositEth{value: depositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + depositAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + depositAmount, + "Invalid eth token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_depositEth_revert_EthTransferFails() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // deposit too many eth shall fail + vm.prank(user); + uint256 invalidDepositAmount = 300 ether; + vm.expectRevert(); + ethInbox.depositEth{value: invalidDepositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq(bridgeEthBalanceAfter, bridgeEthBalanceBefore, "Invalid bridge token balance"); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq(userEthBalanceBefore, userEthBalanceAfter, "Invalid user token balance"); + + assertEq(bridge.delayedMessageCount(), 0, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromEOA() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 ethToSend = 0.3 ether; + + // retryable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000002 ether; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.createRetryableTicket{value: ethToSend}({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + ethToSend, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromContract() public { + address sender = address(new Sender()); + vm.deal(sender, 10 ether); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 senderEthBalanceBefore = sender.balance; + + uint256 ethToSend = 0.3 ether; + + // retryable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000001 ether; + + // expect event + uint256 uintAlias = uint256(uint160(AddressAliasHelper.applyL1ToL2Alias(sender))); + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uintAlias, + uintAlias, + gasLimit, + maxFeePerGas, + abi.encodePacked("some msg").length, + abi.encodePacked("some msg") + ) + ); + + // create retryable + vm.prank(sender); + ethInbox.createRetryableTicket{value: ethToSend}({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("some msg") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 senderEthBalanceAfter = address(sender).balance; + assertEq( + senderEthBalanceBefore - senderEthBalanceAfter, + ethToSend, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + ethInbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_OnlyAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.prank(user, user); + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + ethInbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientValue() public { + uint256 tooSmallEthAmount = 1 ether; + uint256 l2CallValue = 2 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 200000; + uint256 maxFeePerGas = 0.00000002 ether; + + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + InsufficientValue.selector, + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + tooSmallEthAmount + ) + ); + ethInbox.createRetryableTicket{value: tooSmallEthAmount}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_RetryableDataTracer() public { + uint256 msgValue = 3 ether; + uint256 l2CallValue = 1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100000; + uint256 maxFeePerGas = 1; + bytes memory data = abi.encodePacked("xy"); + + // revert as maxFeePerGas == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + msgValue, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + ethInbox.createRetryableTicket{value: msgValue}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + gasLimit = 1; + maxFeePerGas = 2; + + // revert as gasLimit == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + msgValue, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + ethInbox.createRetryableTicket{value: msgValue}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + } + + function test_createRetryableTicket_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.deal(user, uint256(type(uint64).max) * 3); + vm.prank(user, user); + vm.expectRevert(GasLimitTooLarge.selector); + ethInbox.createRetryableTicket{value: uint256(type(uint64).max) * 3}({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: tooBigGasLimit, + maxFeePerGas: 2, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientSubmissionCost() public { + uint256 tooSmallMaxSubmissionCost = 5; + bytes memory data = abi.encodePacked("msg"); + + // simulate 23 gwei basefee + vm.fee(23000000000); + uint256 submissionFee = ethInbox.calculateRetryableSubmissionFee( + data.length, + block.basefee + ); + + // call shall revert + vm.prank(user, user); + vm.expectRevert( + abi.encodePacked( + InsufficientSubmissionCost.selector, + submissionFee, + tooSmallMaxSubmissionCost + ) + ); + ethInbox.createRetryableTicket{value: 1 ether}({ + to: user, + l2CallValue: 100, + maxSubmissionCost: tooSmallMaxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 60000, + maxFeePerGas: 0.00000001 ether, + data: data + }); + } + + function test_unsafeCreateRetryableTicket_FromEOA() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 ethToSend = 0.3 ether; + + // retryable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000002 ether; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.unsafeCreateRetryableTicket{value: ethToSend}({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + ethToSend, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_FromContract() public { + address sender = address(new Sender()); + vm.deal(sender, 10 ether); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 senderEthBalanceBefore = sender.balance; + + uint256 ethToSend = 0.3 ether; + + // retryable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000001 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(sender)), + uint256(uint160(sender)), + gasLimit, + maxFeePerGas, + abi.encodePacked("some msg").length, + abi.encodePacked("some msg") + ) + ); + + // create retryable + vm.prank(sender); + ethInbox.unsafeCreateRetryableTicket{value: ethToSend}({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("some msg") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 senderEthBalanceAfter = address(sender).balance; + assertEq( + senderEthBalanceBefore - senderEthBalanceAfter, + ethToSend, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_NotRevertingOnInsufficientValue() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 tooSmallEthAmount = 1 ether; + uint256 l2CallValue = 2 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 200000; + uint256 maxFeePerGas = 0.00000002 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tooSmallEthAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + abi.encodePacked("data").length, + abi.encodePacked("data") + ) + ); + + vm.prank(user, user); + ethInbox.unsafeCreateRetryableTicket{value: tooSmallEthAmount}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("data") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + tooSmallEthAmount, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + tooSmallEthAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_calculateRetryableSubmissionFee() public { + // 30 gwei fee + uint256 basefee = 30000000000; + vm.fee(basefee); + uint256 datalength = 10; + + assertEq( + inbox.calculateRetryableSubmissionFee(datalength, 0), + (1400 + 6 * datalength) * basefee, + "Invalid eth retryable submission fee" + ); + } +} diff --git a/contracts/test/foundry/Outbox.t.sol b/contracts/test/foundry/Outbox.t.sol new file mode 100644 index 000000000..3b7d9cd4d --- /dev/null +++ b/contracts/test/foundry/Outbox.t.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsOutbox.t.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/Outbox.sol"; + +contract OutboxTest is AbsOutboxTest { + Outbox public ethOutbox; + Bridge public ethBridge; + + function setUp() public { + // deploy bridge and outbox + bridge = IBridge(TestUtil.deployProxy(address(new Bridge()))); + ethBridge = Bridge(address(bridge)); + outbox = IOutbox(TestUtil.deployProxy(address(new Outbox()))); + ethOutbox = Outbox(address(outbox)); + + // init bridge and outbox + ethBridge.initialize(IOwnable(rollup)); + ethOutbox.initialize(IBridge(bridge)); + + vm.prank(rollup); + bridge.setOutbox(address(outbox), true); + } + + /* solhint-disable func-name-mixedcase */ + function test_executeTransaction() public { + // fund bridge with some ether + vm.deal(address(bridge), 100 ether); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0xc86f4eaf8efb31147795fb05564f8777abc3220d4caeb0227c6c69c115931dda, + 0xc86f4eaf8efb31147795fb05564f8777abc3220d4caeb0227c6c69c115931dda + ); + + // create msg receiver on L1 + L2ToL1Target target = new L2ToL1Target(); + target.setOutbox(address(outbox)); + + //// execute transaction + uint256 bridgeBalanceBefore = address(bridge).balance; + uint256 targetBalanceBefore = address(target).balance; + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15 ether; + bytes memory data = abi.encodeWithSignature("receiveHook()"); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: address(target), + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: data + }); + + uint256 bridgeBalanceAfter = address(bridge).balance; + assertEq( + bridgeBalanceBefore - bridgeBalanceAfter, + withdrawalAmount, + "Invalid bridge balance" + ); + + uint256 targetBalanceAfter = address(target).balance; + assertEq( + targetBalanceAfter - targetBalanceBefore, + withdrawalAmount, + "Invalid target balance" + ); + + /// check context was properly set during execution + assertEq(uint256(target.l2Block()), 300, "Invalid l2Block"); + assertEq(uint256(target.timestamp()), 1234, "Invalid timestamp"); + assertEq(uint256(target.outputId()), 12, "Invalid outputId"); + assertEq(target.sender(), user, "Invalid sender"); + assertEq(uint256(target.l1Block()), 20, "Invalid l1Block"); + assertEq(uint256(target.withdrawalAmount()), withdrawalAmount, "Invalid withdrawalAmount"); + } +} + +/** + * Contract for testing L2 to L1 msgs + */ +contract L2ToL1Target { + address public outbox; + + uint128 public l2Block; + uint128 public timestamp; + bytes32 public outputId; + address public sender; + uint96 public l1Block; + uint256 public withdrawalAmount; + + function receiveHook() external payable { + l2Block = uint128(IOutbox(outbox).l2ToL1Block()); + timestamp = uint128(IOutbox(outbox).l2ToL1Timestamp()); + outputId = IOutbox(outbox).l2ToL1OutputId(); + sender = IOutbox(outbox).l2ToL1Sender(); + l1Block = uint96(IOutbox(outbox).l2ToL1EthBlock()); + withdrawalAmount = msg.value; + } + + function setOutbox(address _outbox) external { + outbox = _outbox; + } +} diff --git a/contracts/test/foundry/SequencerInbox.t.sol b/contracts/test/foundry/SequencerInbox.t.sol new file mode 100644 index 000000000..44d61f6f2 --- /dev/null +++ b/contracts/test/foundry/SequencerInbox.t.sol @@ -0,0 +1,614 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/SequencerInbox.sol"; +import {ERC20Bridge} from "../../src/bridge/ERC20Bridge.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol"; + +contract RollupMock { + address public immutable owner; + + constructor(address _owner) { + owner = _owner; + } +} + +contract SequencerInboxTest is Test { + // cannot reference events outside of the original contract until 0.8.21 + // we currently use 0.8.9 + event MessageDelivered( + uint256 indexed messageIndex, + bytes32 indexed beforeInboxAcc, + address inbox, + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 baseFeeL1, + uint64 timestamp + ); + event InboxMessageDelivered(uint256 indexed messageNum, bytes data); + event SequencerBatchDelivered( + uint256 indexed batchSequenceNumber, + bytes32 indexed beforeAcc, + bytes32 indexed afterAcc, + bytes32 delayedAcc, + uint256 afterDelayedMessagesRead, + IBridge.TimeBounds timeBounds, + IBridge.BatchDataLocation dataLocation + ); + + Random RAND = new Random(); + address rollupOwner = address(137); + uint256 maxDataSize = 10000; + ISequencerInbox.MaxTimeVariation maxTimeVariation = + ISequencerInbox.MaxTimeVariation({ + delayBlocks: 10, + futureBlocks: 10, + delaySeconds: 100, + futureSeconds: 100 + }); + address dummyInbox = address(139); + address proxyAdmin = address(140); + IReader4844 dummyReader4844 = IReader4844(address(137)); + + uint256 public constant MAX_DATA_SIZE = 117964; + + function deployRollup(bool isArbHosted) internal returns (SequencerInbox, Bridge) { + RollupMock rollupMock = new RollupMock(rollupOwner); + Bridge bridgeImpl = new Bridge(); + Bridge bridge = Bridge( + address(new TransparentUpgradeableProxy(address(bridgeImpl), proxyAdmin, "")) + ); + + bridge.initialize(IOwnable(address(rollupMock))); + vm.prank(rollupOwner); + bridge.setDelayedInbox(dummyInbox, true); + + SequencerInbox seqInboxImpl = new SequencerInbox( + maxDataSize, + isArbHosted ? IReader4844(address(0)) : dummyReader4844, + false + ); + SequencerInbox seqInbox = SequencerInbox( + address(new TransparentUpgradeableProxy(address(seqInboxImpl), proxyAdmin, "")) + ); + seqInbox.initialize(bridge, maxTimeVariation); + + vm.prank(rollupOwner); + seqInbox.setIsBatchPoster(tx.origin, true); + + vm.prank(rollupOwner); + bridge.setSequencerInbox(address(seqInbox)); + + return (seqInbox, bridge); + } + + function deployFeeTokenBasedRollup() internal returns (SequencerInbox, ERC20Bridge) { + RollupMock rollupMock = new RollupMock(rollupOwner); + ERC20Bridge bridgeImpl = new ERC20Bridge(); + ERC20Bridge bridge = ERC20Bridge( + address(new TransparentUpgradeableProxy(address(bridgeImpl), proxyAdmin, "")) + ); + address nativeToken = address(new ERC20PresetMinterPauser("Appchain Token", "App")); + + bridge.initialize(IOwnable(address(rollupMock)), nativeToken); + vm.prank(rollupOwner); + bridge.setDelayedInbox(dummyInbox, true); + + /// this will result in 'hostChainIsArbitrum = true' + vm.mockCall( + address(100), + abi.encodeWithSelector(ArbSys.arbOSVersion.selector), + abi.encode(uint256(11)) + ); + SequencerInbox seqInboxImpl = new SequencerInbox( + maxDataSize, + IReader4844(address(0)), + true + ); + SequencerInbox seqInbox = SequencerInbox( + address(new TransparentUpgradeableProxy(address(seqInboxImpl), proxyAdmin, "")) + ); + seqInbox.initialize(bridge, maxTimeVariation); + + vm.prank(rollupOwner); + seqInbox.setIsBatchPoster(tx.origin, true); + + vm.prank(rollupOwner); + bridge.setSequencerInbox(address(seqInbox)); + + return (seqInbox, bridge); + } + + function expectEvents( + IBridge bridge, + SequencerInbox seqInbox, + bytes memory data, + bool hostChainIsArbitrum, + bool isUsingFeeToken + ) internal { + uint256 delayedMessagesRead = bridge.delayedMessageCount(); + uint256 sequenceNumber = bridge.sequencerMessageCount(); + IBridge.TimeBounds memory timeBounds; + if (block.timestamp > maxTimeVariation.delaySeconds) { + timeBounds.minTimestamp = uint64(block.timestamp - maxTimeVariation.delaySeconds); + } + timeBounds.maxTimestamp = uint64(block.timestamp + maxTimeVariation.futureSeconds); + if (block.number > maxTimeVariation.delayBlocks) { + timeBounds.minBlockNumber = uint64(block.number - maxTimeVariation.delayBlocks); + } + timeBounds.maxBlockNumber = uint64(block.number + maxTimeVariation.futureBlocks); + bytes32 dataHash = keccak256( + bytes.concat( + abi.encodePacked( + timeBounds.minTimestamp, + timeBounds.maxTimestamp, + timeBounds.minBlockNumber, + timeBounds.maxBlockNumber, + uint64(delayedMessagesRead) + ), + data + ) + ); + + bytes32 beforeAcc = bytes32(0); + bytes32 delayedAcc = bridge.delayedInboxAccs(delayedMessagesRead - 1); + bytes32 afterAcc = keccak256(abi.encodePacked(beforeAcc, dataHash, delayedAcc)); + + if (!isUsingFeeToken) { + uint256 expectedReportedExtraGas = 0; + if (hostChainIsArbitrum) { + // set 0.1 gwei basefee + uint256 basefee = 100000000; + vm.fee(basefee); + // 30 gwei TX L1 fees + uint256 l1Fees = 30000000000; + vm.mockCall( + address(0x6c), + abi.encodeWithSignature("getCurrentTxL1GasFees()"), + abi.encode(l1Fees) + ); + expectedReportedExtraGas = l1Fees / basefee; + } + + bytes memory spendingReportMsg = abi.encodePacked( + block.timestamp, + msg.sender, + dataHash, + sequenceNumber, + block.basefee, + uint64(expectedReportedExtraGas) + ); + + // spending report + vm.expectEmit(true, false, false, false); + emit MessageDelivered( + delayedMessagesRead, + delayedAcc, + address(seqInbox), + L1MessageType_batchPostingReport, + tx.origin, + keccak256(spendingReportMsg), + block.basefee, + uint64(block.timestamp) + ); + + // spending report event in seq inbox + vm.expectEmit(true, false, false, false); + emit InboxMessageDelivered(delayedMessagesRead, spendingReportMsg); + } + + // sequencer batch delivered + vm.expectEmit(true, false, false, false); + emit SequencerBatchDelivered( + sequenceNumber, + beforeAcc, + afterAcc, + delayedAcc, + delayedMessagesRead, + timeBounds, + IBridge.BatchDataLocation.TxInput + ); + } + + bytes biggerData = + hex"00a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890a4567890"; + + function testAddSequencerL2BatchFromOrigin() public { + (SequencerInbox seqInbox, Bridge bridge) = deployRollup(false); + address delayedInboxSender = address(140); + uint8 delayedInboxKind = 3; + bytes32 messageDataHash = RAND.Bytes32(); + bytes memory data = biggerData; // 00 is BROTLI_MESSAGE_HEADER_FLAG + + vm.prank(dummyInbox); + bridge.enqueueDelayedMessage(delayedInboxKind, delayedInboxSender, messageDataHash); + + uint256 subMessageCount = bridge.sequencerReportedSubMessageCount(); + uint256 sequenceNumber = bridge.sequencerMessageCount(); + uint256 delayedMessagesRead = bridge.delayedMessageCount(); + + // set 60 gwei basefee + uint256 basefee = 60000000000; + vm.fee(basefee); + expectEvents(bridge, seqInbox, data, false, false); + + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + } + + /* solhint-disable func-name-mixedcase */ + function testConstructor() public { + SequencerInbox seqInboxLogic = new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false); + assertEq(seqInboxLogic.maxDataSize(), MAX_DATA_SIZE, "Invalid MAX_DATA_SIZE"); + assertEq(seqInboxLogic.isUsingFeeToken(), false, "Invalid isUsingFeeToken"); + + SequencerInbox seqInboxProxy = SequencerInbox(TestUtil.deployProxy(address(seqInboxLogic))); + assertEq(seqInboxProxy.maxDataSize(), MAX_DATA_SIZE, "Invalid MAX_DATA_SIZE"); + assertEq(seqInboxProxy.isUsingFeeToken(), false, "Invalid isUsingFeeToken"); + + SequencerInbox seqInboxLogicFeeToken = new SequencerInbox( + MAX_DATA_SIZE, + dummyReader4844, + true + ); + assertEq(seqInboxLogicFeeToken.maxDataSize(), MAX_DATA_SIZE, "Invalid MAX_DATA_SIZE"); + assertEq(seqInboxLogicFeeToken.isUsingFeeToken(), true, "Invalid isUsingFeeToken"); + + SequencerInbox seqInboxProxyFeeToken = SequencerInbox( + TestUtil.deployProxy(address(seqInboxLogicFeeToken)) + ); + assertEq(seqInboxProxyFeeToken.maxDataSize(), MAX_DATA_SIZE, "Invalid MAX_DATA_SIZE"); + assertEq(seqInboxProxyFeeToken.isUsingFeeToken(), true, "Invalid isUsingFeeToken"); + } + + function testInitialize() public { + Bridge _bridge = Bridge( + address(new TransparentUpgradeableProxy(address(new Bridge()), proxyAdmin, "")) + ); + _bridge.initialize(IOwnable(address(new RollupMock(rollupOwner)))); + + address seqInboxLogic = address(new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false)); + SequencerInbox seqInboxProxy = SequencerInbox(TestUtil.deployProxy(seqInboxLogic)); + seqInboxProxy.initialize(IBridge(_bridge), maxTimeVariation); + + assertEq(seqInboxProxy.isUsingFeeToken(), false, "Invalid isUsingFeeToken"); + assertEq(address(seqInboxProxy.bridge()), address(_bridge), "Invalid bridge"); + assertEq(address(seqInboxProxy.rollup()), address(_bridge.rollup()), "Invalid rollup"); + } + + function testInitialize_FeeTokenBased() public { + ERC20Bridge _bridge = ERC20Bridge( + address(new TransparentUpgradeableProxy(address(new ERC20Bridge()), proxyAdmin, "")) + ); + address nativeToken = address(new ERC20PresetMinterPauser("Appchain Token", "App")); + _bridge.initialize(IOwnable(address(new RollupMock(rollupOwner))), nativeToken); + + address seqInboxLogic = address(new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, true)); + SequencerInbox seqInboxProxy = SequencerInbox(TestUtil.deployProxy(seqInboxLogic)); + seqInboxProxy.initialize(IBridge(_bridge), maxTimeVariation); + + assertEq(seqInboxProxy.isUsingFeeToken(), true, "Invalid isUsingFeeToken"); + assertEq(address(seqInboxProxy.bridge()), address(_bridge), "Invalid bridge"); + assertEq(address(seqInboxProxy.rollup()), address(_bridge.rollup()), "Invalid rollup"); + } + + function testInitialize_revert_NativeTokenMismatch_EthFeeToken() public { + Bridge _bridge = Bridge( + address(new TransparentUpgradeableProxy(address(new Bridge()), proxyAdmin, "")) + ); + _bridge.initialize(IOwnable(address(new RollupMock(rollupOwner)))); + + address seqInboxLogic = address(new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, true)); + SequencerInbox seqInboxProxy = SequencerInbox(TestUtil.deployProxy(seqInboxLogic)); + + vm.expectRevert(abi.encodeWithSelector(NativeTokenMismatch.selector)); + seqInboxProxy.initialize(IBridge(_bridge), maxTimeVariation); + } + + function testInitialize_revert_NativeTokenMismatch_FeeTokenEth() public { + ERC20Bridge _bridge = ERC20Bridge( + address(new TransparentUpgradeableProxy(address(new ERC20Bridge()), proxyAdmin, "")) + ); + address nativeToken = address(new ERC20PresetMinterPauser("Appchain Token", "App")); + _bridge.initialize(IOwnable(address(new RollupMock(rollupOwner))), nativeToken); + + address seqInboxLogic = address(new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false)); + SequencerInbox seqInboxProxy = SequencerInbox(TestUtil.deployProxy(seqInboxLogic)); + + vm.expectRevert(abi.encodeWithSelector(NativeTokenMismatch.selector)); + seqInboxProxy.initialize(IBridge(_bridge), maxTimeVariation); + } + + function testAddSequencerL2BatchFromOrigin_ArbitrumHosted() public { + // this will result in 'hostChainIsArbitrum = true' + vm.mockCall( + address(100), + abi.encodeWithSelector(ArbSys.arbOSVersion.selector), + abi.encode(uint256(11)) + ); + (SequencerInbox seqInbox, Bridge bridge) = deployRollup(true); + + address delayedInboxSender = address(140); + uint8 delayedInboxKind = 3; + bytes32 messageDataHash = RAND.Bytes32(); + bytes memory data = hex"00567890"; + + vm.prank(dummyInbox); + bridge.enqueueDelayedMessage(delayedInboxKind, delayedInboxSender, messageDataHash); + + uint256 subMessageCount = bridge.sequencerReportedSubMessageCount(); + uint256 sequenceNumber = bridge.sequencerMessageCount(); + uint256 delayedMessagesRead = bridge.delayedMessageCount(); + + expectEvents(bridge, seqInbox, data, true, false); + + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + } + + function testAddSequencerL2BatchFromOrigin_ArbitrumHostedFeeTokenBased() public { + (SequencerInbox seqInbox, ERC20Bridge bridge) = deployFeeTokenBasedRollup(); + address delayedInboxSender = address(140); + uint8 delayedInboxKind = 3; + bytes32 messageDataHash = RAND.Bytes32(); + bytes memory data = hex"80567890"; + + vm.prank(dummyInbox); + bridge.enqueueDelayedMessage(delayedInboxKind, delayedInboxSender, messageDataHash, 0); + + uint256 subMessageCount = bridge.sequencerReportedSubMessageCount(); + uint256 sequenceNumber = bridge.sequencerMessageCount(); + uint256 delayedMessagesRead = bridge.delayedMessageCount(); + + // set 40 gwei basefee + uint256 basefee = 40000000000; + vm.fee(basefee); + + expectEvents(IBridge(address(bridge)), seqInbox, data, true, true); + + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + } + + function testAddSequencerL2BatchFromOriginReverts() public { + (SequencerInbox seqInbox, Bridge bridge) = deployRollup(false); + address delayedInboxSender = address(140); + uint8 delayedInboxKind = 3; + bytes32 messageDataHash = RAND.Bytes32(); + bytes memory data = biggerData; // 00 is BROTLI_MESSAGE_HEADER_FLAG + + vm.prank(dummyInbox); + bridge.enqueueDelayedMessage(delayedInboxKind, delayedInboxSender, messageDataHash); + + uint256 subMessageCount = bridge.sequencerReportedSubMessageCount(); + uint256 sequenceNumber = bridge.sequencerMessageCount(); + uint256 delayedMessagesRead = bridge.delayedMessageCount(); + + vm.expectRevert(abi.encodeWithSelector(NotOrigin.selector)); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + + vm.prank(rollupOwner); + seqInbox.setIsBatchPoster(tx.origin, false); + + vm.expectRevert(abi.encodeWithSelector(NotBatchPoster.selector)); + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + + vm.prank(rollupOwner); + seqInbox.setIsBatchPoster(tx.origin, true); + + bytes memory bigData = bytes.concat( + seqInbox.BROTLI_MESSAGE_HEADER_FLAG(), + RAND.Bytes(maxDataSize - seqInbox.HEADER_LENGTH()) + ); + vm.expectRevert( + abi.encodeWithSelector( + DataTooLarge.selector, + bigData.length + seqInbox.HEADER_LENGTH(), + maxDataSize + ) + ); + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + bigData, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + + bytes memory authenticatedData = bytes.concat(seqInbox.DATA_BLOB_HEADER_FLAG(), data); + vm.expectRevert(abi.encodeWithSelector(InvalidHeaderFlag.selector, authenticatedData[0])); + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber, + authenticatedData, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + + vm.expectRevert( + abi.encodeWithSelector(BadSequencerNumber.selector, sequenceNumber, sequenceNumber + 5) + ); + vm.prank(tx.origin); + seqInbox.addSequencerL2BatchFromOrigin( + sequenceNumber + 5, + data, + delayedMessagesRead, + IGasRefunder(address(0)), + subMessageCount, + subMessageCount + 1 + ); + } + + function testPostUpgradeInitAlreadyInit() public returns (SequencerInbox, SequencerInbox) { + (SequencerInbox seqInbox, ) = deployRollup(false); + SequencerInbox seqInboxImpl = new SequencerInbox(maxDataSize, dummyReader4844, false); + + vm.expectRevert(abi.encodeWithSelector(AlreadyInit.selector)); + vm.prank(proxyAdmin); + TransparentUpgradeableProxy(payable(address(seqInbox))).upgradeToAndCall( + address(seqInboxImpl), + abi.encodeWithSelector(SequencerInbox.postUpgradeInit.selector) + ); + return (seqInbox, seqInboxImpl); + } + + function testPostUpgradeInit( + uint64 delayBlocks, + uint64 futureBlocks, + uint64 delaySeconds, + uint64 futureSeconds + ) public { + vm.assume(delayBlocks != 0 || futureBlocks != 0 || delaySeconds != 0 || futureSeconds != 0); + + (SequencerInbox seqInbox, SequencerInbox seqInboxImpl) = testPostUpgradeInitAlreadyInit(); + + vm.expectRevert(abi.encodeWithSelector(AlreadyInit.selector)); + vm.prank(proxyAdmin); + TransparentUpgradeableProxy(payable(address(seqInbox))).upgradeToAndCall( + address(seqInboxImpl), + abi.encodeWithSelector(SequencerInbox.postUpgradeInit.selector) + ); + + vm.store(address(seqInbox), bytes32(uint256(4)), bytes32(uint256(delayBlocks))); // slot 4: delayBlocks + vm.store(address(seqInbox), bytes32(uint256(5)), bytes32(uint256(futureBlocks))); // slot 5: futureBlocks + vm.store(address(seqInbox), bytes32(uint256(6)), bytes32(uint256(delaySeconds))); // slot 6: delaySeconds + vm.store(address(seqInbox), bytes32(uint256(7)), bytes32(uint256(futureSeconds))); // slot 7: futureSeconds + vm.prank(proxyAdmin); + TransparentUpgradeableProxy(payable(address(seqInbox))).upgradeToAndCall( + address(seqInboxImpl), + abi.encodeWithSelector(SequencerInbox.postUpgradeInit.selector) + ); + + ( + uint256 delayBlocks_, + uint256 futureBlocks_, + uint256 delaySeconds_, + uint256 futureSeconds_ + ) = seqInbox.maxTimeVariation(); + assertEq(delayBlocks_, delayBlocks); + assertEq(futureBlocks_, futureBlocks); + assertEq(delaySeconds_, delaySeconds); + assertEq(futureSeconds_, futureSeconds); + + vm.expectRevert(abi.encodeWithSelector(AlreadyInit.selector)); + vm.prank(proxyAdmin); + TransparentUpgradeableProxy(payable(address(seqInbox))).upgradeToAndCall( + address(seqInboxImpl), + abi.encodeWithSelector(SequencerInbox.postUpgradeInit.selector) + ); + } + + function testPostUpgradeInitBadInit( + uint256 delayBlocks, + uint256 futureBlocks, + uint256 delaySeconds, + uint256 futureSeconds + ) public { + vm.assume(delayBlocks > uint256(type(uint64).max)); + vm.assume(futureBlocks > uint256(type(uint64).max)); + vm.assume(delaySeconds > uint256(type(uint64).max)); + vm.assume(futureSeconds > uint256(type(uint64).max)); + + (SequencerInbox seqInbox, SequencerInbox seqInboxImpl) = testPostUpgradeInitAlreadyInit(); + + vm.store(address(seqInbox), bytes32(uint256(4)), bytes32(delayBlocks)); // slot 4: delayBlocks + vm.store(address(seqInbox), bytes32(uint256(5)), bytes32(futureBlocks)); // slot 5: futureBlocks + vm.store(address(seqInbox), bytes32(uint256(6)), bytes32(delaySeconds)); // slot 6: delaySeconds + vm.store(address(seqInbox), bytes32(uint256(7)), bytes32(futureSeconds)); // slot 7: futureSeconds + vm.expectRevert(abi.encodeWithSelector(BadPostUpgradeInit.selector)); + vm.prank(proxyAdmin); + TransparentUpgradeableProxy(payable(address(seqInbox))).upgradeToAndCall( + address(seqInboxImpl), + abi.encodeWithSelector(SequencerInbox.postUpgradeInit.selector) + ); + } + + function testSetMaxTimeVariation( + uint256 delayBlocks, + uint256 futureBlocks, + uint256 delaySeconds, + uint256 futureSeconds + ) public { + vm.assume(delayBlocks <= uint256(type(uint64).max)); + vm.assume(futureBlocks <= uint256(type(uint64).max)); + vm.assume(delaySeconds <= uint256(type(uint64).max)); + vm.assume(futureSeconds <= uint256(type(uint64).max)); + (SequencerInbox seqInbox, ) = deployRollup(false); + vm.prank(rollupOwner); + seqInbox.setMaxTimeVariation( + ISequencerInbox.MaxTimeVariation({ + delayBlocks: delayBlocks, + futureBlocks: futureBlocks, + delaySeconds: delaySeconds, + futureSeconds: futureSeconds + }) + ); + } + + function testSetMaxTimeVariationOverflow( + uint256 delayBlocks, + uint256 futureBlocks, + uint256 delaySeconds, + uint256 futureSeconds + ) public { + vm.assume(delayBlocks > uint256(type(uint64).max)); + vm.assume(futureBlocks > uint256(type(uint64).max)); + vm.assume(delaySeconds > uint256(type(uint64).max)); + vm.assume(futureSeconds > uint256(type(uint64).max)); + (SequencerInbox seqInbox, ) = deployRollup(false); + vm.expectRevert(abi.encodeWithSelector(BadMaxTimeVariation.selector)); + vm.prank(rollupOwner); + seqInbox.setMaxTimeVariation( + ISequencerInbox.MaxTimeVariation({ + delayBlocks: delayBlocks, + futureBlocks: futureBlocks, + delaySeconds: delaySeconds, + futureSeconds: futureSeconds + }) + ); + } +} diff --git a/contracts/test/foundry/util/TestUtil.sol b/contracts/test/foundry/util/TestUtil.sol new file mode 100644 index 000000000..def8120c0 --- /dev/null +++ b/contracts/test/foundry/util/TestUtil.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +library TestUtil { + function deployProxy(address logic) public returns (address) { + ProxyAdmin pa = new ProxyAdmin(); + return address(new TransparentUpgradeableProxy(address(logic), address(pa), "")); + } +} + +contract Random { + bytes32 seed = bytes32(uint256(0x137)); + + function Bytes32() public returns (bytes32) { + seed = keccak256(abi.encodePacked(seed)); + return seed; + } + + function Bytes(uint256 length) public returns (bytes memory) { + require(length > 0, "Length must be greater than 0"); + bytes memory randomBytes = new bytes(length); + + for (uint256 i = 0; i < length; i++) { + Bytes32(); + randomBytes[i] = bytes1(uint8(uint256(seed) % 256)); + } + + return randomBytes; + } +} diff --git a/contracts/test/signatures/Bridge b/contracts/test/signatures/Bridge new file mode 100644 index 000000000..667c6a850 --- /dev/null +++ b/contracts/test/signatures/Bridge @@ -0,0 +1,25 @@ +{ + "acceptFundsFromOldBridge()": "e77145f4", + "activeOutbox()": "ab5d8943", + "allowedDelayedInboxList(uint256)": "e76f5c8d", + "allowedDelayedInboxes(address)": "ae60bd13", + "allowedOutboxList(uint256)": "945e1147", + "allowedOutboxes(address)": "413b35bd", + "delayedInboxAccs(uint256)": "d5719dc2", + "delayedMessageCount()": "eca067ad", + "enqueueDelayedMessage(uint8,address,bytes32)": "8db5993b", + "enqueueSequencerMessage(bytes32,uint256,uint256,uint256)": "86598a56", + "executeCall(address,uint256,bytes)": "9e5d4c49", + "initialize(address)": "c4d66de8", + "rollup()": "cb23bcb5", + "sequencerInbox()": "ee35f327", + "sequencerInboxAccs(uint256)": "16bf5579", + "sequencerMessageCount()": "0084120c", + "sequencerReportedSubMessageCount()": "5fca4a16", + "setDelayedInbox(address,bool)": "47fb24c5", + "setOutbox(address,bool)": "cee3d728", + "setSequencerInbox(address)": "4f61f850", + "setSequencerReportedSubMessageCount(uint256)": "f81ff3b3", + "submitBatchSpendingReport(address,bytes32)": "7a88b107", + "updateRollupAddress(address)": "919cc706" +} diff --git a/contracts/test/signatures/BridgeCreator b/contracts/test/signatures/BridgeCreator new file mode 100644 index 000000000..333409998 --- /dev/null +++ b/contracts/test/signatures/BridgeCreator @@ -0,0 +1,10 @@ +{ + "createBridge(address,address,address,(uint256,uint256,uint256,uint256))": "b4a5cc34", + "erc20BasedTemplates()": "76768ab9", + "ethBasedTemplates()": "11f02227", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "updateERC20Templates((address,address,address,address,address))": "1bb7c6cc", + "updateTemplates((address,address,address,address,address))": "d94d6e0a" +} diff --git a/contracts/test/signatures/DeployHelper b/contracts/test/signatures/DeployHelper new file mode 100644 index 000000000..93ff0c755 --- /dev/null +++ b/contracts/test/signatures/DeployHelper @@ -0,0 +1,16 @@ +{ + "ERC1820_DEPLOYER()": "290302ce", + "ERC1820_PAYLOAD()": "2e796641", + "ERC1820_VALUE()": "db633c3e", + "ERC2470_DEPLOYER()": "55e34a6b", + "ERC2470_PAYLOAD()": "89cf8ae6", + "ERC2470_VALUE()": "9ed2c6f0", + "NICK_CREATE2_DEPLOYER()": "ef77e71a", + "NICK_CREATE2_PAYLOAD()": "1b9a680c", + "NICK_CREATE2_VALUE()": "4367d652", + "ZOLTU_CREATE2_DEPLOYER()": "d3a3faab", + "ZOLTU_CREATE2_PAYLOAD()": "75ae22b5", + "ZOLTU_VALUE()": "dd0c625a", + "getDeploymentTotalCost(address,uint256)": "acd7d02a", + "perform(address,address,uint256)": "d7c641e7" +} diff --git a/contracts/test/signatures/ERC20Bridge b/contracts/test/signatures/ERC20Bridge new file mode 100644 index 000000000..c37821d6f --- /dev/null +++ b/contracts/test/signatures/ERC20Bridge @@ -0,0 +1,26 @@ +{ + "acceptFundsFromOldBridge()": "e77145f4", + "activeOutbox()": "ab5d8943", + "allowedDelayedInboxList(uint256)": "e76f5c8d", + "allowedDelayedInboxes(address)": "ae60bd13", + "allowedOutboxList(uint256)": "945e1147", + "allowedOutboxes(address)": "413b35bd", + "delayedInboxAccs(uint256)": "d5719dc2", + "delayedMessageCount()": "eca067ad", + "enqueueDelayedMessage(uint8,address,bytes32,uint256)": "75d81e25", + "enqueueSequencerMessage(bytes32,uint256,uint256,uint256)": "86598a56", + "executeCall(address,uint256,bytes)": "9e5d4c49", + "initialize(address,address)": "485cc955", + "nativeToken()": "e1758bd8", + "rollup()": "cb23bcb5", + "sequencerInbox()": "ee35f327", + "sequencerInboxAccs(uint256)": "16bf5579", + "sequencerMessageCount()": "0084120c", + "sequencerReportedSubMessageCount()": "5fca4a16", + "setDelayedInbox(address,bool)": "47fb24c5", + "setOutbox(address,bool)": "cee3d728", + "setSequencerInbox(address)": "4f61f850", + "setSequencerReportedSubMessageCount(uint256)": "f81ff3b3", + "submitBatchSpendingReport(address,bytes32)": "7a88b107", + "updateRollupAddress(address)": "919cc706" +} diff --git a/contracts/test/signatures/ERC20Inbox b/contracts/test/signatures/ERC20Inbox new file mode 100644 index 000000000..041760309 --- /dev/null +++ b/contracts/test/signatures/ERC20Inbox @@ -0,0 +1,22 @@ +{ + "allowListEnabled()": "22bd5c1c", + "bridge()": "e78cea92", + "calculateRetryableSubmissionFee(uint256,uint256)": "a66b327d", + "createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,uint256,bytes)": "549e8426", + "depositERC20(uint256)": "b79092fd", + "getProxyAdmin()": "8b3240a0", + "initialize(address,address)": "485cc955", + "isAllowed(address)": "babcc539", + "maxDataSize()": "e8eb1dc3", + "pause()": "8456cb59", + "paused()": "5c975abb", + "sendContractTransaction(uint256,uint256,address,uint256,bytes)": "8a631aa6", + "sendL2Message(bytes)": "b75436bb", + "sendL2MessageFromOrigin(bytes)": "1fe927cf", + "sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)": "5075788b", + "sequencerInbox()": "ee35f327", + "setAllowList(address[],bool[])": "e3de72a5", + "setAllowListEnabled(bool)": "efeadb6d", + "unpause()": "3f4ba83a", + "unsafeCreateRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,uint256,bytes)": "b9b9a688" +} diff --git a/contracts/test/signatures/ERC20Outbox b/contracts/test/signatures/ERC20Outbox new file mode 100644 index 000000000..f577c95da --- /dev/null +++ b/contracts/test/signatures/ERC20Outbox @@ -0,0 +1,23 @@ +{ + "OUTBOX_VERSION()": "c75184df", + "bridge()": "e78cea92", + "calculateItemHash(address,address,uint256,uint256,uint256,uint256,bytes)": "9f0c04bf", + "calculateMerkleRoot(bytes32[],uint256,bytes32)": "007436d3", + "executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)": "08635a95", + "executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)": "288e5b10", + "initialize(address)": "c4d66de8", + "isSpent(uint256)": "5a129efe", + "l2ToL1BatchNum()": "11985271", + "l2ToL1Block()": "46547790", + "l2ToL1EthBlock()": "8515bc6a", + "l2ToL1OutputId()": "72f2a8c7", + "l2ToL1Sender()": "80648b02", + "l2ToL1Timestamp()": "b0f30537", + "l2ToL1WithdrawalAmount()": "cbf96f63", + "postUpgradeInit()": "95fcea78", + "rollup()": "cb23bcb5", + "roots(bytes32)": "ae6dead7", + "spent(uint256)": "d5b5cc23", + "updateRollupAddress()": "6ae71f12", + "updateSendRoot(bytes32,bytes32)": "a04cee60" +} diff --git a/contracts/test/signatures/EdgeChallengeManager b/contracts/test/signatures/EdgeChallengeManager new file mode 100644 index 000000000..d0378e90b --- /dev/null +++ b/contracts/test/signatures/EdgeChallengeManager @@ -0,0 +1,33 @@ +{ + "LAYERZERO_BIGSTEPEDGE_HEIGHT()": "416e6657", + "LAYERZERO_BLOCKEDGE_HEIGHT()": "1dce5166", + "LAYERZERO_SMALLSTEPEDGE_HEIGHT()": "f8ee77d6", + "NUM_BIGSTEP_LEVEL()": "5d9e2444", + "assertionChain()": "48dd2924", + "bisectEdge(bytes32,bytes32,bytes)": "c8bc4e43", + "calculateEdgeId(uint8,bytes32,uint256,bytes32,uint256,bytes32)": "004d8efe", + "calculateMutualId(uint8,bytes32,uint256,bytes32,uint256)": "c32d8c63", + "challengePeriodBlocks()": "46c2781a", + "confirmEdgeByOneStepProof(bytes32,(bytes32,bytes),(bytes32,uint256,address,uint64,uint64),bytes32[],bytes32[])": "8c1b3a40", + "confirmEdgeByTime(bytes32,(((bytes32[2],uint64[2]),uint8,bytes32),bytes32,bytes32))": "b2a1408e", + "confirmedRival(bytes32)": "e5b123da", + "createLayerZeroEdge((uint8,bytes32,uint256,bytes32,bytes,bytes))": "05fae141", + "edgeExists(bytes32)": "750e0c0f", + "edgeLength(bytes32)": "eae0328b", + "excessStakeReceiver()": "e94e051e", + "firstRival(bytes32)": "bce6f54f", + "getEdge(bytes32)": "fda2892e", + "getLayerZeroEndHeight(uint8)": "42e1aaa8", + "getPrevAssertionHash(bytes32)": "5a48e0f4", + "hasLengthOneRival(bytes32)": "54b64151", + "hasRival(bytes32)": "908517e9", + "initialize(address,uint64,address,uint256,uint256,uint256,address,address,uint8,uint256[])": "1a72d54c", + "multiUpdateTimeCacheByChildren(bytes32[])": "eb82415c", + "oneStepProofEntry()": "48923bc5", + "refundStake(bytes32)": "748926f3", + "stakeAmounts(uint256)": "1c1b4f3a", + "stakeToken()": "51ed6a30", + "timeUnrivaled(bytes32)": "3e35f5e8", + "updateTimerCacheByChildren(bytes32)": "1e5a3553", + "updateTimerCacheByClaim(bytes32,bytes32)": "4056b2ce" +} diff --git a/contracts/test/signatures/Inbox b/contracts/test/signatures/Inbox new file mode 100644 index 000000000..4e884c6b8 --- /dev/null +++ b/contracts/test/signatures/Inbox @@ -0,0 +1,30 @@ +{ + "allowListEnabled()": "22bd5c1c", + "bridge()": "e78cea92", + "calculateRetryableSubmissionFee(uint256,uint256)": "a66b327d", + "createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)": "679b6ded", + "createRetryableTicketNoRefundAliasRewrite(address,uint256,uint256,address,address,uint256,uint256,bytes)": "1b871c8d", + "depositEth()": "439370b1", + "depositEth(uint256)": "0f4d14e9", + "getProxyAdmin()": "8b3240a0", + "initialize(address,address)": "485cc955", + "isAllowed(address)": "babcc539", + "maxDataSize()": "e8eb1dc3", + "pause()": "8456cb59", + "paused()": "5c975abb", + "postUpgradeInit(address)": "c474d2c5", + "sendContractTransaction(uint256,uint256,address,uint256,bytes)": "8a631aa6", + "sendL1FundedContractTransaction(uint256,uint256,address,bytes)": "5e916758", + "sendL1FundedUnsignedTransaction(uint256,uint256,uint256,address,bytes)": "67ef3ab8", + "sendL1FundedUnsignedTransactionToFork(uint256,uint256,uint256,address,bytes)": "e6bd12cf", + "sendL2Message(bytes)": "b75436bb", + "sendL2MessageFromOrigin(bytes)": "1fe927cf", + "sendUnsignedTransaction(uint256,uint256,uint256,address,uint256,bytes)": "5075788b", + "sendUnsignedTransactionToFork(uint256,uint256,uint256,address,uint256,bytes)": "00f72382", + "sendWithdrawEthToFork(uint256,uint256,uint256,uint256,address)": "70665f14", + "sequencerInbox()": "ee35f327", + "setAllowList(address[],bool[])": "e3de72a5", + "setAllowListEnabled(bool)": "efeadb6d", + "unpause()": "3f4ba83a", + "unsafeCreateRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)": "6e6e8a6a" +} diff --git a/contracts/test/signatures/Outbox b/contracts/test/signatures/Outbox new file mode 100644 index 000000000..cdfc5a243 --- /dev/null +++ b/contracts/test/signatures/Outbox @@ -0,0 +1,22 @@ +{ + "OUTBOX_VERSION()": "c75184df", + "bridge()": "e78cea92", + "calculateItemHash(address,address,uint256,uint256,uint256,uint256,bytes)": "9f0c04bf", + "calculateMerkleRoot(bytes32[],uint256,bytes32)": "007436d3", + "executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)": "08635a95", + "executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)": "288e5b10", + "initialize(address)": "c4d66de8", + "isSpent(uint256)": "5a129efe", + "l2ToL1BatchNum()": "11985271", + "l2ToL1Block()": "46547790", + "l2ToL1EthBlock()": "8515bc6a", + "l2ToL1OutputId()": "72f2a8c7", + "l2ToL1Sender()": "80648b02", + "l2ToL1Timestamp()": "b0f30537", + "postUpgradeInit()": "95fcea78", + "rollup()": "cb23bcb5", + "roots(bytes32)": "ae6dead7", + "spent(uint256)": "d5b5cc23", + "updateRollupAddress()": "6ae71f12", + "updateSendRoot(bytes32,bytes32)": "a04cee60" +} diff --git a/contracts/test/signatures/RollupAdminLogic b/contracts/test/signatures/RollupAdminLogic new file mode 100644 index 000000000..90235ba62 --- /dev/null +++ b/contracts/test/signatures/RollupAdminLogic @@ -0,0 +1,67 @@ +{ + "_stakerMap(address)": "e8bd4922", + "amountStaked(address)": "ef40a670", + "anyTrustFastConfirmer()": "55840a58", + "baseStake()": "76e7e23b", + "bridge()": "e78cea92", + "chainId()": "9a8a0592", + "challengeGracePeriodBlocks()": "3be680ea", + "challengeManager()": "023a96fe", + "confirmPeriodBlocks()": "2e7acfa6", + "forceConfirmAssertion(bytes32,bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32)": "5bf03833", + "forceCreateAssertion(bytes32,((bytes32,bytes32,(bytes32,uint256,address,uint64,uint64)),((bytes32[2],uint64[2]),uint8,bytes32),((bytes32[2],uint64[2]),uint8,bytes32)),bytes32)": "9a7b4556", + "forceRefundStaker(address[])": "7c75c298", + "genesisAssertionHash()": "353325e0", + "getAssertion(bytes32)": "88302884", + "getAssertionCreationBlockForLogLookup(bytes32)": "13c56ca7", + "getFirstChildCreationBlock(bytes32)": "11715585", + "getSecondChildCreationBlock(bytes32)": "56bbc9e6", + "getStaker(address)": "a23c44b1", + "getStakerAddress(uint64)": "6ddd3744", + "inbox()": "fb0e722b", + "initialize((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64),(address,address,address,address,address,address,address,address,address))": "6f62fdfd", + "isFirstChild(bytes32)": "30836228", + "isPending(bytes32)": "e531d8c7", + "isStaked(address)": "6177fd18", + "isValidator(address)": "facd743b", + "latestConfirmed()": "65f7f80d", + "latestStakedAssertion(address)": "2abdd230", + "loserStakeEscrow()": "f065de3f", + "minimumAssertionPeriod()": "45e38b64", + "outbox()": "ce11e6ab", + "pause()": "8456cb59", + "paused()": "5c975abb", + "proxiableUUID()": "52d1902d", + "removeOldOutbox(address)": "567ca41b", + "resume()": "046f7da2", + "rollupDeploymentBlock()": "1b1689e9", + "rollupEventInbox()": "aa38a6e7", + "sequencerInbox()": "ee35f327", + "setAnyTrustFastConfirmer(address)": "0d561b37", + "setBaseStake(uint256)": "06ae5851", + "setChallengeManager(address)": "b7626e73", + "setConfirmPeriodBlocks(uint64)": "ce66d05c", + "setDelayedInbox(address,bool)": "47fb24c5", + "setInbox(address)": "53b60c4a", + "setLoserStakeEscrow(address)": "fc8ffa03", + "setMinimumAssertionPeriod(uint256)": "948d6588", + "setOutbox(address)": "ff204f3b", + "setOwner(address)": "13af4035", + "setSequencerInbox(address)": "4f61f850", + "setValidator(address[],bool[])": "a3ffb772", + "setValidatorWhitelistDisabled(bool)": "a2b4f1d8", + "setWasmModuleRoot(bytes32)": "89384960", + "stakeToken()": "51ed6a30", + "stakerCount()": "dff69787", + "totalWithdrawableFunds()": "71ef232c", + "upgradeSecondaryTo(address)": "0d40a0fd", + "upgradeSecondaryToAndCall(address,bytes)": "9846129a", + "upgradeTo(address)": "3659cfe6", + "upgradeToAndCall(address,bytes)": "4f1ef286", + "validateAssertionHash(bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32,bytes32)": "e51019a6", + "validateConfig(bytes32,(bytes32,uint256,address,uint64,uint64))": "04972af9", + "validatorWalletCreator()": "bc45e0ae", + "validatorWhitelistDisabled()": "12ab3d3b", + "wasmModuleRoot()": "8ee1a126", + "withdrawableFunds(address)": "2f30cabd" +} diff --git a/contracts/test/signatures/RollupCore b/contracts/test/signatures/RollupCore new file mode 100644 index 000000000..58fd07689 --- /dev/null +++ b/contracts/test/signatures/RollupCore @@ -0,0 +1,41 @@ +{ + "_stakerMap(address)": "e8bd4922", + "amountStaked(address)": "ef40a670", + "anyTrustFastConfirmer()": "55840a58", + "baseStake()": "76e7e23b", + "bridge()": "e78cea92", + "chainId()": "9a8a0592", + "challengeGracePeriodBlocks()": "3be680ea", + "challengeManager()": "023a96fe", + "confirmPeriodBlocks()": "2e7acfa6", + "genesisAssertionHash()": "353325e0", + "getAssertion(bytes32)": "88302884", + "getAssertionCreationBlockForLogLookup(bytes32)": "13c56ca7", + "getFirstChildCreationBlock(bytes32)": "11715585", + "getSecondChildCreationBlock(bytes32)": "56bbc9e6", + "getStaker(address)": "a23c44b1", + "getStakerAddress(uint64)": "6ddd3744", + "inbox()": "fb0e722b", + "isFirstChild(bytes32)": "30836228", + "isPending(bytes32)": "e531d8c7", + "isStaked(address)": "6177fd18", + "isValidator(address)": "facd743b", + "latestConfirmed()": "65f7f80d", + "latestStakedAssertion(address)": "2abdd230", + "loserStakeEscrow()": "f065de3f", + "minimumAssertionPeriod()": "45e38b64", + "outbox()": "ce11e6ab", + "paused()": "5c975abb", + "rollupDeploymentBlock()": "1b1689e9", + "rollupEventInbox()": "aa38a6e7", + "sequencerInbox()": "ee35f327", + "stakeToken()": "51ed6a30", + "stakerCount()": "dff69787", + "totalWithdrawableFunds()": "71ef232c", + "validateAssertionHash(bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32,bytes32)": "e51019a6", + "validateConfig(bytes32,(bytes32,uint256,address,uint64,uint64))": "04972af9", + "validatorWalletCreator()": "bc45e0ae", + "validatorWhitelistDisabled()": "12ab3d3b", + "wasmModuleRoot()": "8ee1a126", + "withdrawableFunds(address)": "2f30cabd" +} diff --git a/contracts/test/signatures/RollupCreator b/contracts/test/signatures/RollupCreator new file mode 100644 index 000000000..6ba930ab4 --- /dev/null +++ b/contracts/test/signatures/RollupCreator @@ -0,0 +1,15 @@ +{ + "bridgeCreator()": "f860cefa", + "challengeManagerTemplate()": "9c683d10", + "createRollup(((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64),address[],uint256,address,bool,uint256,address[],address))": "ca96e939", + "l2FactoriesDeployer()": "ac0425bc", + "osp()": "f26a62c6", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "rollupAdminLogic()": "9dba3241", + "rollupUserLogic()": "9d4798e3", + "setTemplates(address,address,address,address,address,address,address,address)": "f0dae494", + "transferOwnership(address)": "f2fde38b", + "upgradeExecutorLogic()": "030cb85e", + "validatorWalletCreator()": "bc45e0ae" +} diff --git a/contracts/test/signatures/RollupUserLogic b/contracts/test/signatures/RollupUserLogic new file mode 100644 index 000000000..16526bcc7 --- /dev/null +++ b/contracts/test/signatures/RollupUserLogic @@ -0,0 +1,57 @@ +{ + "VALIDATOR_AFK_BLOCKS()": "4ceccfe5", + "_stakerMap(address)": "e8bd4922", + "addToDeposit(address,uint256)": "f3f0a03e", + "amountStaked(address)": "ef40a670", + "anyTrustFastConfirmer()": "55840a58", + "baseStake()": "76e7e23b", + "bridge()": "e78cea92", + "chainId()": "9a8a0592", + "challengeGracePeriodBlocks()": "3be680ea", + "challengeManager()": "023a96fe", + "computeAssertionHash(bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32)": "33635fc2", + "confirmAssertion(bytes32,bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32,(bytes32,uint256,address,uint64,uint64),bytes32)": "10b98a35", + "confirmPeriodBlocks()": "2e7acfa6", + "fastConfirmAssertion(bytes32,bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32)": "6096686d", + "fastConfirmNewAssertion(((bytes32,bytes32,(bytes32,uint256,address,uint64,uint64)),((bytes32[2],uint64[2]),uint8,bytes32),((bytes32[2],uint64[2]),uint8,bytes32)),bytes32)": "6420fb9f", + "genesisAssertionHash()": "353325e0", + "getAssertion(bytes32)": "88302884", + "getAssertionCreationBlockForLogLookup(bytes32)": "13c56ca7", + "getFirstChildCreationBlock(bytes32)": "11715585", + "getSecondChildCreationBlock(bytes32)": "56bbc9e6", + "getStaker(address)": "a23c44b1", + "getStakerAddress(uint64)": "6ddd3744", + "inbox()": "fb0e722b", + "initialize(address)": "c4d66de8", + "isFirstChild(bytes32)": "30836228", + "isPending(bytes32)": "e531d8c7", + "isStaked(address)": "6177fd18", + "isValidator(address)": "facd743b", + "latestConfirmed()": "65f7f80d", + "latestStakedAssertion(address)": "2abdd230", + "loserStakeEscrow()": "f065de3f", + "minimumAssertionPeriod()": "45e38b64", + "newStakeOnNewAssertion(uint256,((bytes32,bytes32,(bytes32,uint256,address,uint64,uint64)),((bytes32[2],uint64[2]),uint8,bytes32),((bytes32[2],uint64[2]),uint8,bytes32)),bytes32)": "7300201c", + "outbox()": "ce11e6ab", + "owner()": "8da5cb5b", + "paused()": "5c975abb", + "proxiableUUID()": "52d1902d", + "reduceDeposit(uint256)": "1e83d30f", + "removeWhitelistAfterFork()": "c2c2e68e", + "removeWhitelistAfterValidatorAfk()": "18baaab9", + "returnOldDeposit()": "57ef4ab9", + "rollupDeploymentBlock()": "1b1689e9", + "rollupEventInbox()": "aa38a6e7", + "sequencerInbox()": "ee35f327", + "stakeOnNewAssertion(((bytes32,bytes32,(bytes32,uint256,address,uint64,uint64)),((bytes32[2],uint64[2]),uint8,bytes32),((bytes32[2],uint64[2]),uint8,bytes32)),bytes32)": "3b86de19", + "stakeToken()": "51ed6a30", + "stakerCount()": "dff69787", + "totalWithdrawableFunds()": "71ef232c", + "validateAssertionHash(bytes32,((bytes32[2],uint64[2]),uint8,bytes32),bytes32,bytes32)": "e51019a6", + "validateConfig(bytes32,(bytes32,uint256,address,uint64,uint64))": "04972af9", + "validatorWalletCreator()": "bc45e0ae", + "validatorWhitelistDisabled()": "12ab3d3b", + "wasmModuleRoot()": "8ee1a126", + "withdrawStakerFunds()": "61373919", + "withdrawableFunds(address)": "2f30cabd" +} diff --git a/contracts/test/signatures/SequencerInbox b/contracts/test/signatures/SequencerInbox new file mode 100644 index 000000000..18c3db029 --- /dev/null +++ b/contracts/test/signatures/SequencerInbox @@ -0,0 +1,39 @@ +{ + "BROTLI_MESSAGE_HEADER_FLAG()": "16af91a7", + "DAS_MESSAGE_HEADER_FLAG()": "f60a5091", + "DATA_AUTHENTICATED_FLAG()": "e5a358c8", + "DATA_BLOB_HEADER_FLAG()": "2cbf74e5", + "HEADER_LENGTH()": "27957a49", + "TREE_DAS_MESSAGE_HEADER_FLAG()": "6c890450", + "ZERO_HEAVY_MESSAGE_HEADER_FLAG()": "02c99275", + "addSequencerL2Batch(uint256,bytes,uint256,address,uint256,uint256)": "e0bc9729", + "addSequencerL2BatchFromBlobs(uint256,uint256,address,uint256,uint256)": "3e5aa082", + "addSequencerL2BatchFromOrigin(uint256,bytes,uint256,address)": "6f12b0c9", + "addSequencerL2BatchFromOrigin(uint256,bytes,uint256,address,uint256,uint256)": "8f111f3c", + "batchCount()": "06f13056", + "batchPosterManager()": "cc2a1a0c", + "bridge()": "e78cea92", + "dasKeySetInfo(bytes32)": "715ea34b", + "forceInclusion(uint256,uint8,uint64[2],uint256,address,bytes32)": "f1981578", + "getKeysetCreationBlock(bytes32)": "258f0495", + "inboxAccs(uint256)": "d9dd67ab", + "initialize(address,(uint256,uint256,uint256,uint256))": "1f7a92b2", + "invalidateKeysetHash(bytes32)": "84420860", + "isBatchPoster(address)": "71c3e6fe", + "isSequencer(address)": "6d46e987", + "isUsingFeeToken()": "92d9f782", + "isValidKeysetHash(bytes32)": "1637be48", + "maxDataSize()": "e8eb1dc3", + "maxTimeVariation()": "ebea461d", + "postUpgradeInit()": "95fcea78", + "reader4844()": "8d910dde", + "removeDelayAfterFork()": "96cc5c78", + "rollup()": "cb23bcb5", + "setBatchPosterManager(address)": "1ff64790", + "setIsBatchPoster(address,bool)": "6e7df3e7", + "setIsSequencer(address,bool)": "1f956632", + "setMaxTimeVariation((uint256,uint256,uint256,uint256))": "b31761f8", + "setValidKeyset(bytes)": "d1ce8da8", + "totalDelayedMessagesRead()": "7fa3a40e", + "updateRollupAddress()": "6ae71f12" +} diff --git a/contracts/test/signatures/test-sigs.bash b/contracts/test/signatures/test-sigs.bash new file mode 100755 index 000000000..5933708da --- /dev/null +++ b/contracts/test/signatures/test-sigs.bash @@ -0,0 +1,17 @@ +#!/bin/bash +output_dir="./test/signatures" +for CONTRACTNAME in Bridge Inbox Outbox RollupCore RollupUserLogic RollupAdminLogic SequencerInbox EdgeChallengeManager ERC20Bridge ERC20Inbox ERC20Outbox BridgeCreator DeployHelper RollupCreator +do + echo "Checking for signature changes in $CONTRACTNAME" + [ -f "$output_dir/$CONTRACTNAME" ] && mv "$output_dir/$CONTRACTNAME" "$output_dir/$CONTRACTNAME-old" + forge inspect "$CONTRACTNAME" methods > "$output_dir/$CONTRACTNAME" + diff "$output_dir/$CONTRACTNAME-old" "$output_dir/$CONTRACTNAME" + if [[ $? != "0" ]] + then + CHANGED=1 + fi +done +if [[ $CHANGED == 1 ]] +then + exit 1 +fi \ No newline at end of file diff --git a/contracts/test/stakingPool/AssertionStakingPool.t.sol b/contracts/test/stakingPool/AssertionStakingPool.t.sol index 6537ab100..1b4b024bc 100644 --- a/contracts/test/stakingPool/AssertionStakingPool.t.sol +++ b/contracts/test/stakingPool/AssertionStakingPool.t.sol @@ -21,6 +21,8 @@ import "../challengeV2/Utils.sol"; import "../../src/libraries/Error.sol"; import "../../src/mocks/TestWETH9.sol"; +import "../../src/mocks/UpgradeExecutorMock.sol"; + import "../../src/assertionStakingPool/AssertionStakingPool.sol"; import "../../src/assertionStakingPool/AssertionStakingPoolCreator.sol"; @@ -75,11 +77,40 @@ contract AssertinPoolTest is Test { bytes32 assertionHash; AssertionState afterState; uint64 inboxcount; + address upgradeExecutorAddr; event RollupCreated( - address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge + address indexed rollupAddress, + address indexed nativeToken, + address inboxAddress, + address outbox, + address rollupEventInbox, + address challengeManager, + address adminProxy, + address sequencerInbox, + address bridge, + address upgradeExecutor, + address validatorWalletCreator ); + IReader4844 dummyReader4844 = IReader4844(address(137)); + BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, false), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE, dummyReader4844, true), + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + function setUp() public { OneStepProver0 oneStepProver = new OneStepProver0(); OneStepProverMemory oneStepProverMemory = new OneStepProverMemory(); @@ -92,10 +123,12 @@ contract AssertinPoolTest is Test { oneStepProverHostIo ); EdgeChallengeManager edgeChallengeManager = new EdgeChallengeManager(); - BridgeCreator bridgeCreator = new BridgeCreator(MAX_DATA_SIZE); + BridgeCreator bridgeCreator = new BridgeCreator(ethBasedTemplates, erc20BasedTemplates); RollupCreator rollupCreator = new RollupCreator(); RollupAdminLogic rollupAdminLogicImpl = new RollupAdminLogic(); RollupUserLogic rollupUserLogicImpl = new RollupUserLogic(); + DeployHelper deployHelper = new DeployHelper(); + IUpgradeExecutor upgradeExecutorLogic = new UpgradeExecutorMock(); rollupCreator.setTemplates( bridgeCreator, @@ -103,7 +136,9 @@ contract AssertinPoolTest is Test { edgeChallengeManager, rollupAdminLogicImpl, rollupUserLogicImpl, - address(0) + upgradeExecutorLogic, + address(0), + deployHelper ); AssertionState memory emptyState = AssertionState(GlobalState([bytes32(0), bytes32(0)], [uint64(0), uint64(0)]), MachineStatus.FINISHED, bytes32(0)); @@ -142,14 +177,26 @@ contract AssertinPoolTest is Test { }); vm.expectEmit(false, false, false, false); - emit RollupCreated(address(0), address(0), address(0), address(0), address(0)); - rollupAddr = rollupCreator.createRollup(config, address(0), new address[](0), false, MAX_DATA_SIZE); + emit RollupCreated(address(0), address(0), address(0), address(0), address(0), + address(0), address(0), address(0), address(0), address(0), address(0)); + RollupCreator.RollupDeploymentParams memory param = RollupCreator.RollupDeploymentParams({ + config: config, + validators: new address[](0), + maxDataSize: MAX_DATA_SIZE, + nativeToken: address(0), + deployFactoriesToL2: false, + maxFeePerGasForRetryables: 0, + batchPosters: new address[](0), + batchPosterManager: address(0) + }); + rollupAddr = rollupCreator.createRollup(param); userRollup = RollupUserLogic(address(rollupAddr)); adminRollup = RollupAdminLogic(address(rollupAddr)); challengeManager = EdgeChallengeManager(address(userRollup.challengeManager())); + upgradeExecutorAddr = userRollup.owner(); - vm.startPrank(owner); + vm.startPrank(upgradeExecutorAddr); adminRollup.sequencerInbox().setIsBatchPoster(sequencer, true); vm.stopPrank(); @@ -213,7 +260,7 @@ contract AssertinPoolTest is Test { vm.prank(excessStaker); token.approve(address(pool), type(uint256).max); - vm.prank(owner); + vm.prank(upgradeExecutorAddr); adminRollup.setValidatorWhitelistDisabled(true); } diff --git a/contracts/test/storage/Bridge b/contracts/test/storage/Bridge new file mode 100644 index 000000000..718f08c89 --- /dev/null +++ b/contracts/test/storage/Bridge @@ -0,0 +1,15 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------------------------|------------------------------------------------|------|--------|-------|------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/bridge/Bridge.sol:Bridge | +| _initializing | bool | 0 | 1 | 1 | src/bridge/Bridge.sol:Bridge | +| allowedDelayedInboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 1 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| allowedOutboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 2 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| allowedDelayedInboxList | address[] | 3 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| allowedOutboxList | address[] | 4 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| _activeOutbox | address | 5 | 0 | 20 | src/bridge/Bridge.sol:Bridge | +| delayedInboxAccs | bytes32[] | 6 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| sequencerInboxAccs | bytes32[] | 7 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| rollup | contract IOwnable | 8 | 0 | 20 | src/bridge/Bridge.sol:Bridge | +| sequencerInbox | address | 9 | 0 | 20 | src/bridge/Bridge.sol:Bridge | +| sequencerReportedSubMessageCount | uint256 | 10 | 0 | 32 | src/bridge/Bridge.sol:Bridge | +| __gap | uint256[40] | 11 | 0 | 1280 | src/bridge/Bridge.sol:Bridge | diff --git a/contracts/test/storage/Bridge.dot b/contracts/test/storage/Bridge.dot deleted file mode 100644 index 89e7e5fe4..000000000 --- a/contracts/test/storage/Bridge.dot +++ /dev/null @@ -1,27 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) }}}"] - -1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] - -2 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] - -3 [label="address[]: allowedDelayedInboxList \<\\>\n0x11987c15ef5ed64ec2e3cd9cfc79d7bd155aea3982ea59f35a5e6b5c1593a54b | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] - -4 [label="address[]: allowedOutboxList \<\\>\n0x68f9c7fa29c0442459fc0d2760448ff932de4dd67b90b4a6ac1899621cfd70a7 | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] - -5 [label="bytes32[]: delayedInboxAccs \<\\>\n0x5ff1374942f1d7624ea1478457e8132b05531ee44999ffc0f33a70926c6a0d30 | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] - -6 [label="bytes32[]: sequencerInboxAccs \<\\>\n0x995663702627f3d8fc4237c51a46b303536bb17f3f65e07c08ad05fecbf4d88e | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] - - 7:5 -> 1 - 7:8 -> 2 - 7:10 -> 3 - 7:12 -> 4 - 7:15 -> 5 - 7:17 -> 6 -} \ No newline at end of file diff --git a/contracts/test/storage/ERC20Bridge b/contracts/test/storage/ERC20Bridge new file mode 100644 index 000000000..890f89f72 --- /dev/null +++ b/contracts/test/storage/ERC20Bridge @@ -0,0 +1,16 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------------------------|------------------------------------------------|------|--------|-------|----------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| _initializing | bool | 0 | 1 | 1 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| allowedDelayedInboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 1 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| allowedOutboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 2 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| allowedDelayedInboxList | address[] | 3 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| allowedOutboxList | address[] | 4 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| _activeOutbox | address | 5 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| delayedInboxAccs | bytes32[] | 6 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| sequencerInboxAccs | bytes32[] | 7 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| rollup | contract IOwnable | 8 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| sequencerInbox | address | 9 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| sequencerReportedSubMessageCount | uint256 | 10 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| __gap | uint256[40] | 11 | 0 | 1280 | src/bridge/ERC20Bridge.sol:ERC20Bridge | +| nativeToken | address | 51 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge | diff --git a/contracts/test/storage/ERC20Inbox b/contracts/test/storage/ERC20Inbox new file mode 100644 index 000000000..85fae0cb5 --- /dev/null +++ b/contracts/test/storage/ERC20Inbox @@ -0,0 +1,12 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------|------|--------|-------|--------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| _initializing | bool | 0 | 1 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| __gap | uint256[50] | 1 | 0 | 1600 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| _paused | bool | 51 | 0 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| __gap | uint256[49] | 52 | 0 | 1568 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| bridge | contract IBridge | 101 | 0 | 20 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| sequencerInbox | contract ISequencerInbox | 102 | 0 | 20 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| allowListEnabled | bool | 102 | 20 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| isAllowed | mapping(address => bool) | 103 | 0 | 32 | src/bridge/ERC20Inbox.sol:ERC20Inbox | +| __gap | uint256[47] | 104 | 0 | 1504 | src/bridge/ERC20Inbox.sol:ERC20Inbox | diff --git a/contracts/test/storage/ERC20Outbox b/contracts/test/storage/ERC20Outbox new file mode 100644 index 000000000..09e2c38cb --- /dev/null +++ b/contracts/test/storage/ERC20Outbox @@ -0,0 +1,8 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|---------|--------------------------------|------|--------|-------|----------------------------------------| +| rollup | address | 0 | 0 | 20 | src/bridge/ERC20Outbox.sol:ERC20Outbox | +| bridge | contract IBridge | 1 | 0 | 20 | src/bridge/ERC20Outbox.sol:ERC20Outbox | +| spent | mapping(uint256 => bytes32) | 2 | 0 | 32 | src/bridge/ERC20Outbox.sol:ERC20Outbox | +| roots | mapping(bytes32 => bytes32) | 3 | 0 | 32 | src/bridge/ERC20Outbox.sol:ERC20Outbox | +| context | struct AbsOutbox.L2ToL1Context | 4 | 0 | 128 | src/bridge/ERC20Outbox.sol:ERC20Outbox | +| __gap | uint256[42] | 8 | 0 | 1344 | src/bridge/ERC20Outbox.sol:ERC20Outbox | diff --git a/contracts/test/storage/EdgeChallengeManager b/contracts/test/storage/EdgeChallengeManager new file mode 100644 index 000000000..33f50221f --- /dev/null +++ b/contracts/test/storage/EdgeChallengeManager @@ -0,0 +1,15 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------|-----------------------------|------|--------|-------|---------------------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| _initializing | bool | 0 | 1 | 1 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| store | struct EdgeStore | 1 | 0 | 96 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| excessStakeReceiver | address | 4 | 0 | 20 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| stakeToken | contract IERC20 | 5 | 0 | 20 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| stakeAmounts | uint256[] | 6 | 0 | 32 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| challengePeriodBlocks | uint64 | 7 | 0 | 8 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| assertionChain | contract IAssertionChain | 7 | 8 | 20 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| oneStepProofEntry | contract IOneStepProofEntry | 8 | 0 | 20 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| LAYERZERO_BLOCKEDGE_HEIGHT | uint256 | 9 | 0 | 32 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| LAYERZERO_BIGSTEPEDGE_HEIGHT | uint256 | 10 | 0 | 32 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| LAYERZERO_SMALLSTEPEDGE_HEIGHT | uint256 | 11 | 0 | 32 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | +| NUM_BIGSTEP_LEVEL | uint8 | 12 | 0 | 1 | src/challengeV2/EdgeChallengeManager.sol:EdgeChallengeManager | diff --git a/contracts/test/storage/EdgeChallengeManager.dot b/contracts/test/storage/EdgeChallengeManager.dot deleted file mode 100644 index 5d21106ff..000000000 --- a/contracts/test/storage/EdgeChallengeManager.dot +++ /dev/null @@ -1,15 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -3 [label="EdgeChallengeManager \<\\>\n | {{ slot| 0 | 1-2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <18> EdgeStore: store (64) } | { unallocated (12) | address: excessStakeReceiver (20) } | { unallocated (12) | IERC20: stakeToken (20) } | { uint256: stakeAmount (32) } | { uint256: challengePeriodBlocks (32) } | { unallocated (12) | IAssertionChain: assertionChain (20) } | { unallocated (12) | IOneStepProofEntry: oneStepProofEntry (20) } | { uint256: LAYERZERO_BLOCKEDGE_HEIGHT (32) } | { uint256: LAYERZERO_BIGSTEPEDGE_HEIGHT (32) } | { uint256: LAYERZERO_SMALLSTEPEDGE_HEIGHT (32) }}}"] - -1 [label="ChallengeEdge \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: variable (bytes) | { bytes32: originId (32) } | { bytes32: startHistoryRoot (32) } | { uint256: startHeight (32) } | { bytes32: endHistoryRoot (32) } | { uint256: endHeight (32) } | { bytes32: lowerChildId (32) } | { bytes32: upperChildId (32) } | { uint256: createdAtBlock (32) } | { bytes32: claimId (32) } | { unallocated (9) | bool: refunded (1) | EdgeType: eType (1) | EdgeStatus: status (1) | address: staker (20) }}}"] - -2 [label="EdgeStore \<\\>\n | {{ slot| 1 | 2 } | { type: variable (bytes) | { <16> mapping\(bytes32=\>ChallengeEdge\): edges (32) } | { mapping\(bytes32=\>bytes32\): firstRivals (32) }}}"] - - 3:18 -> 2 - 2:16 -> 1 -} \ No newline at end of file diff --git a/contracts/test/storage/Inbox b/contracts/test/storage/Inbox new file mode 100644 index 000000000..92e08b636 --- /dev/null +++ b/contracts/test/storage/Inbox @@ -0,0 +1,12 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------|------|--------|-------|----------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/bridge/Inbox.sol:Inbox | +| _initializing | bool | 0 | 1 | 1 | src/bridge/Inbox.sol:Inbox | +| __gap | uint256[50] | 1 | 0 | 1600 | src/bridge/Inbox.sol:Inbox | +| _paused | bool | 51 | 0 | 1 | src/bridge/Inbox.sol:Inbox | +| __gap | uint256[49] | 52 | 0 | 1568 | src/bridge/Inbox.sol:Inbox | +| bridge | contract IBridge | 101 | 0 | 20 | src/bridge/Inbox.sol:Inbox | +| sequencerInbox | contract ISequencerInbox | 102 | 0 | 20 | src/bridge/Inbox.sol:Inbox | +| allowListEnabled | bool | 102 | 20 | 1 | src/bridge/Inbox.sol:Inbox | +| isAllowed | mapping(address => bool) | 103 | 0 | 32 | src/bridge/Inbox.sol:Inbox | +| __gap | uint256[47] | 104 | 0 | 1504 | src/bridge/Inbox.sol:Inbox | diff --git a/contracts/test/storage/Inbox.dot b/contracts/test/storage/Inbox.dot deleted file mode 100644 index befbd1263..000000000 --- a/contracts/test/storage/Inbox.dot +++ /dev/null @@ -1,15 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -3 [label="Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (11) | bool: allowListEnabled (1) | ISequencerInbox: sequencerInbox (20) } | { mapping\(address=\>bool\): isAllowed (32) }}}"] - -1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - - 3:53 -> 1 - 3:104 -> 2 -} \ No newline at end of file diff --git a/contracts/test/storage/Outbox b/contracts/test/storage/Outbox new file mode 100644 index 000000000..d161ae3be --- /dev/null +++ b/contracts/test/storage/Outbox @@ -0,0 +1,8 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|---------|--------------------------------|------|--------|-------|------------------------------| +| rollup | address | 0 | 0 | 20 | src/bridge/Outbox.sol:Outbox | +| bridge | contract IBridge | 1 | 0 | 20 | src/bridge/Outbox.sol:Outbox | +| spent | mapping(uint256 => bytes32) | 2 | 0 | 32 | src/bridge/Outbox.sol:Outbox | +| roots | mapping(bytes32 => bytes32) | 3 | 0 | 32 | src/bridge/Outbox.sol:Outbox | +| context | struct AbsOutbox.L2ToL1Context | 4 | 0 | 128 | src/bridge/Outbox.sol:Outbox | +| __gap | uint256[42] | 8 | 0 | 1344 | src/bridge/Outbox.sol:Outbox | diff --git a/contracts/test/storage/Outbox.dot b/contracts/test/storage/Outbox.dot deleted file mode 100644 index 089e00204..000000000 --- a/contracts/test/storage/Outbox.dot +++ /dev/null @@ -1,12 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -2 [label="Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 } | { type: \.variable (bytes) | { unallocated (12) | address: rollup (20) } | { unallocated (12) | IBridge: bridge (20) } | { mapping\(uint256=\>bytes32\): spent (32) } | { mapping\(bytes32=\>bytes32\): roots (32) } | { <10> L2ToL1Context: context (128) }}}"] - -1 [label="L2ToL1Context \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint128: l1Block (16) | uint128: l2Block (16) } | { unallocated (16) | uint128: timestamp (16) } | { bytes32: outputId (32) } | { unallocated (12) | address: sender (20) }}}"] - - 2:10 -> 1 -} \ No newline at end of file diff --git a/contracts/test/storage/RollupAdminLogic b/contracts/test/storage/RollupAdminLogic new file mode 100644 index 000000000..1ed171557 --- /dev/null +++ b/contracts/test/storage/RollupAdminLogic @@ -0,0 +1,32 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------|-----------------------------------------------|------|--------|-------|--------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _initializing | bool | 0 | 1 | 1 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| __gap | uint256[50] | 1 | 0 | 1600 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _paused | bool | 51 | 0 | 1 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| __gap | uint256[49] | 52 | 0 | 1568 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| chainId | uint256 | 101 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| confirmPeriodBlocks | uint64 | 102 | 0 | 8 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| baseStake | uint256 | 103 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| wasmModuleRoot | bytes32 | 104 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| challengeManager | contract IEdgeChallengeManager | 105 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| challengeGracePeriodBlocks | uint64 | 105 | 20 | 8 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| inbox | contract IInboxBase | 106 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| bridge | contract IBridge | 107 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| outbox | contract IOutbox | 108 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| rollupEventInbox | contract IRollupEventInbox | 109 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| validatorWalletCreator | address | 110 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| loserStakeEscrow | address | 111 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| stakeToken | address | 112 | 0 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| minimumAssertionPeriod | uint256 | 113 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| isValidator | mapping(address => bool) | 114 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _latestConfirmed | bytes32 | 115 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _assertions | mapping(bytes32 => struct AssertionNode) | 116 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _stakerList | address[] | 117 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _stakerMap | mapping(address => struct IRollupCore.Staker) | 118 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _withdrawableFunds | mapping(address => uint256) | 119 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| totalWithdrawableFunds | uint256 | 120 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| rollupDeploymentBlock | uint256 | 121 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| validatorWhitelistDisabled | bool | 122 | 0 | 1 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| anyTrustFastConfirmer | address | 122 | 1 | 20 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | +| _assertionCreatedAtArbSysBlock | mapping(bytes32 => uint256) | 123 | 0 | 32 | src/rollup/RollupAdminLogic.sol:RollupAdminLogic | diff --git a/contracts/test/storage/RollupAdminLogic.dot b/contracts/test/storage/RollupAdminLogic.dot deleted file mode 100644 index 8e5a74f70..000000000 --- a/contracts/test/storage/RollupAdminLogic.dot +++ /dev/null @@ -1,24 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -6 [label="RollupAdminLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { uint256: RollupCore.chainId (32) } | { unallocated (24) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IEdgeChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | IInbox: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { bytes32: RollupCore._latestConfirmed (32) } | { <127> mapping\(bytes32=\>AssertionNode\): RollupCore._assertions (32) } | { <129> address[]: RollupCore._stakerList (32) } | { <134> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (11) | address: RollupCore.anyTrustFastConfirmer (20) | bool: RollupCore.validatorWhitelistDisabled (1) }}}"] - -1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -3 [label="AssertionNode \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { unallocated (6) | AssertionStatus: status (1) | bool: isFirstChild (1) | uint64: createdAtBlock (8) | uint64: secondChildBlock (8) | uint64: firstChildBlock (8) } | { bytes32: configHash (32) }}}"] - -4 [label="address[]: _stakerList \<\\>\n0xc8bf80e544b04815bb0dca52fb73385e1603944137ae5beee74affc86be0590e | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] - -5 [label="Staker \<\\>\n | {{ slot| 0 | 1 | 2 } | { type: variable (bytes) | { uint256: amountStaked (32) } | { bytes32: latestStakedAssertion (32) } | { unallocated (23) | bool: isStaked (1) | uint64: index (8) }}}"] - - 6:53 -> 1 - 6:104 -> 2 - 6:127 -> 3 - 6:129 -> 4 - 6:134 -> 5 -} \ No newline at end of file diff --git a/contracts/test/storage/RollupCore b/contracts/test/storage/RollupCore new file mode 100644 index 000000000..225deeec7 --- /dev/null +++ b/contracts/test/storage/RollupCore @@ -0,0 +1,32 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------|-----------------------------------------------|------|--------|-------|--------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/rollup/RollupCore.sol:RollupCore | +| _initializing | bool | 0 | 1 | 1 | src/rollup/RollupCore.sol:RollupCore | +| __gap | uint256[50] | 1 | 0 | 1600 | src/rollup/RollupCore.sol:RollupCore | +| _paused | bool | 51 | 0 | 1 | src/rollup/RollupCore.sol:RollupCore | +| __gap | uint256[49] | 52 | 0 | 1568 | src/rollup/RollupCore.sol:RollupCore | +| chainId | uint256 | 101 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| confirmPeriodBlocks | uint64 | 102 | 0 | 8 | src/rollup/RollupCore.sol:RollupCore | +| baseStake | uint256 | 103 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| wasmModuleRoot | bytes32 | 104 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| challengeManager | contract IEdgeChallengeManager | 105 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| challengeGracePeriodBlocks | uint64 | 105 | 20 | 8 | src/rollup/RollupCore.sol:RollupCore | +| inbox | contract IInboxBase | 106 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| bridge | contract IBridge | 107 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| outbox | contract IOutbox | 108 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| rollupEventInbox | contract IRollupEventInbox | 109 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| validatorWalletCreator | address | 110 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| loserStakeEscrow | address | 111 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| stakeToken | address | 112 | 0 | 20 | src/rollup/RollupCore.sol:RollupCore | +| minimumAssertionPeriod | uint256 | 113 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| isValidator | mapping(address => bool) | 114 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| _latestConfirmed | bytes32 | 115 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| _assertions | mapping(bytes32 => struct AssertionNode) | 116 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| _stakerList | address[] | 117 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| _stakerMap | mapping(address => struct IRollupCore.Staker) | 118 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| _withdrawableFunds | mapping(address => uint256) | 119 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| totalWithdrawableFunds | uint256 | 120 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| rollupDeploymentBlock | uint256 | 121 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | +| validatorWhitelistDisabled | bool | 122 | 0 | 1 | src/rollup/RollupCore.sol:RollupCore | +| anyTrustFastConfirmer | address | 122 | 1 | 20 | src/rollup/RollupCore.sol:RollupCore | +| _assertionCreatedAtArbSysBlock | mapping(bytes32 => uint256) | 123 | 0 | 32 | src/rollup/RollupCore.sol:RollupCore | diff --git a/contracts/test/storage/RollupCore.dot b/contracts/test/storage/RollupCore.dot deleted file mode 100644 index 36bd84ff6..000000000 --- a/contracts/test/storage/RollupCore.dot +++ /dev/null @@ -1,24 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -6 [label="RollupCore \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { uint256: chainId (32) } | { unallocated (24) | uint64: confirmPeriodBlocks (8) } | { uint256: baseStake (32) } | { bytes32: wasmModuleRoot (32) } | { unallocated (12) | IEdgeChallengeManager: challengeManager (20) } | { unallocated (12) | IInbox: inbox (20) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (12) | IOutbox: outbox (20) } | { unallocated (12) | IRollupEventInbox: rollupEventInbox (20) } | { unallocated (12) | address: validatorUtils (20) } | { unallocated (12) | address: validatorWalletCreator (20) } | { unallocated (12) | address: loserStakeEscrow (20) } | { unallocated (12) | address: stakeToken (20) } | { uint256: minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): isValidator (32) } | { bytes32: _latestConfirmed (32) } | { <127> mapping\(bytes32=\>AssertionNode\): _assertions (32) } | { <129> address[]: _stakerList (32) } | { <134> mapping\(address=\>Staker\): _stakerMap (32) } | { mapping\(address=\>uint256\): _withdrawableFunds (32) } | { uint256: totalWithdrawableFunds (32) } | { uint256: rollupDeploymentBlock (32) } | { unallocated (11) | address: anyTrustFastConfirmer (20) | bool: validatorWhitelistDisabled (1) }}}"] - -1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -3 [label="AssertionNode \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { unallocated (6) | AssertionStatus: status (1) | bool: isFirstChild (1) | uint64: createdAtBlock (8) | uint64: secondChildBlock (8) | uint64: firstChildBlock (8) } | { bytes32: configHash (32) }}}"] - -4 [label="address[]: _stakerList \<\\>\n0xc8bf80e544b04815bb0dca52fb73385e1603944137ae5beee74affc86be0590e | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] - -5 [label="Staker \<\\>\n | {{ slot| 0 | 1 | 2 } | { type: variable (bytes) | { uint256: amountStaked (32) } | { bytes32: latestStakedAssertion (32) } | { unallocated (23) | bool: isStaked (1) | uint64: index (8) }}}"] - - 6:53 -> 1 - 6:104 -> 2 - 6:127 -> 3 - 6:129 -> 4 - 6:134 -> 5 -} \ No newline at end of file diff --git a/contracts/test/storage/RollupUserLogic b/contracts/test/storage/RollupUserLogic new file mode 100644 index 000000000..5184ddff0 --- /dev/null +++ b/contracts/test/storage/RollupUserLogic @@ -0,0 +1,32 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------|-----------------------------------------------|------|--------|-------|------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _initializing | bool | 0 | 1 | 1 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| __gap | uint256[50] | 1 | 0 | 1600 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _paused | bool | 51 | 0 | 1 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| __gap | uint256[49] | 52 | 0 | 1568 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| chainId | uint256 | 101 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| confirmPeriodBlocks | uint64 | 102 | 0 | 8 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| baseStake | uint256 | 103 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| wasmModuleRoot | bytes32 | 104 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| challengeManager | contract IEdgeChallengeManager | 105 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| challengeGracePeriodBlocks | uint64 | 105 | 20 | 8 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| inbox | contract IInboxBase | 106 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| bridge | contract IBridge | 107 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| outbox | contract IOutbox | 108 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| rollupEventInbox | contract IRollupEventInbox | 109 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| validatorWalletCreator | address | 110 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| loserStakeEscrow | address | 111 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| stakeToken | address | 112 | 0 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| minimumAssertionPeriod | uint256 | 113 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| isValidator | mapping(address => bool) | 114 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _latestConfirmed | bytes32 | 115 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _assertions | mapping(bytes32 => struct AssertionNode) | 116 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _stakerList | address[] | 117 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _stakerMap | mapping(address => struct IRollupCore.Staker) | 118 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _withdrawableFunds | mapping(address => uint256) | 119 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| totalWithdrawableFunds | uint256 | 120 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| rollupDeploymentBlock | uint256 | 121 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| validatorWhitelistDisabled | bool | 122 | 0 | 1 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| anyTrustFastConfirmer | address | 122 | 1 | 20 | src/rollup/RollupUserLogic.sol:RollupUserLogic | +| _assertionCreatedAtArbSysBlock | mapping(bytes32 => uint256) | 123 | 0 | 32 | src/rollup/RollupUserLogic.sol:RollupUserLogic | diff --git a/contracts/test/storage/RollupUserLogic.dot b/contracts/test/storage/RollupUserLogic.dot deleted file mode 100644 index dab64b352..000000000 --- a/contracts/test/storage/RollupUserLogic.dot +++ /dev/null @@ -1,24 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -6 [label="RollupUserLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | uint8: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { uint256: RollupCore.chainId (32) } | { unallocated (24) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IEdgeChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | IInbox: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { bytes32: RollupCore._latestConfirmed (32) } | { <127> mapping\(bytes32=\>AssertionNode\): RollupCore._assertions (32) } | { <129> address[]: RollupCore._stakerList (32) } | { <134> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (11) | address: RollupCore.anyTrustFastConfirmer (20) | bool: RollupCore.validatorWhitelistDisabled (1) }}}"] - -1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - -3 [label="AssertionNode \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { unallocated (6) | AssertionStatus: status (1) | bool: isFirstChild (1) | uint64: createdAtBlock (8) | uint64: secondChildBlock (8) | uint64: firstChildBlock (8) } | { bytes32: configHash (32) }}}"] - -4 [label="address[]: _stakerList \<\\>\n0xc8bf80e544b04815bb0dca52fb73385e1603944137ae5beee74affc86be0590e | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] - -5 [label="Staker \<\\>\n | {{ slot| 0 | 1 | 2 } | { type: variable (bytes) | { uint256: amountStaked (32) } | { bytes32: latestStakedAssertion (32) } | { unallocated (23) | bool: isStaked (1) | uint64: index (8) }}}"] - - 6:53 -> 1 - 6:104 -> 2 - 6:127 -> 3 - 6:129 -> 4 - 6:134 -> 5 -} \ No newline at end of file diff --git a/contracts/test/storage/SequencerInbox b/contracts/test/storage/SequencerInbox new file mode 100644 index 000000000..c53e775e3 --- /dev/null +++ b/contracts/test/storage/SequencerInbox @@ -0,0 +1,14 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------------------|----------------------------------------------------------|------|--------|-------|----------------------------------------------| +| totalDelayedMessagesRead | uint256 | 0 | 0 | 32 | src/bridge/SequencerInbox.sol:SequencerInbox | +| bridge | contract IBridge | 1 | 0 | 20 | src/bridge/SequencerInbox.sol:SequencerInbox | +| rollup | contract IOwnable | 2 | 0 | 20 | src/bridge/SequencerInbox.sol:SequencerInbox | +| isBatchPoster | mapping(address => bool) | 3 | 0 | 32 | src/bridge/SequencerInbox.sol:SequencerInbox | +| __LEGACY_MAX_TIME_VARIATION | struct ISequencerInbox.MaxTimeVariation | 4 | 0 | 128 | src/bridge/SequencerInbox.sol:SequencerInbox | +| dasKeySetInfo | mapping(bytes32 => struct ISequencerInbox.DasKeySetInfo) | 8 | 0 | 32 | src/bridge/SequencerInbox.sol:SequencerInbox | +| isSequencer | mapping(address => bool) | 9 | 0 | 32 | src/bridge/SequencerInbox.sol:SequencerInbox | +| delayBlocks | uint64 | 10 | 0 | 8 | src/bridge/SequencerInbox.sol:SequencerInbox | +| futureBlocks | uint64 | 10 | 8 | 8 | src/bridge/SequencerInbox.sol:SequencerInbox | +| delaySeconds | uint64 | 10 | 16 | 8 | src/bridge/SequencerInbox.sol:SequencerInbox | +| futureSeconds | uint64 | 10 | 24 | 8 | src/bridge/SequencerInbox.sol:SequencerInbox | +| batchPosterManager | address | 11 | 0 | 20 | src/bridge/SequencerInbox.sol:SequencerInbox | diff --git a/contracts/test/storage/SequencerInbox.dot b/contracts/test/storage/SequencerInbox.dot deleted file mode 100644 index f9ea05abe..000000000 --- a/contracts/test/storage/SequencerInbox.dot +++ /dev/null @@ -1,15 +0,0 @@ - -digraph StorageDiagram { -rankdir=LR -color=black -arrowhead=open -node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -3 [label="SequencerInbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 | 8 | 9 } | { type: \.variable (bytes) | { uint256: totalDelayedMessagesRead (32) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (12) | IOwnable: rollup (20) } | { mapping\(address=\>bool\): isBatchPoster (32) } | { <9> ISequencerInbox.MaxTimeVariation: maxTimeVariation (128) } | { <12> mapping\(bytes32=\>DasKeySetInfo\): dasKeySetInfo (32) } | { mapping\(address=\>bool\): isSequencer (32) }}}"] - -1 [label="ISequencerInbox.MaxTimeVariation \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint256: MaxTimeVariation.delayBlocks (32) } | { uint256: MaxTimeVariation.futureBlocks (32) } | { uint256: MaxTimeVariation.delaySeconds (32) } | { uint256: MaxTimeVariation.futureSeconds (32) }}}"] - -2 [label="DasKeySetInfo \<\\>\n | {{ slot| 0 } | { type: variable (bytes) | { unallocated (23) | uint64: creationBlock (8) | bool: isValidKeyset (1) }}}"] - - 3:9 -> 1 - 3:12 -> 2 -} \ No newline at end of file diff --git a/contracts/test/storage/test.bash b/contracts/test/storage/test.bash index 623bc92b5..7cca014b6 100755 --- a/contracts/test/storage/test.bash +++ b/contracts/test/storage/test.bash @@ -1,10 +1,11 @@ #!/bin/bash -for CONTRACTNAME in Bridge Inbox Outbox RollupCore RollupUserLogic RollupAdminLogic SequencerInbox EdgeChallengeManager +output_dir="./test/storage" +for CONTRACTNAME in Bridge Inbox Outbox RollupCore RollupUserLogic RollupAdminLogic SequencerInbox EdgeChallengeManager ERC20Bridge ERC20Inbox ERC20Outbox do echo "Checking storage change of $CONTRACTNAME" - [ -f "./test/storage/$CONTRACTNAME.dot" ] && mv "./test/storage/$CONTRACTNAME.dot" "./test/storage/$CONTRACTNAME-old.dot" - yarn sol2uml storage ./ -c "$CONTRACTNAME" -o "./test/storage/$CONTRACTNAME.dot" -f dot - diff "./test/storage/$CONTRACTNAME-old.dot" "./test/storage/$CONTRACTNAME.dot" + [ -f "$output_dir/$CONTRACTNAME" ] && mv "$output_dir/$CONTRACTNAME" "$output_dir/$CONTRACTNAME-old" + forge inspect "$CONTRACTNAME" --pretty storage > "$output_dir/$CONTRACTNAME" + diff "$output_dir/$CONTRACTNAME-old" "$output_dir/$CONTRACTNAME" if [[ $? != "0" ]] then CHANGED=1 diff --git a/contracts/yarn.lock b/contracts/yarn.lock index 54fdf873c..4dd8aaf75 100644 --- a/contracts/yarn.lock +++ b/contracts/yarn.lock @@ -2,10 +2,15 @@ # yarn lockfile v1 -"@aduh95/viz.js@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@aduh95/viz.js/-/viz.js-3.7.0.tgz#a20d86c5fc8f6abebdc39b96a4326e10375d77c0" - integrity sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng== +"@arbitrum/sdk@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.3.tgz#75236043717a450b569faaa087687c51d525b0c3" + integrity sha512-Dn1or7/Guc3dItuiiWaoYQ37aCDwiWTZGPIrg4yBJW27BgiDGbo0mjPDAhKTh4p5NDOWyE8bZ0vZai86COZIUA== + dependencies: + "@ethersproject/address" "^5.0.8" + "@ethersproject/bignumber" "^5.1.1" + "@ethersproject/bytes" "^5.0.8" + ethers "^5.1.0" "@babel/code-frame@^7.0.0": version "7.16.7" @@ -28,6 +33,42 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -129,98 +170,19 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.2.tgz#63d1e26d0b7a7a3684fce920de6ebabec1e5b674" - integrity sha512-mOqYWwMlAZpYUEOEqt7EfMFuVL2eyLqWWIzcf4odn6QgXY8jBI2NhVuJncrMCKeMZrsJAe7/auaRRB6YcdH+Qw== - dependencies: - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/tx" "^3.5.1" - ethereumjs-util "^7.1.4" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.0", "@ethereumjs/blockchain@^5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.2.tgz#1848abd9dc1ee56acf8cec4c84304d7f4667d027" - integrity sha512-Jz26iJmmsQtngerW6r5BDFaew/f2mObLrRZo3rskLOx1lmtMZ8+TX/vJexmivrnWgmAsTdNWhlKUYY4thPhPig== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.3.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" - integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.3" - -"@ethereumjs/common@^2.4.0": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df" - integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" - -"@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.3": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" - integrity sha512-mQwPucDL7FDYIg9XQ8DL31CnIYZwGhU5hyOO5E+BMmT71G0+RHvIT5rIkLBirJEKxV6+Rcf9aEIY0kXInxUWpQ== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" - -"@ethereumjs/tx@^3.2.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" - integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== - dependencies: - "@ethereumjs/common" "^2.6.0" - ethereumjs-util "^7.1.3" - -"@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.1.tgz#8d941b83a602b4a89949c879615f7ea9a90e6671" - integrity sha512-xzDrTiu4sqZXUcaBxJ4n4W5FrppwxLxZB4ZDGVLtxSQR4lVuOnFR6RcUHdg1mpUhAPVrmnzLJpxaeXnPxIyhWA== - dependencies: - "@ethereumjs/common" "^2.6.3" - ethereumjs-util "^7.1.4" - -"@ethereumjs/vm@^5.6.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.8.0.tgz#c9055f96afc13dd7b72893b57fa20027effea6fe" - integrity sha512-mn2G2SX79QY4ckVvZUfxlNUpzwT2AEIkvgJI8aHoQaNYEHhH8rmdVDIaVVgz6//PjK52BZsK23afz+WvSR0Qqw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/tx" "^3.5.1" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.4" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" @@ -237,22 +199,7 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" -"@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/abi@5.6.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0": +"@ethersproject/abi@5.6.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3" integrity sha512-AhVByTwdXCc2YQ20v300w6KVHle9g2OFc28ZAFCPnJyEpkv1xKXjZcSTgWOlv1i+0dqlgF8RCF2Rn2KC1t+1Vg== @@ -282,7 +229,7 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -323,7 +270,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0": +"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ== @@ -345,7 +292,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.6.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.6.0": +"@ethersproject/address@5.6.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== @@ -356,7 +303,7 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -367,17 +314,6 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/address@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" - integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/rlp" "^5.5.0" - "@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" @@ -408,7 +344,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.6.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.6.0": +"@ethersproject/bignumber@5.6.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26" integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA== @@ -417,7 +353,7 @@ "@ethersproject/logger" "^5.6.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -426,37 +362,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bignumber@^5.0.7": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" - integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - bn.js "^4.11.9" - -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.6.0": +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.6.0": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/bytes@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" - integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== - dependencies: - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/constants@5.6.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.6.0": +"@ethersproject/constants@5.6.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== @@ -470,14 +390,7 @@ dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/constants@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" - integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== - dependencies: - "@ethersproject/bignumber" "^5.5.0" - -"@ethersproject/contracts@5.6.0", "@ethersproject/contracts@^5.4.1": +"@ethersproject/contracts@5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067" integrity sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw== @@ -493,7 +406,7 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/transactions" "^5.6.0" -"@ethersproject/contracts@5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -538,20 +451,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hash@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" - integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== - dependencies: - "@ethersproject/abstract-signer" "^5.5.0" - "@ethersproject/address" "^5.5.0" - "@ethersproject/bignumber" "^5.5.0" - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/keccak256" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/properties" "^5.5.0" - "@ethersproject/strings" "^5.5.0" - "@ethersproject/hdnode@5.6.0", "@ethersproject/hdnode@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.0.tgz#9dcbe8d629bbbcf144f2cae476337fe92d320998" @@ -626,7 +525,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.6.0": +"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== @@ -642,15 +541,7 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@^5.0.3": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" - integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.6.0": +"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== @@ -660,11 +551,6 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/logger@^5.0.5": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" - integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== - "@ethersproject/networks@5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" @@ -679,7 +565,14 @@ dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/networks@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== @@ -702,7 +595,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.6.0": +"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== @@ -716,14 +609,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/properties@^5.0.3": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" - integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== - dependencies: - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/providers@5.6.2", "@ethersproject/providers@^5.4.4": +"@ethersproject/providers@5.6.2": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.2.tgz#b9807b1c8c6f59fa2ee4b3cf6519724d07a9f422" integrity sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg== @@ -773,10 +659,10 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -815,7 +701,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.6.0": +"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== @@ -873,7 +759,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.6.0", "@ethersproject/solidity@^5.4.0": +"@ethersproject/solidity@5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww== @@ -885,7 +771,7 @@ "@ethersproject/sha2" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/solidity@5.7.0": +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -897,7 +783,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.6.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.6.0": +"@ethersproject/strings@5.6.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== @@ -915,16 +801,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/strings@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" - integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.0": +"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== @@ -972,7 +849,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.6.0", "@ethersproject/wallet@^5.4.0": +"@ethersproject/wallet@5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.0.tgz#33d11a806d783864208f348709a5a3badac8e22a" integrity sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg== @@ -993,7 +870,7 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/wordlists" "^5.6.0" -"@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -1025,7 +902,18 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" -"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": +"@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/web@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== @@ -1082,6 +970,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@hyperapp/router@^0.7.1": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@hyperapp/router/-/router-0.7.2.tgz#6a5edbeceb65bd545d7c55fd59153d7353001c0e" + integrity sha512-RXZhJzx0j1UQK/Ia9j7TQlkH1N6qOvJTTEJCIS9NrM1YJabmXGoI0owkvKxieSgXi6EKQ+wUWhXHj9s+Sy9EPA== + "@metamask/eth-sig-util@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6" @@ -1093,11 +986,28 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" + "@noble/hashes@1.0.0", "@noble/hashes@~1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": version "1.5.5" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" @@ -1124,6 +1034,215 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@nomiclabs/hardhat-docker@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz#ae964be17951275a55859ff7358e9e7c77448846" + integrity sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng== + dependencies: + dockerode "^2.5.8" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + "@nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers@^0.3.0-beta.13": version "0.3.0-beta.13" resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" @@ -1153,6 +1272,14 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" +"@offchainlabs/upgrade-executor@1.1.0-beta.0": + version "1.1.0-beta.0" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz#c4b1375176546a18aaef01a43956abfb58250e0a" + integrity sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw== + dependencies: + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + "@openzeppelin/contracts-upgradeable@4.7.3": version "4.7.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" @@ -1205,6 +1332,11 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== +"@scure/base@~1.1.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== + "@scure/bip32@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" @@ -1214,6 +1346,15 @@ "@noble/secp256k1" "~1.5.2" "@scure/base" "~1.0.0" +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + "@scure/bip39@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" @@ -1222,6 +1363,14 @@ "@noble/hashes" "~1.0.0" "@scure/base" "~1.0.0" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1302,10 +1451,10 @@ dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== +"@solidity-parser/parser@^0.16.0": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -1316,28 +1465,17 @@ dependencies: defer-to-connect "^1.0.1" -"@truffle/error@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" - integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== - -"@truffle/interface-adapter@^0.5.8": - version "0.5.8" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.8.tgz#76cfd34374d85849e1164de1a3d5a3dce0dc5d01" - integrity sha512-vvy3xpq36oLgjjy8KE9l2Jabg3WcGPOt18tIyMfTQX9MFnbHoQA2Ne2i8xsd4p6KfxIqSjAB53Q9/nScAqY0UQ== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.5.3" - -"@truffle/provider@^0.2.24": - version "0.2.42" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.42.tgz#9da6a144b3c9188cdb587451dd7bd907b4c7164b" - integrity sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg== +"@tovarishfin/hardhat-yul@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@tovarishfin/hardhat-yul/-/hardhat-yul-3.0.5.tgz#84d896edfa95249073e30b0d622733e70318fc2e" + integrity sha512-DR5nqqQiv7f3bN885Kr3Z+J3LgCmYMPexIRGeS4bqPkC73Qt8nSET1NzohdJDw0HtquOPqraqDez050V0YGrfw== dependencies: - "@truffle/error" "^0.0.14" - "@truffle/interface-adapter" "^0.5.8" - web3 "1.5.3" + "@nomiclabs/hardhat-docker" "^2.0.0" + fs-extra "^10.1.0" + glob "^8.0.3" + solc "^0.8.17" + solpp "^0.11.5" + yulp "^0.2.3" "@tsconfig/node10@^1.0.7": version "1.0.8" @@ -1382,11 +1520,6 @@ fs-extra "^9.1.0" lodash "^4.17.15" -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== - "@types/bn.js@*", "@types/bn.js@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" @@ -1438,20 +1571,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" @@ -1524,6 +1643,14 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/resolve@^0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -1571,13 +1698,6 @@ "@types/bn.js" "*" "@types/underscore" "*" -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin-tslint@^5.27.1": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.37.0.tgz#bb678cac00843db3ffbb9aca3fd83c9fc4cbf7ca" @@ -1667,16 +1787,19 @@ "@typescript-eslint/types" "5.37.0" eslint-visitor-keys "^3.3.0" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +JSONStream@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + integrity sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1687,12 +1810,18 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== dependencies: - event-target-shim "^5.0.0" + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" abstract-leveldown@3.0.0: version "3.0.0" @@ -1715,17 +1844,6 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: dependencies: xtend "~4.0.0" -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - abstract-leveldown@~2.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" @@ -1733,17 +1851,6 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1903,11 +2010,21 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== +antlr4@~4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.8.0.tgz#f938ec171be7fc2855cd3a533e87647185b32b6a" + integrity sha512-en/MxQ4OkPgGJQ3wD/muzj1uDnFSzdFIhc2+c6bHZokWkuBb6RRvFjpWhPxWLbgQvaEzldJZ0GSQpfSAaE3hqg== + antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -2044,7 +2161,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: +async-eventemitter@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -2090,11 +2207,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2105,6 +2217,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@^0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -2112,14 +2232,6 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2688,6 +2800,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + bignumber.js@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" @@ -2703,6 +2820,13 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bindings@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -2714,14 +2838,13 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" + readable-stream "^2.3.5" + safe-buffer "^5.1.1" blakejs@^1.1.0: version "1.2.1" @@ -2733,17 +2856,25 @@ bluebird@^3.5.0, bluebird@^3.5.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn-str-256@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/bn-str-256/-/bn-str-256-1.9.1.tgz#898cebee70a3edc3968f97b4cebbc4771025aa82" + integrity sha512-u3muv3WO5sYv9nUQsPnDGLg731yNt/MOlKPK5pmBVqClcl7tY97tyfKxw8ed44HVrpi+7dkgJgQpbXP47a3GoQ== + dependencies: + decimal.js-light "^2.5.0" + lodash "^4.17.11" + bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== @@ -2787,11 +2918,6 @@ body-parser@^1.16.0: type-is "~1.6.18" unpipe "1.0.0" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2835,6 +2961,16 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -2918,10 +3054,23 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0: version "1.1.2" @@ -2953,6 +3102,14 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bufferutil@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" @@ -2965,6 +3122,13 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -3058,6 +3222,11 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -3073,11 +3242,21 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + cbor@^5.0.2: version "5.2.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" @@ -3149,31 +3328,6 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.11: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - chokidar@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" @@ -3204,7 +3358,7 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.0.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -3248,6 +3402,17 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classic-level@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -3271,9 +3436,9 @@ cli-table3@^0.5.0: colors "^1.1.2" cli-table3@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + version "0.6.4" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0" + integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw== dependencies: string-width "^4.2.0" optionalDependencies: @@ -3293,6 +3458,15 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3416,15 +3590,15 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.12.1: +commander@^2.12.1, commander@^2.19.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^9.2.0, commander@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" - integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== component-emitter@^1.2.1: version "1.3.0" @@ -3436,7 +3610,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: +concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3474,30 +3648,6 @@ convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" -convert-svg-core@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/convert-svg-core/-/convert-svg-core-0.6.4.tgz#a38ad47f32acbb229a4fa9eec9771308c2fe1443" - integrity sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w== - dependencies: - chalk "^4.1.2" - cheerio "^1.0.0-rc.11" - commander "^9.2.0" - file-url "^3.0.0" - get-stdin "^8.0.0" - glob "^8.0.1" - lodash.omit "^4.5.0" - lodash.pick "^4.4.0" - pollock "^0.2.0" - puppeteer "^13.7.0" - tmp "^0.2.1" - -convert-svg-to-png@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz#de0f5d46042639cdfe4020b492b8b0a3c0743b4e" - integrity sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g== - dependencies: - convert-svg-core "^0.6.4" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -3509,9 +3659,9 @@ cookie@0.4.2, cookie@^0.4.1: integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== copy-descriptor@^0.1.0: version "0.1.1" @@ -3597,13 +3747,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - cross-fetch@^2.1.0, cross-fetch@^2.1.1: version "2.2.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" @@ -3612,7 +3755,7 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "^2.6.7" whatwg-fetch "^2.0.4" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3654,22 +3797,6 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -3711,20 +3838,27 @@ debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, de dependencies: ms "2.1.2" -debug@4.3.3, debug@^4.0.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: - ms "2.1.2" + ms "2.0.0" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@^4.0.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3735,6 +3869,11 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +decimal.js-light@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -3796,14 +3935,6 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - define-properties@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -3894,11 +4025,6 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" -devtools-protocol@0.0.981744: - version "0.0.981744" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.981744.tgz#9960da0370284577d46c28979a0b32651022bacf" - integrity sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg== - diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3923,6 +4049,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3930,6 +4063,30 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== + +docker-modem@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" + integrity sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw== + dependencies: + JSONStream "1.3.2" + debug "^3.2.6" + readable-stream "~1.0.26-4" + split-ca "^1.0.0" + +dockerode@^2.5.8: + version "2.5.8" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc" + integrity sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw== + dependencies: + concat-stream "~1.6.2" + docker-modem "^1.0.8" + tar-fs "~1.16.3" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -3937,41 +4094,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - dotenv@^16.3.1: version "16.3.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" @@ -4056,16 +4183,6 @@ encoding-down@5.0.4, encoding-down@~5.0.0: level-errors "^2.0.0" xtend "^4.0.1" -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -4073,7 +4190,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -4087,11 +4204,6 @@ enquirer@^2.3.0, enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4111,32 +4223,6 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.5: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - es-abstract@^1.19.1: version "1.19.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" @@ -4478,7 +4564,7 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.24: +eth-gas-reporter@^0.2.25: version "0.2.25" resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== @@ -4620,7 +4706,7 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4651,6 +4737,16 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.0.1" "@scure/bip39" "1.0.0" +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + ethereum-waffle@^3.4.0: version "3.4.4" resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz#1378b72040697857b7f5e8f473ca8f97a37b5840" @@ -4804,18 +4900,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10: - version "7.1.3" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" - integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4: +ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0: version "7.1.4" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== @@ -4879,7 +4964,24 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@^4.0.32, ethers@^4.0.40: +ethers-contracts@*: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethers-contracts/-/ethers-contracts-2.2.1.tgz#e2bf5dd5e157313ba454b50c646c8472fcd0a8b3" + integrity sha512-3fT2gyhoDhqp/bgaBOenmyu74dDGGO9adkBaOtEuNmFq0Yf4nwynYWJv++rDxe6Z5Dl5cBF304GhnJUVFVlfCA== + dependencies: + ethers-utils "^2.1.0" + +ethers-utils@^2.1.0: + version "2.1.11" + resolved "https://registry.yarnpkg.com/ethers-utils/-/ethers-utils-2.1.11.tgz#b27535ca3226118be300211c39c896b1e5e21641" + integrity sha512-BfkGStBmmLjhTldmp5lifiwUeDjx/yowoWfmUnnvPNsix5PFE8IXQdY5VT/Qo1SXMgxzCe8m0Z8ysUw6Q9OmAw== + dependencies: + bn.js "^4.4.0" + hash.js "^1.0.0" + js-sha3 "0.5.7" + xmlhttprequest "1.8.0" + +ethers@^4.0.39, ethers@^4.0.40: version "4.0.49" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== @@ -4930,6 +5032,42 @@ ethers@^5.0.1, ethers@^5.0.2: "@ethersproject/web" "5.6.0" "@ethersproject/wordlists" "5.6.0" +ethers@^5.1.0, ethers@^5.5.3, ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + ethers@^5.5.2: version "5.6.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.4.tgz#23629e9a7d4bc5802dfb53d4da420d738744b53c" @@ -4959,48 +5097,68 @@ ethers@^5.5.2: "@ethersproject/sha2" "5.6.0" "@ethersproject/signing-key" "5.6.0" "@ethersproject/solidity" "5.6.0" - "@ethersproject/strings" "5.6.0" - "@ethersproject/transactions" "5.6.0" - "@ethersproject/units" "5.6.0" - "@ethersproject/wallet" "5.6.0" - "@ethersproject/web" "5.6.0" - "@ethersproject/wordlists" "5.6.0" - -ethers@^5.6.9: - version "5.7.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" - integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.0" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.0" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.0" - "@ethersproject/wordlists" "5.7.0" + "@ethersproject/strings" "5.6.0" + "@ethersproject/transactions" "5.6.0" + "@ethersproject/units" "5.6.0" + "@ethersproject/wallet" "5.6.0" + "@ethersproject/web" "5.6.0" + "@ethersproject/wordlists" "5.6.0" + +ethjs-extras@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ethjs-extras/-/ethjs-extras-0.0.7.tgz#9fb5f7f55952456b6a0836cdeda8bd376981deee" + integrity sha512-1Ml8B6AUVsY+6o1GI861zRiP1KuHnYVu7T7cRVpAAqEqukQsTuTXBbOX1VYPIe5e68+aoqn8fMTGG4FnrYZA+Q== + dependencies: + ethers-contracts "*" + ethjs-provider-http "^0.1.6" + ethjs-provider-signer "^0.1.4" + ethjs-rpc "^0.1.8" + js-sha3 "^0.7.0" + solidity-to-abi "^1.0.4" + +ethjs-format@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/ethjs-format/-/ethjs-format-0.1.8.tgz#925ecdd965ea72a2a2daf2a122e5bf80b5ad522a" + integrity sha512-G9S+H5+XaHYLA54YVB2RxaBBVyFHtMTlnRTsIUp2+rUbrQ0kFRP6hDUz+OzRQY8tYz/A55Klgg9rG49by5rSNw== + dependencies: + bn.js "4.11.6" + ethjs-schema "0.1.4" + ethjs-util "0.1.3" + is-hex-prefixed "1.0.0" + number-to-bn "1.7.0" + strip-hex-prefix "1.0.0" + +ethjs-provider-http@0.1.6, ethjs-provider-http@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-provider-http/-/ethjs-provider-http-0.1.6.tgz#1ec5d9b4be257ef1d56a500b22a741985e889420" + integrity sha512-y054N5xyyx43KTQjgdkAEj2uEa/flwpENU5ldx/rmA0Q2yy0vyB2lsOIn/7V0uADMc4iRSHZfnFc9b9YS5Qkdw== + dependencies: + xhr2 "0.1.3" + +ethjs-provider-signer@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ethjs-provider-signer/-/ethjs-provider-signer-0.1.4.tgz#6bd5cb38a8d5b0ddf46ac1e23a60eea1716171ae" + integrity sha512-ExC8h7HnXwiHBEcMtmtpKr7OT/88+GW3Dphw9D36OM3petIr3dpPDCDB1CkDBcy5s4E7Z/irHvDydAA7/MJnug== + dependencies: + ethjs-provider-http "0.1.6" + ethjs-rpc "0.1.2" + +ethjs-rpc@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ethjs-rpc/-/ethjs-rpc-0.1.2.tgz#39a3456b51c59aeeafb5ba556589a59f2da88d26" + integrity sha512-vZ0VlCaafVn1qY6eWB7O/rOLG75wbHLpvjCYnH/OuGCVk0kytdbGi6nm3UyocHTaJLj5g0dM2fLAdwf18G6DYQ== + dependencies: + ethjs-format "0.1.8" + +ethjs-rpc@^0.1.8: + version "0.1.9" + resolved "https://registry.yarnpkg.com/ethjs-rpc/-/ethjs-rpc-0.1.9.tgz#389dcd61be52e72bc47111a75805f8e45882faea" + integrity sha512-KJqT7cgTeCJQ2RY1AlVmTZVnKIUXMPg+niPN5VJKwRSzpjgfr3LTVHlGbkRCqZtOMDi0ogB2vHZaRQiZBXZTUg== + +ethjs-schema@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ethjs-schema/-/ethjs-schema-0.1.4.tgz#0323a16333b1ace9a8f1d696a6ee63448fdd455f" + integrity sha512-fB08XJP+G00Qtv37Y8WCHn4LtQeCdmG7icFAl63L0nzT05MvCfey1E1SwjCOmDG6PGDZ9J2e3u4a+79Nb4VOdg== ethjs-unit@0.1.6: version "0.1.6" @@ -5010,6 +5168,14 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" +ethjs-util@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.3.tgz#dfd5ea4a400dc5e421a889caf47e081ada78bb55" + integrity sha512-QqpX2dsEG2geSMG9dTMJVhfP1kGRdGMNjiHPiTjkju+X5cB0PQIwUzRr5k21pFkgF5zuLccqe83p7Gh5fFM5tQ== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" @@ -5018,11 +5184,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -5041,6 +5202,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -5140,17 +5314,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -5217,13 +5380,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" @@ -5252,10 +5408,10 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-url@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77" - integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA== +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^4.0.0: version "4.0.0" @@ -5332,14 +5488,6 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - find-yarn-workspace-root@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" @@ -5406,16 +5554,18 @@ fmix@^0.1.0: dependencies: imul "^1.0.0" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.12.1, follow-redirects@^1.14.0: version "1.14.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== -follow-redirects@^1.14.9: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -5428,11 +5578,6 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5526,6 +5671,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5666,17 +5820,12 @@ get-port@^3.1.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.1.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -5791,10 +5940,10 @@ glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5955,60 +6104,75 @@ hardhat-contract-sizer@^2.10.0: cli-table3 "^0.6.0" strip-ansi "^6.0.0" -hardhat-deploy@^0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.4.tgz#39b06d3b0ad25195071cc1f2f71649b1f9f030d0" - integrity sha512-BNMwWqaxrwb8XKrYzmCwnUzOSKzicUBk+fwd28doUNoAGFFh8kpoypkcHMzKDVdLhnamAardcfqJet73zrZoTA== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.1" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.1" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/contracts" "^5.4.1" - "@ethersproject/providers" "^5.4.4" - "@ethersproject/solidity" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wallet" "^5.4.0" +hardhat-deploy@^0.11.37: + version "0.11.37" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz#6a771b859c82ae25292321a6d510d7c0eda09d2b" + integrity sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" "@types/qs" "^6.9.7" axios "^0.21.1" chalk "^4.1.2" chokidar "^3.5.2" debug "^4.3.2" enquirer "^2.3.6" + ethers "^5.5.3" form-data "^4.0.0" fs-extra "^10.0.0" match-all "^1.2.6" murmur-128 "^0.2.1" qs "^6.9.4" + zksync-web3 "^0.14.3" -hardhat-gas-reporter@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" - integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== +hardhat-gas-reporter@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== dependencies: array-uniq "1.0.3" - eth-gas-reporter "^0.2.24" + eth-gas-reporter "^0.2.25" sha1 "^1.1.1" -hardhat@^2.6.6: - version "2.9.3" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.3.tgz#4759dc3c468c7d15f34334ca1be7d59b04e47b1e" - integrity sha512-7Vw99RbYbMZ15UzegOR/nqIYIqddZXvLwJGaX5sX4G5bydILnbjmDU6g3jMKJSiArEixS3vHAEaOs5CW1JQ3hg== +hardhat-ignore-warnings@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/hardhat-ignore-warnings/-/hardhat-ignore-warnings-0.2.9.tgz#3d323a9016cbf436e5e7a796dc18568573f974da" + integrity sha512-q1oj6/ixiAx+lgIyGLBajVCSC7qUtAoK7LS9Nr8UVHYo8Iuh5naBiVGo4RDJ6wxbDGYBkeSukUGZrMqzC2DWwA== + dependencies: + minimatch "^5.1.0" + node-interval-tree "^2.0.1" + solidity-comments "^0.0.2" + +hardhat@^2.17.2: + version "2.17.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.17.2.tgz#250a8c8e76029e9bfbfb9b9abee68d5b350b5d4a" + integrity sha512-oUv40jBeHw0dKpbyQ+iH9cmNMziweLoTW3MnkNxJ2Gc0KGLrQR/1n4vV4xY60zn2LdmRgnwPqy3CgtY0mfwIIA== dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/blockchain" "^5.5.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" - "@ethereumjs/vm" "^5.6.0" "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" @@ -6018,31 +6182,27 @@ hardhat@^2.6.6: debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" - ethereum-cryptography "^0.1.2" + ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "^7.1.3" + glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + keccak "^3.0.2" lodash "^4.17.11" - merkle-patricia-tree "^4.2.2" mnemonist "^0.38.0" - mocha "^9.2.0" + mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - slash "^3.0.0" solc "0.7.3" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" tsort "0.0.1" - undici "^4.14.1" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" @@ -6177,6 +6337,11 @@ heap@0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6199,16 +6364,6 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" - http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -6220,9 +6375,9 @@ http-basic@^8.1.1: parse-cache-control "^1.0.1" http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@1.8.1: version "1.8.1" @@ -6267,14 +6422,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -6283,6 +6430,11 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +hyperapp@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/hyperapp/-/hyperapp-1.2.9.tgz#a17ec09634968a5fa5f6b7d649e7a03d9680fcf2" + integrity sha512-bIzi12am7pyQ5nc2qnQpN6GWonjdJp+AghY7j9H9L0vccM1OQ3Cqn13cZlmS9KYm91Nf9fwF4KjvbQekFBxHVw== + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -6304,7 +6456,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6428,6 +6580,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -6494,7 +6651,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@~2.0.3: +is-buffer@^2.0.2, is-buffer@^2.0.5, is-buffer@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== @@ -6623,13 +6780,6 @@ is-function@^1.0.1: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6642,7 +6792,7 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= -is-negative-zero@^2.0.1, is-negative-zero@^2.0.2: +is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -6708,10 +6858,10 @@ is-shared-array-buffer@^1.0.1: dependencies: call-bind "^1.0.2" -is-stream@^1.0.0, is-stream@^1.0.1: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" @@ -6727,17 +6877,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.3, is-typed-array@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" - integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -6758,7 +6897,7 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-weakref@^1.0.1, is-weakref@^1.0.2: +is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -6817,11 +6956,6 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -js-graph-algorithms@^1.0.18: - version "1.0.18" - resolved "https://registry.yarnpkg.com/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz#f96ec87bf194f5c0a31365fa0e1d07b7b962d891" - integrity sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA== - js-sdsl@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" @@ -6837,6 +6971,11 @@ js-sha3@0.8.0, js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sha3@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.7.0.tgz#0a5c57b36f79882573b2d84051f8bb85dd1bd63a" + integrity sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6984,6 +7123,11 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jsonschema@^1.2.4: version "1.4.0" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" @@ -7007,6 +7151,16 @@ keccak@3.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" +keccak@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" + integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== + dependencies: + bindings "^1.2.1" + inherits "^2.0.3" + nan "^2.2.1" + safe-buffer "^5.1.0" + keccak@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" @@ -7016,6 +7170,15 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keccak@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -7061,11 +7224,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -klaw@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-4.0.1.tgz#8dc6f5723f05894e8e931b516a8ff15c2976d368" - integrity sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw== - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -7073,6 +7231,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" @@ -7085,11 +7250,6 @@ level-codec@~7.0.0: resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - level-errors@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" @@ -7139,15 +7299,6 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - level-mem@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" @@ -7156,22 +7307,6 @@ level-mem@^3.0.1: level-packager "~4.0.0" memdown "~3.0.0" -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - level-packager@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" @@ -7203,12 +7338,18 @@ level-sublevel@6.6.4: typewiselite "~1.0.0" xtend "~4.0.0" -level-supports@~1.0.0: +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: - xtend "^4.0.2" + buffer "^6.0.3" + module-error "^1.0.1" level-ws@0.0.0: version "0.0.0" @@ -7227,14 +7368,13 @@ level-ws@^1.0.0: readable-stream "^2.2.8" xtend "^4.0.1" -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" + browser-level "^1.0.1" + classic-level "^1.2.0" levelup@3.1.1, levelup@^3.0.0: version "3.1.1" @@ -7259,17 +7399,6 @@ levelup@^1.2.1: semver "~5.4.1" xtend "~4.0.0" -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7313,13 +7442,6 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -7342,16 +7464,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -7457,6 +7569,13 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7498,6 +7617,15 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" @@ -7510,18 +7638,6 @@ memdown@^1.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - memdown@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" @@ -7534,6 +7650,15 @@ memdown@~3.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7576,23 +7701,16 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7658,6 +7776,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -7687,12 +7810,12 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -7701,10 +7824,10 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" @@ -7736,11 +7859,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -7774,10 +7892,10 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== +mocha@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.2.tgz#8e40d198acf91a52ace122cd7599c9ab857b29e6" + integrity sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA== dependencies: ansi-colors "3.2.3" browser-stdout "1.3.1" @@ -7804,41 +7922,78 @@ mocha@^7.1.1: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^9.2.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== +mocha@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" - debug "4.3.3" + debug "4.3.4" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.2.0" - growl "1.10.5" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "4.2.1" + minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.1" + nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" + workerpool "6.2.1" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + mock-fs@^4.1.0: version "4.14.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +moo@^0.5.0, moo@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -7913,15 +8068,29 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.2.1: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== nanomatch@^1.2.9: version "1.2.13" @@ -7940,11 +8109,26 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +nearley@^2.19.0: + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -7985,7 +8169,14 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -8005,6 +8196,13 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== +node-interval-tree@^2.0.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-2.1.2.tgz#316e380db08d1c0de0a620d551f0327e8397dad8" + integrity sha512-bJ9zMDuNGzVQg1xv0bCPzyEDxHgbrx7/xGj6CDokvizZZmastPsOh0JJLuY8wA5q2SfX1TLNMk7XNV8WxbGxzA== + dependencies: + shallowequal "^1.1.0" + nofilter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" @@ -8037,12 +8235,12 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: - boolbase "^1.0.0" + path-key "^2.0.0" number-is-nan@^1.0.0: version "1.0.1" @@ -8062,10 +8260,10 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" @@ -8076,7 +8274,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: +object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== @@ -8154,13 +8352,6 @@ oboe@2.1.4: dependencies: http-https "^1.0.0" -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= - dependencies: - http-https "^1.0.0" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -8233,6 +8424,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8248,11 +8448,21 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8260,7 +8470,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -8288,13 +8498,6 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -8349,6 +8552,11 @@ parse-cache-control@^1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha1-juqz5U+laSD+Fro493+iGqzC104= +parse-es6-imports@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-es6-imports/-/parse-es6-imports-1.0.1.tgz#fbfea61afcd94435c7f697fc439616c18853771b" + integrity sha512-WheMSatJ69ItiKNFTYYzYIbntAT4DC0+dM+a64bLQi6dxxqI5elYqJK9oCo5AYlDxeTo/bimmdo5kv4IxJy34A== + parse-headers@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" @@ -8369,21 +8577,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== - dependencies: - entities "^4.4.0" - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -8463,7 +8656,7 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.1: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= @@ -8513,11 +8706,6 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: safe-buffer "^5.0.1" sha.js "^2.4.8" -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -8550,18 +8738,6 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pkg-dir@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pollock@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/pollock/-/pollock-0.2.1.tgz#01273ae3542511492d07f1c10fa53f149b37c6ad" - integrity sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg== - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -8646,7 +8822,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@2.0.3, progress@^2.0.0: +progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -8674,11 +8850,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -8754,6 +8925,14 @@ pull-window@^2.1.4: dependencies: looper "^2.0.0" +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -8777,25 +8956,7 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer@^13.7.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-13.7.0.tgz#18e16f83e397cf02f7a0804c67c1603d381cfb0b" - integrity sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA== - dependencies: - cross-fetch "3.1.5" - debug "4.3.4" - devtools-protocol "0.0.981744" - extract-zip "2.0.1" - https-proxy-agent "5.0.1" - pkg-dir "4.2.0" - progress "2.0.3" - proxy-from-env "1.1.0" - rimraf "3.0.2" - tar-fs "2.1.1" - unbzip2-stream "1.4.3" - ws "8.5.0" - -qs@6.10.3, qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: +qs@6.10.3, qs@^6.4.0, qs@^6.9.4: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== @@ -8826,16 +8987,29 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== + ramda@^0.27.1: version "0.27.2" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8916,7 +9090,20 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8925,10 +9112,10 @@ readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: +readable-stream@~1.0.15, readable-stream@~1.0.26-4: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8973,6 +9160,11 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -9217,6 +9409,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.1.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -9224,13 +9421,6 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@^2.2.8, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -9238,6 +9428,13 @@ rimraf@^2.2.8, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -9258,6 +9455,13 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9357,11 +9561,6 @@ seedrandom@3.0.1: resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= - semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" @@ -9494,6 +9693,11 @@ sha1@^1.1.1: charenc ">= 0.0.1" crypt ">= 0.0.1" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9536,7 +9740,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -9618,20 +9822,19 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sol2uml@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/sol2uml/-/sol2uml-2.2.0.tgz#145b1b85cc2c5d466d596f3426aae4dd4dc946f2" - integrity sha512-JMBvn3ZMT/1egoZjheM4Mh9gQudrlVjFZ1VS0gjQ/eluITT08U6V438Jyku28OuXz42aXNbGS80JuRZo0J7pLg== - dependencies: - "@aduh95/viz.js" "^3.7.0" - "@solidity-parser/parser" "^0.14.3" - axios "^0.27.2" - commander "^9.4.0" - convert-svg-to-png "^0.6.4" - debug "^4.3.4" - ethers "^5.6.9" - js-graph-algorithms "^1.0.18" - klaw "^4.0.1" +solc@0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.7.tgz#d84697ac5cc63d9b2139bfb349cec64b64861cdc" + integrity sha512-DaYFzB3AAYjzPtgUl9LenPY2xjI3wG9k8U8T8YE/sXHVIoCirCY5MB6mhcFPgk/VyUtaWZPUCWiYS1E6RSiiqw== + dependencies: + command-exists "^1.2.8" + fs-extra "^0.30.0" + keccak "^1.0.2" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + yargs "^11.0.0" solc@0.7.3: version "0.7.3" @@ -9673,6 +9876,19 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" +solc@^0.8.17: + version "0.8.21" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.21.tgz#c3cd505c360ea2fa0eaa5ab574ef96bffb1a2766" + integrity sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + solhint-plugin-prettier@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b" @@ -9702,34 +9918,122 @@ solhint@^3.3.7: optionalDependencies: prettier "^1.14.3" +solidity-comments-darwin-arm64@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-darwin-arm64/-/solidity-comments-darwin-arm64-0.0.2.tgz#07d89176967d805d41177b38d4f7b16f17c4fa29" + integrity sha512-HidWkVLSh7v+Vu0CA7oI21GWP/ZY7ro8g8OmIxE8oTqyMwgMbE8F1yc58Sj682Hj199HCZsjmtn1BE4PCbLiGA== + +solidity-comments-darwin-x64@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-darwin-x64/-/solidity-comments-darwin-x64-0.0.2.tgz#aaadbfcc08d9fdd1b564c8ce71d6ba50d67b1829" + integrity sha512-Zjs0Ruz6faBTPT6fBecUt6qh4CdloT8Bwoc0+qxRoTn9UhYscmbPQkUgQEbS0FQPysYqVzzxJB4h1Ofbf4wwtA== + solidity-comments-extractor@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== -solidity-coverage@^0.7.20: - version "0.7.20" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.20.tgz#246e9b0dd62f698bb8ddeecdcc46cab26c48b637" - integrity sha512-edOXTugUYdqxrtEnIn4vgrGjLPxdexcL0WD8LzAvVA3d1dwgcfRO3k8xQR02ZQnOnWMBi8Cqs0F+kAQQp3JW8g== - dependencies: - "@solidity-parser/parser" "^0.14.0" - "@truffle/provider" "^0.2.24" +solidity-comments-freebsd-x64@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-freebsd-x64/-/solidity-comments-freebsd-x64-0.0.2.tgz#b2bbf4fe04daefb5e97d595ef5581d56b61ea275" + integrity sha512-8Qe4mpjuAxFSwZJVk7B8gAoLCdbtS412bQzBwk63L8dmlHogvE39iT70aAk3RHUddAppT5RMBunlPUCFYJ3ZTw== + +solidity-comments-linux-arm64-gnu@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-linux-arm64-gnu/-/solidity-comments-linux-arm64-gnu-0.0.2.tgz#db9cd6c46606d46ce66ff781aa37d596bf06b5f1" + integrity sha512-spkb0MZZnmrP+Wtq4UxP+nyPAVRe82idOjqndolcNR0S9Xvu4ebwq+LvF4HiUgjTDmeiqYiFZQ8T9KGdLSIoIg== + +solidity-comments-linux-arm64-musl@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-linux-arm64-musl/-/solidity-comments-linux-arm64-musl-0.0.2.tgz#e37d20bb18447a4761cb48c80909833874b60d27" + integrity sha512-guCDbHArcjE+JDXYkxx5RZzY1YF6OnAKCo+sTC5fstyW/KGKaQJNPyBNWuwYsQiaEHpvhW1ha537IvlGek8GqA== + +solidity-comments-linux-x64-gnu@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-linux-x64-gnu/-/solidity-comments-linux-x64-gnu-0.0.2.tgz#19d09f0d52181ed2661d188ded0f9f22399eb17d" + integrity sha512-zIqLehBK/g7tvrFmQljrfZXfkEeLt2v6wbe+uFu6kH/qAHZa7ybt8Vc0wYcmjo2U0PeBm15d79ee3AkwbIjFdQ== + +solidity-comments-linux-x64-musl@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-linux-x64-musl/-/solidity-comments-linux-x64-musl-0.0.2.tgz#ec1297208481c70bcdceae11ab1ef50c5a955553" + integrity sha512-R9FeDloVlFGTaVkOlELDVC7+1Tjx5WBPI5L8r0AGOPHK3+jOcRh6sKYpI+VskSPDc3vOO46INkpDgUXrKydlIw== + +solidity-comments-win32-arm64-msvc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-win32-arm64-msvc/-/solidity-comments-win32-arm64-msvc-0.0.2.tgz#48dc8a623f9e34a7c1ff62e406d67862d660ff04" + integrity sha512-QnWJoCQcJj+rnutULOihN9bixOtYWDdF5Rfz9fpHejL1BtNjdLW1om55XNVHGAHPqBxV4aeQQ6OirKnp9zKsug== + +solidity-comments-win32-ia32-msvc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-win32-ia32-msvc/-/solidity-comments-win32-ia32-msvc-0.0.2.tgz#5110e57d247d59131c82310ee1c88a8a9cfc7da5" + integrity sha512-vUg4nADtm/NcOtlIymG23NWJUSuMsvX15nU7ynhGBsdKtt8xhdP3C/zA6vjDk8Jg+FXGQL6IHVQ++g/7rSQi0w== + +solidity-comments-win32-x64-msvc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments-win32-x64-msvc/-/solidity-comments-win32-x64-msvc-0.0.2.tgz#271ad8fbbaf17f6026362964ba3e1880e3dc3685" + integrity sha512-36j+KUF4V/y0t3qatHm/LF5sCUCBx2UndxE1kq5bOzh/s+nQgatuyB+Pd5BfuPQHdWu2KaExYe20FlAa6NL7+Q== + +solidity-comments@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/solidity-comments/-/solidity-comments-0.0.2.tgz#e1158d243ad55d5803882f2a67c0298466df573b" + integrity sha512-G+aK6qtyUfkn1guS8uzqUeua1dURwPlcOjoTYW/TwmXAcE7z/1+oGCfZUdMSe4ZMKklNbVZNiG5ibnF8gkkFfw== + optionalDependencies: + solidity-comments-darwin-arm64 "0.0.2" + solidity-comments-darwin-x64 "0.0.2" + solidity-comments-freebsd-x64 "0.0.2" + solidity-comments-linux-arm64-gnu "0.0.2" + solidity-comments-linux-arm64-musl "0.0.2" + solidity-comments-linux-x64-gnu "0.0.2" + solidity-comments-linux-x64-musl "0.0.2" + solidity-comments-win32-arm64-msvc "0.0.2" + solidity-comments-win32-ia32-msvc "0.0.2" + solidity-comments-win32-x64-msvc "0.0.2" + +solidity-coverage@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.4.tgz#c57a21979f5e86859c5198de9fbae2d3bc6324a5" + integrity sha512-xeHOfBOjdMF6hWTbt42iH4x+7j1Atmrf5OldDPMxI+i/COdExUxszOswD9qqvcBTaLGiOrrpnh9UZjSpt4rBsg== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.16.0" chalk "^2.4.2" death "^1.1.0" detect-port "^1.3.0" + difflib "^0.2.4" fs-extra "^8.1.0" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" jsonschema "^1.2.4" lodash "^4.17.15" + mocha "7.1.2" node-emoji "^1.10.0" pify "^4.0.1" recursive-readdir "^2.2.2" sc-istanbul "^0.4.5" semver "^7.3.4" shelljs "^0.8.3" - web3-utils "^1.3.0" + web3-utils "^1.3.6" + +solidity-to-abi@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/solidity-to-abi/-/solidity-to-abi-1.0.4.tgz#b5d1c095e7cb8ee402d5f7a49d2c2ff0e0d63a15" + integrity sha512-2WZpksSLXBAGHBJvv/+M9zI/W4OGxHY3Hmgb75ZqO9hd1rcJMJx/u0zD8DKRWNuzKBw1f5J91VmntewGIrgRjg== + +solpp@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/solpp/-/solpp-0.11.5.tgz#e5f38b5acc952e1cc2e3871d490fdbed910938dd" + integrity sha512-LjzCGMrTDXtera2C4mbQGZSpBznP+o3/82L2CneAAMNbm+t4xPsvfrgJkIaY+IZ5YLrB8IXn7cYthwHMKvAWnQ== + dependencies: + antlr4 "~4.8.0" + axios "^0.21.1" + bn-str-256 "^1.9.1" + commander "^2.19.0" + ethereumjs-util "^6.0.0" + lodash "^4.17.11" + mz "^2.7.0" + resolve "^1.10.0" + semver "^5.6.0" source-map-resolve@^0.5.0: version "0.5.3" @@ -9813,6 +10117,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== +split-ca@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" + integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9878,6 +10187,11 @@ stream-to-pull-stream@^1.7.1: looper "^3.0.0" pull-stream "^3.2.3" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -9897,7 +10211,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -10002,6 +10316,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -10149,26 +10468,28 @@ tape@^4.6.3: string.prototype.trim "~1.2.5" through "~2.3.8" -tar-fs@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== +tar-fs@~1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" tar@^4.0.2: version "4.4.19" @@ -10218,6 +10539,20 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -10226,10 +10561,10 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8: +"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" @@ -10250,12 +10585,10 @@ tmp@0.1.0: dependencies: rimraf "^2.6.3" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-fast-properties@^1.0.3: version "1.0.3" @@ -10322,11 +10655,6 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - ts-command-line-args@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz#fd6913e542099012c0ffb2496126a8f38305c7d6" @@ -10601,23 +10929,17 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -unbzip2-stream@1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -undici@^4.14.1: - version "4.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff" - integrity sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw== +undici@^5.14.0: + version "5.23.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.23.0.tgz#e7bdb0ed42cebe7b7aca87ced53e6eaafb8f8ca0" + integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== + dependencies: + busboy "^1.6.0" undici@^5.4.0: version "5.10.0" @@ -10739,18 +11061,6 @@ util.promisify@^1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.1" -util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -10818,15 +11128,6 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" - integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - web3-core-helpers@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" @@ -10836,14 +11137,6 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" - integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== - dependencies: - web3-eth-iban "1.5.3" - web3-utils "1.5.3" - web3-core-method@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" @@ -10856,18 +11149,6 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" - integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== - dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-utils "1.5.3" - web3-core-promievent@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" @@ -10875,13 +11156,6 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" - integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== - dependencies: - eventemitter3 "4.0.4" - web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -10893,17 +11167,6 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" - integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== - dependencies: - util "^0.12.0" - web3-core-helpers "1.5.3" - web3-providers-http "1.5.3" - web3-providers-ipc "1.5.3" - web3-providers-ws "1.5.3" - web3-core-subscriptions@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" @@ -10913,14 +11176,6 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" - integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" - web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -10934,19 +11189,6 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" - integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-requestmanager "1.5.3" - web3-utils "1.5.3" - web3-eth-abi@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" @@ -10956,14 +11198,6 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" - integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== - dependencies: - "@ethersproject/abi" "5.0.7" - web3-utils "1.5.3" - web3-eth-accounts@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" @@ -10981,23 +11215,6 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" - integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== - dependencies: - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/tx" "^3.2.1" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-util "^7.0.10" - scrypt-js "^3.0.1" - uuid "3.3.2" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" - web3-eth-contract@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" @@ -11013,20 +11230,6 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" - integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== - dependencies: - "@types/bn.js" "^4.11.5" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-utils "1.5.3" - web3-eth-ens@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" @@ -11042,20 +11245,6 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" - integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-contract "1.5.3" - web3-utils "1.5.3" - web3-eth-iban@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" @@ -11064,14 +11253,6 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" - integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== - dependencies: - bn.js "^4.11.9" - web3-utils "1.5.3" - web3-eth-personal@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" @@ -11084,18 +11265,6 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" - integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" - web3-eth@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" @@ -11115,24 +11284,6 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" - integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== - dependencies: - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-accounts "1.5.3" - web3-eth-contract "1.5.3" - web3-eth-ens "1.5.3" - web3-eth-iban "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" - web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" @@ -11142,15 +11293,6 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" - integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== - dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" - web3-provider-engine@14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" @@ -11185,14 +11327,6 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" - integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== - dependencies: - web3-core-helpers "1.5.3" - xhr2-cookies "1.1.0" - web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -11202,14 +11336,6 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" - integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.5.3" - web3-providers-ws@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" @@ -11220,15 +11346,6 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" - integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" - websocket "^1.0.32" - web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -11239,16 +11356,6 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" - integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== - dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-net "1.5.3" - web3-utils@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" @@ -11263,19 +11370,6 @@ web3-utils@1.2.11: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" - integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== - dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" - ethereum-bloom-filters "^1.0.6" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - web3-utils@^1.0.0-beta.31: version "1.7.1" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.1.tgz#77d8bacaf426c66027d8aa4864d77f0ed211aacd" @@ -11289,14 +11383,15 @@ web3-utils@^1.0.0-beta.31: randombytes "^2.1.0" utf8 "3.0.0" -web3-utils@^1.3.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.1.tgz#befcb23922b00603ab56d8c5b4158468dc494aca" - integrity sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w== +web3-utils@^1.3.6: + version "1.10.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" + integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== dependencies: - bn.js "^4.11.9" + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" + ethereum-cryptography "^2.1.2" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" @@ -11315,19 +11410,6 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" - integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== - dependencies: - web3-bzz "1.5.3" - web3-core "1.5.3" - web3-eth "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-shh "1.5.3" - web3-utils "1.5.3" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -11345,7 +11427,7 @@ websocket@1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -websocket@^1.0.31, websocket@^1.0.32: +websocket@^1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== @@ -11391,18 +11473,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-typed-array@^1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" - integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.7" - which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -11410,7 +11480,7 @@ which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@2.0.2, which@^2.0.1: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -11447,10 +11517,10 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^2.0.0: version "2.1.0" @@ -11495,11 +11565,6 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -11548,6 +11613,11 @@ xhr2-cookies@1.1.0: dependencies: cookiejar "^2.1.1" +xhr2@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.3.tgz#cbfc4759a69b4a888e78cf4f20b051038757bd11" + integrity sha512-6RmGK22QwC7yXB1CRwyLWuS2opPcKOlAu0ViAnyZjDlzrEmCKL4kLHkfvB8oMRWeztMsNoDGAjsMZY15w/4tTw== + xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: version "2.6.0" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" @@ -11563,7 +11633,7 @@ xmlhttprequest@1.8.0: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -11631,6 +11701,13 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw== + dependencies: + camelcase "^4.1.0" + yargs-unparser@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" @@ -11679,6 +11756,24 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -11699,14 +11794,6 @@ yargs@^4.7.1: y18n "^3.2.1" yargs-parser "^2.4.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" @@ -11716,3 +11803,27 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yulp@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/yulp/-/yulp-0.2.3.tgz#f8055cb7784b44a955d76c607f712b5911c701f8" + integrity sha512-2XX6g9hTB5OAMhPYw0Qq9inEmssVFSnq6dZxfkDQyipiZO70NgrrCTcQGt2Dw+jhUCwUkjPKTA6DF7RG7RRpKQ== + dependencies: + bn.js "^5.0.0" + ethers "^4.0.39" + moo "^0.5.1" + nearley "^2.19.0" + parse-es6-imports "^1.0.1" + rfdc "^1.1.4" + optionalDependencies: + "@hyperapp/router" "^0.7.1" + axios "^0.18.1" + ethjs-extras "0.0.7" + hyperapp "1.2.9" + regenerator-runtime "0.13.2" + solc "0.5.7" + +zksync-web3@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" + integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== diff --git a/contracts/yul/Reader4844.yul b/contracts/yul/Reader4844.yul new file mode 100644 index 000000000..ef183d793 --- /dev/null +++ b/contracts/yul/Reader4844.yul @@ -0,0 +1,39 @@ +object "Reader4844" { + code { + datacopy(0, dataoffset("runtime"), datasize("runtime")) + return(0, datasize("runtime")) + } + object "runtime" { + code { + // This contract does not accept callvalue + if callvalue() { revert(0, 0) } + + // Match against the keccak of the ABI function signature needed. + switch shr(0xe0, calldataload(0)) + // bytes4(keccak("getDataHashes()")) + case 0xe83a2d82 { + let i := 0 + for { } true { } + { + // DATAHASH opcode has hex value 0x49 + let hash := verbatim_1i_1o(hex"49", i) + if iszero(hash) { break } + mstore(add(mul(i, 32), 64), hash) + i := add(i, 1) + } + mstore(0, 32) + mstore(32, i) + return(0, add(mul(i, 32), 64)) + } + // bytes4(keccak("getBlobBaseFee()")) + case 0x1f6d6ef7 { + // BLOBBASEFEE opcode has hex value 0x4a + let blobBasefee := verbatim_0i_1o(hex"4a") + mstore(0, blobBasefee) + return(0, 32) + } + // Unknown selector (revert) + default { revert(0, 0) } + } + } +} diff --git a/solgen/go/assertionStakingPoolgen/assertionStakingPoolgen.go b/solgen/go/assertionStakingPoolgen/assertionStakingPoolgen.go index bd7b0f948..2cccc66b3 100644 --- a/solgen/go/assertionStakingPoolgen/assertionStakingPoolgen.go +++ b/solgen/go/assertionStakingPoolgen/assertionStakingPoolgen.go @@ -68,7 +68,7 @@ type GlobalState struct { // AssertionStakingPoolMetaData contains all meta data concerning the AssertionStakingPool contract. var AssertionStakingPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"_assertionInputs\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_assertionHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"AmountExceedsBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NoBalanceToWithdraw\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assertionInputs\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"depositIntoPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"depositedTokenBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRequiredStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"makeStakeWithdrawable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"makeStakeWithdrawableAndWithdrawBackIntoPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFromPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakeBackIntoPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b50604051620017453803806200174583398101604081905262000034916200050a565b6001600160a01b03838116608090815260a0839052835180516000908155602080830151600155604092830151805160029081558183015160035593810151600480546060840151929098166001600160e01b031990981697909717600160a01b6001600160401b03928316021790965590930151600580546001600160401b03191691909516179093559084015180518051869493600692918391620000dd9183916200021f565b506020820151620000f5906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200011e576200011e6200062b565b021790555060409182015160049091015582015180518051600b8401919082906200014d90829060026200021f565b50602082015162000165906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200018e576200018e6200062b565b02179055506040820151816004015550509050506080516001600160a01b03166351ed6a306040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000641565b6001600160a01b031660c0525062000666915050565b826002810192821562000250579160200282015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000304565b5090565b600183019183908215620002505791602002820160005b83821115620002c557835183826101000a8154816001600160401b0302191690836001600160401b03160217905550926020019260080160208160070104928301926001030262000279565b8015620002fa5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620002c5565b50506200025e9291505b5b808211156200025e576000815560010162000305565b80516001600160a01b03811681146200033357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000373576200037362000338565b60405290565b604080519081016001600160401b038111828210171562000373576200037362000338565b60405160a081016001600160401b038111828210171562000373576200037362000338565b80516001600160401b03811681146200033357600080fd5b600082601f830112620003ed57600080fd5b620003f762000379565b8060408401858111156200040a57600080fd5b845b818110156200042f576200042081620003c3565b8452602093840193016200040c565b509095945050505050565b8051600381106200033357600080fd5b600081830360c08112156200045e57600080fd5b620004686200034e565b915060808112156200047957600080fd5b506200048462000379565b83601f8401126200049457600080fd5b6200049e62000379565b806040850186811115620004b157600080fd5b855b81811015620004cd578051845260209384019301620004b3565b50818452620004dd8782620003db565b60208501525050508152620004f5608083016200043a565b602082015260a0820151604082015292915050565b60008060008385036102a08112156200052257600080fd5b6200052d856200031b565b9350601f1981016102608112156200054457600080fd5b6200054e6200034e565b60e08212156200055d57600080fd5b620005676200034e565b9150602087015182526040870151602083015260a0605f19840112156200058d57600080fd5b620005976200039e565b92506060870151835260808701516020840152620005b860a088016200031b565b6040840152620005cb60c08801620003c3565b6060840152620005de60e08801620003c3565b6080840152826040830152818152620005fc8861010089016200044a565b602082015262000611886101c089016200044a565b604082015280945050505061028084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200065457600080fd5b6200065f826200031b565b9392505050565b60805160a05160c051611078620006cd60003960008181610148015281816102ec0152818161036e01526104b601526000818160e901526104170152600081816101e901528181610390015281816103e50152818161077901526107ee01526110786000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80637476083b1161008c578063930412af11610066578063930412af146101d45780639451944d146101dc578063cb23bcb5146101e4578063f0e978891461020b57600080fd5b80637476083b1461018a578063875b2af01461019d5780639252175b146101bd57600080fd5b80634b7a7538116100bd5780634b7a75381461013b57806351ed6a30146101435780636b74d5151461018257600080fd5b80632113ed21146100e457806326c0e5c51461011e57806330fc43ed14610128575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610126610213565b005b610126610136366004610cd7565b61022e565b610126610354565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610115565b610126610474565b610126610198366004610cd7565b610484565b61010b6101ab366004610cf0565b60106020526000908152604090205481565b6101c5610516565b60405161011593929190610dd2565b610126610777565b6101266107ec565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60035461010b565b3360009081526010602052604090205461022c9061022e565b565b336000908152601060205260408120549081900361027f576040517fe06b2da50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b808211156102c9576040517fa47b7c650000000000000000000000000000000000000000000000000000000081523360048201526024810183905260448101829052606401610276565b6102d38282610e68565b3360008181526010602052604090209190915561031b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169084610873565b60405182815233907f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc9060200160405180910390a25050565b600061035f60035490565b90506103b56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610921565b6040517f7300201c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637300201c9061043f9084906000907f000000000000000000000000000000000000000000000000000000000000000090600401610eee565b600060405180830381600087803b15801561045957600080fd5b505af115801561046d573d6000803e3d6000fd5b5050505050565b61047c610777565b61022c6107ec565b33600090815260106020526040812080548392906104a3908490610f81565b909155506104de90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084610a05565b60405181815233907f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29060200160405180910390a250565b6040805160608082018352600080548352600154602080850191909152845160a08082018752600280548352600354938301939093526004546001600160a01b0381168389015274010000000000000000000000000000000000000000900467ffffffffffffffff9081168387015260055416608083015285870191909152855160e08101968790529495929493600693859391840192859284929186019184919082845b8154815260200190600101908083116105bb575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116105f3579050505050919092525050508152600382015460209091019060ff16600281111561066257610662610d19565b600281111561067357610673610d19565b8152600491909101546020909101526040805160e08101909152909190600b82018160608101828160a084018260028282826020028201915b8154815260200190600101908083116106ac575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116106e4579050505050919092525050508152600382015460209091019060ff16600281111561075357610753610d19565b600281111561076457610764610d19565b8152602001600482015481525050905083565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357ef4ab96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d257600080fd5b505af11580156107e6573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663613739196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190610f94565b50565b6040516001600160a01b03831660248201526044810182905261091c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610a56565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af9190610f94565b6109b99190610f81565b6040516001600160a01b0385166024820152604481018290529091506107e69085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016108b8565b6040516001600160a01b03808516602483015283166044820152606481018290526107e69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016108b8565b6000610aab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b3b9092919063ffffffff16565b80519091501561091c5780806020019051810190610ac99190610fad565b61091c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610276565b6060610b4a8484600085610b54565b90505b9392505050565b606082471015610bcc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610276565b6001600160a01b0385163b610c235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610276565b600080866001600160a01b03168587604051610c3f9190610ff3565b60006040518083038185875af1925050503d8060008114610c7c576040519150601f19603f3d011682016040523d82523d6000602084013e610c81565b606091505b5091509150610c91828286610c9e565b925050505b949350505050565b60608315610cad575081610b4d565b825115610cbd5782518084602001fd5b8160405162461bcd60e51b8152600401610276919061100f565b600060208284031215610ce957600080fd5b5035919050565b600060208284031215610d0257600080fd5b81356001600160a01b0381168114610b4d57600080fd5b634e487b7160e01b600052602160045260246000fd5b60038110610d4d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610d78578251825260209283019290910190600101610d59565b505050602090810151906040840160005b6002811015610db057835167ffffffffffffffff1682529282019290820190600101610d89565b50508201519050610dc46080840182610d2f565b506040015160a09190910152565b6000610260820190508451825260208501516020830152604085015180516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050610e4460e0830185610d51565b610c966101a0830184610d51565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e7b57610e7b610e52565b92915050565b818160005b6002811015610ea5578154835260209092019160019182019101610e86565b505050600281015467ffffffffffffffff8082166040850152808260401c166060850152505060ff600382015416610ee06080840182610d2f565b506004015460a09190910152565b8381528254602082015260018301546040820152600283015460608201526003830154608082015260048301546001600160a01b03811660a0808401919091521c67ffffffffffffffff90811660c083015260058401541660e08201526102a08101610f61610100830160068601610e81565b610f726101c08301600b8601610e81565b82610280830152949350505050565b80820180821115610e7b57610e7b610e52565b600060208284031215610fa657600080fd5b5051919050565b600060208284031215610fbf57600080fd5b81518015158114610b4d57600080fd5b60005b83811015610fea578181015183820152602001610fd2565b50506000910152565b60008251611005818460208701610fcf565b9190910192915050565b602081526000825180602084015261102e816040850160208701610fcf565b601f01601f1916919091016040019291505056fea2646970667358221220e874dd921936c4c1f9969becddd42057186980fa5bee24e27257ff7a86166b5464736f6c63430008110033", + Bin: "0x60e06040523480156200001157600080fd5b50604051620017453803806200174583398101604081905262000034916200050a565b6001600160a01b03838116608090815260a0839052835180516000908155602080830151600155604092830151805160029081558183015160035593810151600480546060840151929098166001600160e01b031990981697909717600160a01b6001600160401b03928316021790965590930151600580546001600160401b03191691909516179093559084015180518051869493600692918391620000dd9183916200021f565b506020820151620000f5906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200011e576200011e6200062b565b021790555060409182015160049091015582015180518051600b8401919082906200014d90829060026200021f565b50602082015162000165906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200018e576200018e6200062b565b02179055506040820151816004015550509050506080516001600160a01b03166351ed6a306040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000641565b6001600160a01b031660c0525062000666915050565b826002810192821562000250579160200282015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000304565b5090565b600183019183908215620002505791602002820160005b83821115620002c557835183826101000a8154816001600160401b0302191690836001600160401b03160217905550926020019260080160208160070104928301926001030262000279565b8015620002fa5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620002c5565b50506200025e9291505b5b808211156200025e576000815560010162000305565b80516001600160a01b03811681146200033357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000373576200037362000338565b60405290565b604080519081016001600160401b038111828210171562000373576200037362000338565b60405160a081016001600160401b038111828210171562000373576200037362000338565b80516001600160401b03811681146200033357600080fd5b600082601f830112620003ed57600080fd5b620003f762000379565b8060408401858111156200040a57600080fd5b845b818110156200042f576200042081620003c3565b8452602093840193016200040c565b509095945050505050565b8051600381106200033357600080fd5b600081830360c08112156200045e57600080fd5b620004686200034e565b915060808112156200047957600080fd5b506200048462000379565b83601f8401126200049457600080fd5b6200049e62000379565b806040850186811115620004b157600080fd5b855b81811015620004cd578051845260209384019301620004b3565b50818452620004dd8782620003db565b60208501525050508152620004f5608083016200043a565b602082015260a0820151604082015292915050565b60008060008385036102a08112156200052257600080fd5b6200052d856200031b565b9350601f1981016102608112156200054457600080fd5b6200054e6200034e565b60e08212156200055d57600080fd5b620005676200034e565b9150602087015182526040870151602083015260a0605f19840112156200058d57600080fd5b620005976200039e565b92506060870151835260808701516020840152620005b860a088016200031b565b6040840152620005cb60c08801620003c3565b6060840152620005de60e08801620003c3565b6080840152826040830152818152620005fc8861010089016200044a565b602082015262000611886101c089016200044a565b604082015280945050505061028084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200065457600080fd5b6200065f826200031b565b9392505050565b60805160a05160c051611078620006cd60003960008181610148015281816102ec0152818161036e01526104b601526000818160e901526104170152600081816101e901528181610390015281816103e50152818161077901526107ee01526110786000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80637476083b1161008c578063930412af11610066578063930412af146101d45780639451944d146101dc578063cb23bcb5146101e4578063f0e978891461020b57600080fd5b80637476083b1461018a578063875b2af01461019d5780639252175b146101bd57600080fd5b80634b7a7538116100bd5780634b7a75381461013b57806351ed6a30146101435780636b74d5151461018257600080fd5b80632113ed21146100e457806326c0e5c51461011e57806330fc43ed14610128575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610126610213565b005b610126610136366004610cd7565b61022e565b610126610354565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610115565b610126610474565b610126610198366004610cd7565b610484565b61010b6101ab366004610cf0565b60106020526000908152604090205481565b6101c5610516565b60405161011593929190610dd2565b610126610777565b6101266107ec565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60035461010b565b3360009081526010602052604090205461022c9061022e565b565b336000908152601060205260408120549081900361027f576040517fe06b2da50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b808211156102c9576040517fa47b7c650000000000000000000000000000000000000000000000000000000081523360048201526024810183905260448101829052606401610276565b6102d38282610e68565b3360008181526010602052604090209190915561031b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169084610873565b60405182815233907f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc9060200160405180910390a25050565b600061035f60035490565b90506103b56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610921565b6040517f7300201c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637300201c9061043f9084906000907f000000000000000000000000000000000000000000000000000000000000000090600401610eee565b600060405180830381600087803b15801561045957600080fd5b505af115801561046d573d6000803e3d6000fd5b5050505050565b61047c610777565b61022c6107ec565b33600090815260106020526040812080548392906104a3908490610f81565b909155506104de90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084610a05565b60405181815233907f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29060200160405180910390a250565b6040805160608082018352600080548352600154602080850191909152845160a08082018752600280548352600354938301939093526004546001600160a01b0381168389015274010000000000000000000000000000000000000000900467ffffffffffffffff9081168387015260055416608083015285870191909152855160e08101968790529495929493600693859391840192859284929186019184919082845b8154815260200190600101908083116105bb575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116105f3579050505050919092525050508152600382015460209091019060ff16600281111561066257610662610d19565b600281111561067357610673610d19565b8152600491909101546020909101526040805160e08101909152909190600b82018160608101828160a084018260028282826020028201915b8154815260200190600101908083116106ac575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116106e4579050505050919092525050508152600382015460209091019060ff16600281111561075357610753610d19565b600281111561076457610764610d19565b8152602001600482015481525050905083565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357ef4ab96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d257600080fd5b505af11580156107e6573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663613739196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190610f94565b50565b6040516001600160a01b03831660248201526044810182905261091c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610a56565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af9190610f94565b6109b99190610f81565b6040516001600160a01b0385166024820152604481018290529091506107e69085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016108b8565b6040516001600160a01b03808516602483015283166044820152606481018290526107e69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016108b8565b6000610aab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b3b9092919063ffffffff16565b80519091501561091c5780806020019051810190610ac99190610fad565b61091c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610276565b6060610b4a8484600085610b54565b90505b9392505050565b606082471015610bcc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610276565b6001600160a01b0385163b610c235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610276565b600080866001600160a01b03168587604051610c3f9190610ff3565b60006040518083038185875af1925050503d8060008114610c7c576040519150601f19603f3d011682016040523d82523d6000602084013e610c81565b606091505b5091509150610c91828286610c9e565b925050505b949350505050565b60608315610cad575081610b4d565b825115610cbd5782518084602001fd5b8160405162461bcd60e51b8152600401610276919061100f565b600060208284031215610ce957600080fd5b5035919050565b600060208284031215610d0257600080fd5b81356001600160a01b0381168114610b4d57600080fd5b634e487b7160e01b600052602160045260246000fd5b60038110610d4d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610d78578251825260209283019290910190600101610d59565b505050602090810151906040840160005b6002811015610db057835167ffffffffffffffff1682529282019290820190600101610d89565b50508201519050610dc46080840182610d2f565b506040015160a09190910152565b6000610260820190508451825260208501516020830152604085015180516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050610e4460e0830185610d51565b610c966101a0830184610d51565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e7b57610e7b610e52565b92915050565b818160005b6002811015610ea5578154835260209092019160019182019101610e86565b505050600281015467ffffffffffffffff8082166040850152808260401c166060850152505060ff600382015416610ee06080840182610d2f565b506004015460a09190910152565b8381528254602082015260018301546040820152600283015460608201526003830154608082015260048301546001600160a01b03811660a0808401919091521c67ffffffffffffffff90811660c083015260058401541660e08201526102a08101610f61610100830160068601610e81565b610f726101c08301600b8601610e81565b82610280830152949350505050565b80820180821115610e7b57610e7b610e52565b600060208284031215610fa657600080fd5b5051919050565b600060208284031215610fbf57600080fd5b81518015158114610b4d57600080fd5b60005b83811015610fea578181015183820152602001610fd2565b50506000910152565b60008251611005818460208701610fcf565b9190910192915050565b602081526000825180602084015261102e816040850160208701610fcf565b601f01601f1916919091016040019291505056fea26469706673582212209087fdad40ab4da26397456263ffcb9377057af7edb54d6f02cda01ffdd72c0e64736f6c63430008110033", } // AssertionStakingPoolABI is the input ABI used to generate the binding from. @@ -883,7 +883,7 @@ func (_AssertionStakingPool *AssertionStakingPoolFilterer) ParseStakeWithdrawn(l // AssertionStakingPoolCreatorMetaData contains all meta data concerning the AssertionStakingPoolCreator contract. var AssertionStakingPoolCreatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertionInputs\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"PoolDoesntExist\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"assertionPool\",\"type\":\"address\"}],\"name\":\"NewAssertionPoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"_assertionInputs\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_assertionHash\",\"type\":\"bytes32\"}],\"name\":\"createPoolForAssertion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"_assertionInputs\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"contractAssertionStakingPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50611fc4806100206000396000f3fe60806040523480156200001157600080fd5b50600436106200003a5760003560e01c806341dd1eaa146200003f57806361841ec9146200007f575b600080fd5b620000566200005036600462000539565b62000096565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b620000566200009036600462000539565b620001ac565b600080620000a685858562000257565b90506000620000b78686866200028f565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021830152603582018690526055808301859052835180840390910181526075909201909252805191012090915073ffffffffffffffffffffffffffffffffffffffff81163b1562000162579250620001a5915050565b8686866040517fc070882d0000000000000000000000000000000000000000000000000000000081526004016200019c939291906200073a565b60405180910390fd5b9392505050565b600080620001bc85858562000257565b858585604051620001cd9062000312565b620001db939291906200073a565b8190604051809103906000f5905080158015620001fc573d6000803e3d6000fd5b5060405173ffffffffffffffffffffffffffffffffffffffff808316825291925084918716907fd628317c6ebae87acc5dbfadeb835cb97692cc6935ea72bf37461e14a0bbee1e9060200160405180910390a3949350505050565b600083838360405160200162000270939291906200073a565b6040516020818303038152906040528051906020012090509392505050565b60008060405180602001620002a49062000312565b6020820181038252601f19601f82011660405250905080858585604051602001620002d2939291906200073a565b60408051601f1981840301815290829052620002f2929160200162000828565b604051602081830303815290604052805190602001209150509392505050565b611745806200084a83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200034557600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156200039f576200039f6200034a565b60405290565b6040805190810167ffffffffffffffff811182821017156200039f576200039f6200034a565b60405160a0810167ffffffffffffffff811182821017156200039f576200039f6200034a565b803567ffffffffffffffff811681146200034557600080fd5b600082601f8301126200041c57600080fd5b62000426620003a5565b8060408401858111156200043957600080fd5b845b818110156200045e576200044f81620003f1565b8452602093840193016200043b565b509095945050505050565b8035600381106200034557600080fd5b600081830360c08112156200048d57600080fd5b6200049762000379565b91506080811215620004a857600080fd5b50620004b3620003a5565b83601f840112620004c357600080fd5b620004cd620003a5565b806040850186811115620004e057600080fd5b855b81811015620004fc578035845260209384019301620004e2565b508184526200050c87826200040a565b60208501525050508152620005246080830162000469565b602082015260a0820135604082015292915050565b60008060008385036102a08112156200055157600080fd5b6200055c8562000320565b9350601f1981016102608112156200057357600080fd5b6200057d62000379565b60e08212156200058c57600080fd5b6200059662000379565b9150602087013582526040870135602083015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084011215620005da57600080fd5b620005e4620003cb565b925060608701358352608087013560208401526200060560a0880162000320565b60408401526200061860c08801620003f1565b60608401526200062b60e08801620003f1565b60808401528260408301528181526200064988610100890162000479565b60208201526200065e886101c0890162000479565b6040820152949794965050505061028092909201359150565b60038110620006af577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b805180518360005b6002811015620006dc578251825260209283019290910190600101620006bb565b505050602090810151906040840160005b60028110156200071657835167ffffffffffffffff1682529282019290820190600101620006ed565b505082015190506200072c608084018262000677565b506040015160a09190910152565b60006102a08201905073ffffffffffffffffffffffffffffffffffffffff8086168352845180516020850152602081015160408501526040810151905080516060850152602081015160808501528160408201511660a08501526060810151915067ffffffffffffffff80831660c08601528060808301511660e08601525050506020840151620007d0610100840182620006b3565b506040840151620007e66101c0840182620006b3565b5082610280830152949350505050565b6000815160005b81811015620008195760208185018101518683015201620007fd565b50600093019283525090919050565b6000620008416200083a8386620007f6565b84620007f6565b94935050505056fe60e06040523480156200001157600080fd5b50604051620017453803806200174583398101604081905262000034916200050a565b6001600160a01b03838116608090815260a0839052835180516000908155602080830151600155604092830151805160029081558183015160035593810151600480546060840151929098166001600160e01b031990981697909717600160a01b6001600160401b03928316021790965590930151600580546001600160401b03191691909516179093559084015180518051869493600692918391620000dd9183916200021f565b506020820151620000f5906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200011e576200011e6200062b565b021790555060409182015160049091015582015180518051600b8401919082906200014d90829060026200021f565b50602082015162000165906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200018e576200018e6200062b565b02179055506040820151816004015550509050506080516001600160a01b03166351ed6a306040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000641565b6001600160a01b031660c0525062000666915050565b826002810192821562000250579160200282015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000304565b5090565b600183019183908215620002505791602002820160005b83821115620002c557835183826101000a8154816001600160401b0302191690836001600160401b03160217905550926020019260080160208160070104928301926001030262000279565b8015620002fa5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620002c5565b50506200025e9291505b5b808211156200025e576000815560010162000305565b80516001600160a01b03811681146200033357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000373576200037362000338565b60405290565b604080519081016001600160401b038111828210171562000373576200037362000338565b60405160a081016001600160401b038111828210171562000373576200037362000338565b80516001600160401b03811681146200033357600080fd5b600082601f830112620003ed57600080fd5b620003f762000379565b8060408401858111156200040a57600080fd5b845b818110156200042f576200042081620003c3565b8452602093840193016200040c565b509095945050505050565b8051600381106200033357600080fd5b600081830360c08112156200045e57600080fd5b620004686200034e565b915060808112156200047957600080fd5b506200048462000379565b83601f8401126200049457600080fd5b6200049e62000379565b806040850186811115620004b157600080fd5b855b81811015620004cd578051845260209384019301620004b3565b50818452620004dd8782620003db565b60208501525050508152620004f5608083016200043a565b602082015260a0820151604082015292915050565b60008060008385036102a08112156200052257600080fd5b6200052d856200031b565b9350601f1981016102608112156200054457600080fd5b6200054e6200034e565b60e08212156200055d57600080fd5b620005676200034e565b9150602087015182526040870151602083015260a0605f19840112156200058d57600080fd5b620005976200039e565b92506060870151835260808701516020840152620005b860a088016200031b565b6040840152620005cb60c08801620003c3565b6060840152620005de60e08801620003c3565b6080840152826040830152818152620005fc8861010089016200044a565b602082015262000611886101c089016200044a565b604082015280945050505061028084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200065457600080fd5b6200065f826200031b565b9392505050565b60805160a05160c051611078620006cd60003960008181610148015281816102ec0152818161036e01526104b601526000818160e901526104170152600081816101e901528181610390015281816103e50152818161077901526107ee01526110786000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80637476083b1161008c578063930412af11610066578063930412af146101d45780639451944d146101dc578063cb23bcb5146101e4578063f0e978891461020b57600080fd5b80637476083b1461018a578063875b2af01461019d5780639252175b146101bd57600080fd5b80634b7a7538116100bd5780634b7a75381461013b57806351ed6a30146101435780636b74d5151461018257600080fd5b80632113ed21146100e457806326c0e5c51461011e57806330fc43ed14610128575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610126610213565b005b610126610136366004610cd7565b61022e565b610126610354565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610115565b610126610474565b610126610198366004610cd7565b610484565b61010b6101ab366004610cf0565b60106020526000908152604090205481565b6101c5610516565b60405161011593929190610dd2565b610126610777565b6101266107ec565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60035461010b565b3360009081526010602052604090205461022c9061022e565b565b336000908152601060205260408120549081900361027f576040517fe06b2da50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b808211156102c9576040517fa47b7c650000000000000000000000000000000000000000000000000000000081523360048201526024810183905260448101829052606401610276565b6102d38282610e68565b3360008181526010602052604090209190915561031b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169084610873565b60405182815233907f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc9060200160405180910390a25050565b600061035f60035490565b90506103b56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610921565b6040517f7300201c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637300201c9061043f9084906000907f000000000000000000000000000000000000000000000000000000000000000090600401610eee565b600060405180830381600087803b15801561045957600080fd5b505af115801561046d573d6000803e3d6000fd5b5050505050565b61047c610777565b61022c6107ec565b33600090815260106020526040812080548392906104a3908490610f81565b909155506104de90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084610a05565b60405181815233907f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29060200160405180910390a250565b6040805160608082018352600080548352600154602080850191909152845160a08082018752600280548352600354938301939093526004546001600160a01b0381168389015274010000000000000000000000000000000000000000900467ffffffffffffffff9081168387015260055416608083015285870191909152855160e08101968790529495929493600693859391840192859284929186019184919082845b8154815260200190600101908083116105bb575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116105f3579050505050919092525050508152600382015460209091019060ff16600281111561066257610662610d19565b600281111561067357610673610d19565b8152600491909101546020909101526040805160e08101909152909190600b82018160608101828160a084018260028282826020028201915b8154815260200190600101908083116106ac575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116106e4579050505050919092525050508152600382015460209091019060ff16600281111561075357610753610d19565b600281111561076457610764610d19565b8152602001600482015481525050905083565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357ef4ab96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d257600080fd5b505af11580156107e6573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663613739196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190610f94565b50565b6040516001600160a01b03831660248201526044810182905261091c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610a56565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af9190610f94565b6109b99190610f81565b6040516001600160a01b0385166024820152604481018290529091506107e69085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016108b8565b6040516001600160a01b03808516602483015283166044820152606481018290526107e69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016108b8565b6000610aab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b3b9092919063ffffffff16565b80519091501561091c5780806020019051810190610ac99190610fad565b61091c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610276565b6060610b4a8484600085610b54565b90505b9392505050565b606082471015610bcc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610276565b6001600160a01b0385163b610c235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610276565b600080866001600160a01b03168587604051610c3f9190610ff3565b60006040518083038185875af1925050503d8060008114610c7c576040519150601f19603f3d011682016040523d82523d6000602084013e610c81565b606091505b5091509150610c91828286610c9e565b925050505b949350505050565b60608315610cad575081610b4d565b825115610cbd5782518084602001fd5b8160405162461bcd60e51b8152600401610276919061100f565b600060208284031215610ce957600080fd5b5035919050565b600060208284031215610d0257600080fd5b81356001600160a01b0381168114610b4d57600080fd5b634e487b7160e01b600052602160045260246000fd5b60038110610d4d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610d78578251825260209283019290910190600101610d59565b505050602090810151906040840160005b6002811015610db057835167ffffffffffffffff1682529282019290820190600101610d89565b50508201519050610dc46080840182610d2f565b506040015160a09190910152565b6000610260820190508451825260208501516020830152604085015180516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050610e4460e0830185610d51565b610c966101a0830184610d51565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e7b57610e7b610e52565b92915050565b818160005b6002811015610ea5578154835260209092019160019182019101610e86565b505050600281015467ffffffffffffffff8082166040850152808260401c166060850152505060ff600382015416610ee06080840182610d2f565b506004015460a09190910152565b8381528254602082015260018301546040820152600283015460608201526003830154608082015260048301546001600160a01b03811660a0808401919091521c67ffffffffffffffff90811660c083015260058401541660e08201526102a08101610f61610100830160068601610e81565b610f726101c08301600b8601610e81565b82610280830152949350505050565b80820180821115610e7b57610e7b610e52565b600060208284031215610fa657600080fd5b5051919050565b600060208284031215610fbf57600080fd5b81518015158114610b4d57600080fd5b60005b83811015610fea578181015183820152602001610fd2565b50506000910152565b60008251611005818460208701610fcf565b9190910192915050565b602081526000825180602084015261102e816040850160208701610fcf565b601f01601f1916919091016040019291505056fea2646970667358221220e874dd921936c4c1f9969becddd42057186980fa5bee24e27257ff7a86166b5464736f6c63430008110033a2646970667358221220efabeaeea945d963413f5fea4cdf35f86a9f34b6c22a964993684181a2ffe1bd64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50611fc4806100206000396000f3fe60806040523480156200001157600080fd5b50600436106200003a5760003560e01c806341dd1eaa146200003f57806361841ec9146200007f575b600080fd5b620000566200005036600462000539565b62000096565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b620000566200009036600462000539565b620001ac565b600080620000a685858562000257565b90506000620000b78686866200028f565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021830152603582018690526055808301859052835180840390910181526075909201909252805191012090915073ffffffffffffffffffffffffffffffffffffffff81163b1562000162579250620001a5915050565b8686866040517fc070882d0000000000000000000000000000000000000000000000000000000081526004016200019c939291906200073a565b60405180910390fd5b9392505050565b600080620001bc85858562000257565b858585604051620001cd9062000312565b620001db939291906200073a565b8190604051809103906000f5905080158015620001fc573d6000803e3d6000fd5b5060405173ffffffffffffffffffffffffffffffffffffffff808316825291925084918716907fd628317c6ebae87acc5dbfadeb835cb97692cc6935ea72bf37461e14a0bbee1e9060200160405180910390a3949350505050565b600083838360405160200162000270939291906200073a565b6040516020818303038152906040528051906020012090509392505050565b60008060405180602001620002a49062000312565b6020820181038252601f19601f82011660405250905080858585604051602001620002d2939291906200073a565b60408051601f1981840301815290829052620002f2929160200162000828565b604051602081830303815290604052805190602001209150509392505050565b611745806200084a83390190565b803573ffffffffffffffffffffffffffffffffffffffff811681146200034557600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156200039f576200039f6200034a565b60405290565b6040805190810167ffffffffffffffff811182821017156200039f576200039f6200034a565b60405160a0810167ffffffffffffffff811182821017156200039f576200039f6200034a565b803567ffffffffffffffff811681146200034557600080fd5b600082601f8301126200041c57600080fd5b62000426620003a5565b8060408401858111156200043957600080fd5b845b818110156200045e576200044f81620003f1565b8452602093840193016200043b565b509095945050505050565b8035600381106200034557600080fd5b600081830360c08112156200048d57600080fd5b6200049762000379565b91506080811215620004a857600080fd5b50620004b3620003a5565b83601f840112620004c357600080fd5b620004cd620003a5565b806040850186811115620004e057600080fd5b855b81811015620004fc578035845260209384019301620004e2565b508184526200050c87826200040a565b60208501525050508152620005246080830162000469565b602082015260a0820135604082015292915050565b60008060008385036102a08112156200055157600080fd5b6200055c8562000320565b9350601f1981016102608112156200057357600080fd5b6200057d62000379565b60e08212156200058c57600080fd5b6200059662000379565b9150602087013582526040870135602083015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084011215620005da57600080fd5b620005e4620003cb565b925060608701358352608087013560208401526200060560a0880162000320565b60408401526200061860c08801620003f1565b60608401526200062b60e08801620003f1565b60808401528260408301528181526200064988610100890162000479565b60208201526200065e886101c0890162000479565b6040820152949794965050505061028092909201359150565b60038110620006af577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b805180518360005b6002811015620006dc578251825260209283019290910190600101620006bb565b505050602090810151906040840160005b60028110156200071657835167ffffffffffffffff1682529282019290820190600101620006ed565b505082015190506200072c608084018262000677565b506040015160a09190910152565b60006102a08201905073ffffffffffffffffffffffffffffffffffffffff8086168352845180516020850152602081015160408501526040810151905080516060850152602081015160808501528160408201511660a08501526060810151915067ffffffffffffffff80831660c08601528060808301511660e08601525050506020840151620007d0610100840182620006b3565b506040840151620007e66101c0840182620006b3565b5082610280830152949350505050565b6000815160005b81811015620008195760208185018101518683015201620007fd565b50600093019283525090919050565b6000620008416200083a8386620007f6565b84620007f6565b94935050505056fe60e06040523480156200001157600080fd5b50604051620017453803806200174583398101604081905262000034916200050a565b6001600160a01b03838116608090815260a0839052835180516000908155602080830151600155604092830151805160029081558183015160035593810151600480546060840151929098166001600160e01b031990981697909717600160a01b6001600160401b03928316021790965590930151600580546001600160401b03191691909516179093559084015180518051869493600692918391620000dd9183916200021f565b506020820151620000f5906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200011e576200011e6200062b565b021790555060409182015160049091015582015180518051600b8401919082906200014d90829060026200021f565b50602082015162000165906002808401919062000262565b505050602082015160038201805460ff191660018360028111156200018e576200018e6200062b565b02179055506040820151816004015550509050506080516001600160a01b03166351ed6a306040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000641565b6001600160a01b031660c0525062000666915050565b826002810192821562000250579160200282015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000304565b5090565b600183019183908215620002505791602002820160005b83821115620002c557835183826101000a8154816001600160401b0302191690836001600160401b03160217905550926020019260080160208160070104928301926001030262000279565b8015620002fa5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620002c5565b50506200025e9291505b5b808211156200025e576000815560010162000305565b80516001600160a01b03811681146200033357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000373576200037362000338565b60405290565b604080519081016001600160401b038111828210171562000373576200037362000338565b60405160a081016001600160401b038111828210171562000373576200037362000338565b80516001600160401b03811681146200033357600080fd5b600082601f830112620003ed57600080fd5b620003f762000379565b8060408401858111156200040a57600080fd5b845b818110156200042f576200042081620003c3565b8452602093840193016200040c565b509095945050505050565b8051600381106200033357600080fd5b600081830360c08112156200045e57600080fd5b620004686200034e565b915060808112156200047957600080fd5b506200048462000379565b83601f8401126200049457600080fd5b6200049e62000379565b806040850186811115620004b157600080fd5b855b81811015620004cd578051845260209384019301620004b3565b50818452620004dd8782620003db565b60208501525050508152620004f5608083016200043a565b602082015260a0820151604082015292915050565b60008060008385036102a08112156200052257600080fd5b6200052d856200031b565b9350601f1981016102608112156200054457600080fd5b6200054e6200034e565b60e08212156200055d57600080fd5b620005676200034e565b9150602087015182526040870151602083015260a0605f19840112156200058d57600080fd5b620005976200039e565b92506060870151835260808701516020840152620005b860a088016200031b565b6040840152620005cb60c08801620003c3565b6060840152620005de60e08801620003c3565b6080840152826040830152818152620005fc8861010089016200044a565b602082015262000611886101c089016200044a565b604082015280945050505061028084015190509250925092565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200065457600080fd5b6200065f826200031b565b9392505050565b60805160a05160c051611078620006cd60003960008181610148015281816102ec0152818161036e01526104b601526000818160e901526104170152600081816101e901528181610390015281816103e50152818161077901526107ee01526110786000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80637476083b1161008c578063930412af11610066578063930412af146101d45780639451944d146101dc578063cb23bcb5146101e4578063f0e978891461020b57600080fd5b80637476083b1461018a578063875b2af01461019d5780639252175b146101bd57600080fd5b80634b7a7538116100bd5780634b7a75381461013b57806351ed6a30146101435780636b74d5151461018257600080fd5b80632113ed21146100e457806326c0e5c51461011e57806330fc43ed14610128575b600080fd5b61010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610126610213565b005b610126610136366004610cd7565b61022e565b610126610354565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610115565b610126610474565b610126610198366004610cd7565b610484565b61010b6101ab366004610cf0565b60106020526000908152604090205481565b6101c5610516565b60405161011593929190610dd2565b610126610777565b6101266107ec565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b60035461010b565b3360009081526010602052604090205461022c9061022e565b565b336000908152601060205260408120549081900361027f576040517fe06b2da50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b808211156102c9576040517fa47b7c650000000000000000000000000000000000000000000000000000000081523360048201526024810183905260448101829052606401610276565b6102d38282610e68565b3360008181526010602052604090209190915561031b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169084610873565b60405182815233907f8108595eb6bad3acefa9da467d90cc2217686d5c5ac85460f8b7849c840645fc9060200160405180910390a25050565b600061035f60035490565b90506103b56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610921565b6040517f7300201c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637300201c9061043f9084906000907f000000000000000000000000000000000000000000000000000000000000000090600401610eee565b600060405180830381600087803b15801561045957600080fd5b505af115801561046d573d6000803e3d6000fd5b5050505050565b61047c610777565b61022c6107ec565b33600090815260106020526040812080548392906104a3908490610f81565b909155506104de90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084610a05565b60405181815233907f0a7bb2e28cc4698aac06db79cf9163bfcc20719286cf59fa7d492ceda1b8edc29060200160405180910390a250565b6040805160608082018352600080548352600154602080850191909152845160a08082018752600280548352600354938301939093526004546001600160a01b0381168389015274010000000000000000000000000000000000000000900467ffffffffffffffff9081168387015260055416608083015285870191909152855160e08101968790529495929493600693859391840192859284929186019184919082845b8154815260200190600101908083116105bb575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116105f3579050505050919092525050508152600382015460209091019060ff16600281111561066257610662610d19565b600281111561067357610673610d19565b8152600491909101546020909101526040805160e08101909152909190600b82018160608101828160a084018260028282826020028201915b8154815260200190600101908083116106ac575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116106e4579050505050919092525050508152600382015460209091019060ff16600281111561075357610753610d19565b600281111561076457610764610d19565b8152602001600482015481525050905083565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166357ef4ab96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107d257600080fd5b505af11580156107e6573d6000803e3d6000fd5b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663613739196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190610f94565b50565b6040516001600160a01b03831660248201526044810182905261091c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610a56565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af9190610f94565b6109b99190610f81565b6040516001600160a01b0385166024820152604481018290529091506107e69085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016108b8565b6040516001600160a01b03808516602483015283166044820152606481018290526107e69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016108b8565b6000610aab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b3b9092919063ffffffff16565b80519091501561091c5780806020019051810190610ac99190610fad565b61091c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610276565b6060610b4a8484600085610b54565b90505b9392505050565b606082471015610bcc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610276565b6001600160a01b0385163b610c235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610276565b600080866001600160a01b03168587604051610c3f9190610ff3565b60006040518083038185875af1925050503d8060008114610c7c576040519150601f19603f3d011682016040523d82523d6000602084013e610c81565b606091505b5091509150610c91828286610c9e565b925050505b949350505050565b60608315610cad575081610b4d565b825115610cbd5782518084602001fd5b8160405162461bcd60e51b8152600401610276919061100f565b600060208284031215610ce957600080fd5b5035919050565b600060208284031215610d0257600080fd5b81356001600160a01b0381168114610b4d57600080fd5b634e487b7160e01b600052602160045260246000fd5b60038110610d4d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610d78578251825260209283019290910190600101610d59565b505050602090810151906040840160005b6002811015610db057835167ffffffffffffffff1682529282019290820190600101610d89565b50508201519050610dc46080840182610d2f565b506040015160a09190910152565b6000610260820190508451825260208501516020830152604085015180516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050610e4460e0830185610d51565b610c966101a0830184610d51565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e7b57610e7b610e52565b92915050565b818160005b6002811015610ea5578154835260209092019160019182019101610e86565b505050600281015467ffffffffffffffff8082166040850152808260401c166060850152505060ff600382015416610ee06080840182610d2f565b506004015460a09190910152565b8381528254602082015260018301546040820152600283015460608201526003830154608082015260048301546001600160a01b03811660a0808401919091521c67ffffffffffffffff90811660c083015260058401541660e08201526102a08101610f61610100830160068601610e81565b610f726101c08301600b8601610e81565b82610280830152949350505050565b80820180821115610e7b57610e7b610e52565b600060208284031215610fa657600080fd5b5051919050565b600060208284031215610fbf57600080fd5b81518015158114610b4d57600080fd5b60005b83811015610fea578181015183820152602001610fd2565b50506000910152565b60008251611005818460208701610fcf565b9190910192915050565b602081526000825180602084015261102e816040850160208701610fcf565b601f01601f1916919091016040019291505056fea26469706673582212209087fdad40ab4da26397456263ffcb9377057af7edb54d6f02cda01ffdd72c0e64736f6c63430008110033a264697066735822122052476b12d560aa91318683075894d1d85091672ff176aade555a8ea430d5abe464736f6c63430008110033", } // AssertionStakingPoolCreatorABI is the input ABI used to generate the binding from. diff --git a/solgen/go/bridgegen/bridgegen.go b/solgen/go/bridgegen/bridgegen.go index 9dc257f6d..4e27744ab 100644 --- a/solgen/go/bridgegen/bridgegen.go +++ b/solgen/go/bridgegen/bridgegen.go @@ -29,6 +29,14 @@ var ( _ = abi.ConvertType ) +// IBridgeTimeBounds is an auto generated low-level Go binding around an user-defined struct. +type IBridgeTimeBounds struct { + MinTimestamp uint64 + MaxTimestamp uint64 + MinBlockNumber uint64 + MaxBlockNumber uint64 +} + // ISequencerInboxMaxTimeVariation is an auto generated low-level Go binding around an user-defined struct. type ISequencerInboxMaxTimeVariation struct { DelayBlocks *big.Int @@ -37,143 +45,113 @@ type ISequencerInboxMaxTimeVariation struct { FutureSeconds *big.Int } -// ISequencerInboxTimeBounds is an auto generated low-level Go binding around an user-defined struct. -type ISequencerInboxTimeBounds struct { - MinTimestamp uint64 - MaxTimestamp uint64 - MinBlockNumber uint64 - MaxBlockNumber uint64 -} - -// BridgeMetaData contains all meta data concerning the Bridge contract. -var BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516119d961003760003960008181610b660152610f9401526119d96000f3fe60806040526004361061017f5760003560e01c80639e5d4c49116100d6578063d5719dc21161007f578063eca067ad11610059578063eca067ad14610457578063ee35f3271461046c578063f81ff3b31461048c57600080fd5b8063d5719dc214610417578063e76f5c8d14610437578063e77145f41461023457600080fd5b8063c4d66de8116100b0578063c4d66de8146103b7578063cb23bcb5146103d7578063cee3d728146103f757600080fd5b80639e5d4c4914610337578063ab5d894314610365578063ae60bd131461037a57600080fd5b80635fca4a16116101385780638db5993b116101125780638db5993b146102cc578063919cc706146102df578063945e1147146102ff57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028c57600080fd5b8063413b35bd11610169578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a8575b600080fd5b34801561019057600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c33660046116da565b6104ac565b3480156101d457600080fd5b506102046101e336600461170b565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f36600461172f565b6104cd565b005b34801561024257600080fd5b5061023461025136600461170b565b6107d3565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b5061019561028736600461176d565b6108fe565b34801561029857600080fd5b506102ac6102a7366004611799565b61095f565b60408051948552602085019390935291830152606082015260800161019f565b6101956102da3660046117cb565b610af8565b3480156102eb57600080fd5b506102346102fa36600461170b565b610b5c565b34801561030b57600080fd5b5061031f61031a3660046116da565b610ca1565b6040516001600160a01b03909116815260200161019f565b34801561034357600080fd5b50610357610352366004611812565b610ccb565b60405161019f92919061189b565b34801561037157600080fd5b5061031f610e78565b34801561038657600080fd5b5061020461039536600461170b565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103c357600080fd5b506102346103d236600461170b565b610ebb565b3480156103e357600080fd5b5060085461031f906001600160a01b031681565b34801561040357600080fd5b5061023461041236600461172f565b6110ab565b34801561042357600080fd5b506101956104323660046116da565b611419565b34801561044357600080fd5b5061031f6104523660046116da565b611429565b34801561046357600080fd5b50600654610195565b34801561047857600080fd5b5060095461031f906001600160a01b031681565b34801561049857600080fd5b506102346104a73660046116da565b611439565b600781815481106104bc57600080fd5b600091825260209091200154905081565b6008546001600160a01b0316331461059c5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d91906118f3565b9050336001600160a01b0382161461059a57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106085750505050565b82156106a357604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600380546106b390600190611910565b815481106106c3576106c3611931565b6000918252602090912001548254600380546001600160a01b039093169290919081106106f2576106f2611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061074057610740611931565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600380548061077657610776611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6008546001600160a01b0316331461089d5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085391906118f3565b9050336001600160a01b0382161461089b57600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b6009546000906001600160a01b03163314610947576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610956600d8443424887611508565b90505b92915050565b6009546000908190819081906001600160a01b031633146109ae576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b85600a54141580156109bf57508515155b80156109cc5750600a5415155b15610a1157600a546040517fe2051feb000000000000000000000000000000000000000000000000000000008152600481019190915260248101879052604401610591565b600a85905560075493508315610a4f5760078054610a3190600190611910565b81548110610a4157610a41611931565b906000526020600020015492505b8615610a80576006610a62600189611910565b81548110610a7257610a72611931565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b3360009081526001602081905260408220015460ff16610b46576040517fb6c60ea3000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610b54848443424887611508565b949350505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bfa5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610c70576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610591565b50506008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60048181548110610cb157600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610d1c576040517f32ea82ab000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b8215801590610d3357506001600160a01b0386163b155b15610d75576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610591565b6005805473ffffffffffffffffffffffffffffffffffffffff19811633179091556040516001600160a01b03918216918816908790610db7908890889061195d565b60006040518083038185875af1925050503d8060008114610df4576040519150601f19603f3d011682016040523d82523d6000602084013e610df9565b606091505b506005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610e66908a908a908a9061196d565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000018101610eb657600091505090565b919050565b600054610100900460ff1615808015610edb5750600054600160ff909116105b80610ef55750303b158015610ef5575060005460ff166001145b610f675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610591565b6000805460ff191660011790558015610f8a576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110285760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556008805490911691841691909117905580156107cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6008546001600160a01b031633146111755760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906118f3565b9050336001600160a01b0382161461117357600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b038316016111e2576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610591565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a28215158115150361124f5750505050565b82156112eb57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600480546112fb90600190611910565b8154811061130b5761130b611931565b6000918252602090912001548254600480546001600160a01b0390931692909190811061133a5761133a611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460026000600485600001548154811061138857611388611931565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806113be576113be611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104bc57600080fd5b60038181548110610cb157600080fd5b6008546001600160a01b031633146115035760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b991906118f3565b9050336001600160a01b0382161461150157600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b600a55565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a5909201909252805191012060009190600082156116055760066115e7600185611910565b815481106115f7576115f7611931565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b6000602082840312156116ec57600080fd5b5035919050565b6001600160a01b038116811461170857600080fd5b50565b60006020828403121561171d57600080fd5b8135611728816116f3565b9392505050565b6000806040838503121561174257600080fd5b823561174d816116f3565b91506020830135801515811461176257600080fd5b809150509250929050565b6000806040838503121561178057600080fd5b823561178b816116f3565b946020939093013593505050565b600080600080608085870312156117af57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156117e057600080fd5b833560ff811681146117f157600080fd5b92506020840135611801816116f3565b929592945050506040919091013590565b6000806000806060858703121561182857600080fd5b8435611833816116f3565b935060208501359250604085013567ffffffffffffffff8082111561185757600080fd5b818701915087601f83011261186b57600080fd5b81358181111561187a57600080fd5b88602082850101111561188c57600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b818110156118d1578581018301518582016060015282016118b5565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561190557600080fd5b8151611728816116f3565b8181038181111561095957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220e17c4fa516aef1025bbd9042f6a81bce4320d01116e045245bb984afe41977fb64736f6c63430008110033", +// AbsBridgeMetaData contains all meta data concerning the AbsBridge contract. +var AbsBridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } -// BridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use BridgeMetaData.ABI instead. -var BridgeABI = BridgeMetaData.ABI - -// BridgeBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use BridgeMetaData.Bin instead. -var BridgeBin = BridgeMetaData.Bin - -// DeployBridge deploys a new Ethereum contract, binding an instance of Bridge to it. -func DeployBridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Bridge, error) { - parsed, err := BridgeMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BridgeBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Bridge{BridgeCaller: BridgeCaller{contract: contract}, BridgeTransactor: BridgeTransactor{contract: contract}, BridgeFilterer: BridgeFilterer{contract: contract}}, nil -} +// AbsBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use AbsBridgeMetaData.ABI instead. +var AbsBridgeABI = AbsBridgeMetaData.ABI -// Bridge is an auto generated Go binding around an Ethereum contract. -type Bridge struct { - BridgeCaller // Read-only binding to the contract - BridgeTransactor // Write-only binding to the contract - BridgeFilterer // Log filterer for contract events +// AbsBridge is an auto generated Go binding around an Ethereum contract. +type AbsBridge struct { + AbsBridgeCaller // Read-only binding to the contract + AbsBridgeTransactor // Write-only binding to the contract + AbsBridgeFilterer // Log filterer for contract events } -// BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type BridgeCaller struct { +// AbsBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type AbsBridgeCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type BridgeTransactor struct { +// AbsBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AbsBridgeTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type BridgeFilterer struct { +// AbsBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbsBridgeFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeSession is an auto generated Go binding around an Ethereum contract, +// AbsBridgeSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type BridgeSession struct { - Contract *Bridge // Generic contract binding to set the session for +type AbsBridgeSession struct { + Contract *AbsBridge // Generic contract binding to set the session for CallOpts bind.CallOpts // Call options to use throughout this session TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// AbsBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type BridgeCallerSession struct { - Contract *BridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type AbsBridgeCallerSession struct { + Contract *AbsBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// AbsBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type BridgeTransactorSession struct { - Contract *BridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type AbsBridgeTransactorSession struct { + Contract *AbsBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type BridgeRaw struct { - Contract *Bridge // Generic contract binding to access the raw methods on +// AbsBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type AbsBridgeRaw struct { + Contract *AbsBridge // Generic contract binding to access the raw methods on } -// BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type BridgeCallerRaw struct { - Contract *BridgeCaller // Generic read-only contract binding to access the raw methods on +// AbsBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbsBridgeCallerRaw struct { + Contract *AbsBridgeCaller // Generic read-only contract binding to access the raw methods on } -// BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type BridgeTransactorRaw struct { - Contract *BridgeTransactor // Generic write-only contract binding to access the raw methods on +// AbsBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbsBridgeTransactorRaw struct { + Contract *AbsBridgeTransactor // Generic write-only contract binding to access the raw methods on } -// NewBridge creates a new instance of Bridge, bound to a specific deployed contract. -func NewBridge(address common.Address, backend bind.ContractBackend) (*Bridge, error) { - contract, err := bindBridge(address, backend, backend, backend) +// NewAbsBridge creates a new instance of AbsBridge, bound to a specific deployed contract. +func NewAbsBridge(address common.Address, backend bind.ContractBackend) (*AbsBridge, error) { + contract, err := bindAbsBridge(address, backend, backend, backend) if err != nil { return nil, err } - return &Bridge{BridgeCaller: BridgeCaller{contract: contract}, BridgeTransactor: BridgeTransactor{contract: contract}, BridgeFilterer: BridgeFilterer{contract: contract}}, nil + return &AbsBridge{AbsBridgeCaller: AbsBridgeCaller{contract: contract}, AbsBridgeTransactor: AbsBridgeTransactor{contract: contract}, AbsBridgeFilterer: AbsBridgeFilterer{contract: contract}}, nil } -// NewBridgeCaller creates a new read-only instance of Bridge, bound to a specific deployed contract. -func NewBridgeCaller(address common.Address, caller bind.ContractCaller) (*BridgeCaller, error) { - contract, err := bindBridge(address, caller, nil, nil) +// NewAbsBridgeCaller creates a new read-only instance of AbsBridge, bound to a specific deployed contract. +func NewAbsBridgeCaller(address common.Address, caller bind.ContractCaller) (*AbsBridgeCaller, error) { + contract, err := bindAbsBridge(address, caller, nil, nil) if err != nil { return nil, err } - return &BridgeCaller{contract: contract}, nil + return &AbsBridgeCaller{contract: contract}, nil } -// NewBridgeTransactor creates a new write-only instance of Bridge, bound to a specific deployed contract. -func NewBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*BridgeTransactor, error) { - contract, err := bindBridge(address, nil, transactor, nil) +// NewAbsBridgeTransactor creates a new write-only instance of AbsBridge, bound to a specific deployed contract. +func NewAbsBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*AbsBridgeTransactor, error) { + contract, err := bindAbsBridge(address, nil, transactor, nil) if err != nil { return nil, err } - return &BridgeTransactor{contract: contract}, nil + return &AbsBridgeTransactor{contract: contract}, nil } -// NewBridgeFilterer creates a new log filterer instance of Bridge, bound to a specific deployed contract. -func NewBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*BridgeFilterer, error) { - contract, err := bindBridge(address, nil, nil, filterer) +// NewAbsBridgeFilterer creates a new log filterer instance of AbsBridge, bound to a specific deployed contract. +func NewAbsBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*AbsBridgeFilterer, error) { + contract, err := bindAbsBridge(address, nil, nil, filterer) if err != nil { return nil, err } - return &BridgeFilterer{contract: contract}, nil + return &AbsBridgeFilterer{contract: contract}, nil } -// bindBridge binds a generic wrapper to an already deployed contract. -func bindBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := BridgeMetaData.GetAbi() +// bindAbsBridge binds a generic wrapper to an already deployed contract. +func bindAbsBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AbsBridgeMetaData.GetAbi() if err != nil { return nil, err } @@ -184,46 +162,46 @@ func bindBridge(address common.Address, caller bind.ContractCaller, transactor b // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_Bridge *BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Bridge.Contract.BridgeCaller.contract.Call(opts, result, method, params...) +func (_AbsBridge *AbsBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsBridge.Contract.AbsBridgeCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_Bridge *BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Bridge.Contract.BridgeTransactor.contract.Transfer(opts) +func (_AbsBridge *AbsBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsBridge.Contract.AbsBridgeTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_Bridge *BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Bridge.Contract.BridgeTransactor.contract.Transact(opts, method, params...) +func (_AbsBridge *AbsBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsBridge.Contract.AbsBridgeTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_Bridge *BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Bridge.Contract.contract.Call(opts, result, method, params...) +func (_AbsBridge *AbsBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsBridge.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_Bridge *BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Bridge.Contract.contract.Transfer(opts) +func (_AbsBridge *AbsBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsBridge.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_Bridge *BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Bridge.Contract.contract.Transact(opts, method, params...) +func (_AbsBridge *AbsBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsBridge.Contract.contract.Transact(opts, method, params...) } // ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. // // Solidity: function activeOutbox() view returns(address) -func (_Bridge *BridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { +func (_AbsBridge *AbsBridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "activeOutbox") + err := _AbsBridge.contract.Call(opts, &out, "activeOutbox") if err != nil { return *new(common.Address), err @@ -238,23 +216,23 @@ func (_Bridge *BridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, // ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. // // Solidity: function activeOutbox() view returns(address) -func (_Bridge *BridgeSession) ActiveOutbox() (common.Address, error) { - return _Bridge.Contract.ActiveOutbox(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) ActiveOutbox() (common.Address, error) { + return _AbsBridge.Contract.ActiveOutbox(&_AbsBridge.CallOpts) } // ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. // // Solidity: function activeOutbox() view returns(address) -func (_Bridge *BridgeCallerSession) ActiveOutbox() (common.Address, error) { - return _Bridge.Contract.ActiveOutbox(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _AbsBridge.Contract.ActiveOutbox(&_AbsBridge.CallOpts) } // AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. // // Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) -func (_Bridge *BridgeCaller) AllowedDelayedInboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { +func (_AbsBridge *AbsBridgeCaller) AllowedDelayedInboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "allowedDelayedInboxList", arg0) + err := _AbsBridge.contract.Call(opts, &out, "allowedDelayedInboxList", arg0) if err != nil { return *new(common.Address), err @@ -269,23 +247,23 @@ func (_Bridge *BridgeCaller) AllowedDelayedInboxList(opts *bind.CallOpts, arg0 * // AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. // // Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) -func (_Bridge *BridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { - return _Bridge.Contract.AllowedDelayedInboxList(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _AbsBridge.Contract.AllowedDelayedInboxList(&_AbsBridge.CallOpts, arg0) } // AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. // // Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) -func (_Bridge *BridgeCallerSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { - return _Bridge.Contract.AllowedDelayedInboxList(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeCallerSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _AbsBridge.Contract.AllowedDelayedInboxList(&_AbsBridge.CallOpts, arg0) } // AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. // // Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_Bridge *BridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { +func (_AbsBridge *AbsBridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + err := _AbsBridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) if err != nil { return *new(bool), err @@ -300,23 +278,23 @@ func (_Bridge *BridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox co // AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. // // Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_Bridge *BridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { - return _Bridge.Contract.AllowedDelayedInboxes(&_Bridge.CallOpts, inbox) +func (_AbsBridge *AbsBridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _AbsBridge.Contract.AllowedDelayedInboxes(&_AbsBridge.CallOpts, inbox) } // AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. // // Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_Bridge *BridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { - return _Bridge.Contract.AllowedDelayedInboxes(&_Bridge.CallOpts, inbox) +func (_AbsBridge *AbsBridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _AbsBridge.Contract.AllowedDelayedInboxes(&_AbsBridge.CallOpts, inbox) } // AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. // // Solidity: function allowedOutboxList(uint256 ) view returns(address) -func (_Bridge *BridgeCaller) AllowedOutboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { +func (_AbsBridge *AbsBridgeCaller) AllowedOutboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "allowedOutboxList", arg0) + err := _AbsBridge.contract.Call(opts, &out, "allowedOutboxList", arg0) if err != nil { return *new(common.Address), err @@ -331,23 +309,23 @@ func (_Bridge *BridgeCaller) AllowedOutboxList(opts *bind.CallOpts, arg0 *big.In // AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. // // Solidity: function allowedOutboxList(uint256 ) view returns(address) -func (_Bridge *BridgeSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { - return _Bridge.Contract.AllowedOutboxList(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _AbsBridge.Contract.AllowedOutboxList(&_AbsBridge.CallOpts, arg0) } // AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. // // Solidity: function allowedOutboxList(uint256 ) view returns(address) -func (_Bridge *BridgeCallerSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { - return _Bridge.Contract.AllowedOutboxList(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeCallerSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _AbsBridge.Contract.AllowedOutboxList(&_AbsBridge.CallOpts, arg0) } // AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. // // Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_Bridge *BridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { +func (_AbsBridge *AbsBridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + err := _AbsBridge.contract.Call(opts, &out, "allowedOutboxes", outbox) if err != nil { return *new(bool), err @@ -362,23 +340,23 @@ func (_Bridge *BridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common. // AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. // // Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_Bridge *BridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { - return _Bridge.Contract.AllowedOutboxes(&_Bridge.CallOpts, outbox) +func (_AbsBridge *AbsBridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _AbsBridge.Contract.AllowedOutboxes(&_AbsBridge.CallOpts, outbox) } // AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. // // Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_Bridge *BridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { - return _Bridge.Contract.AllowedOutboxes(&_Bridge.CallOpts, outbox) +func (_AbsBridge *AbsBridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _AbsBridge.Contract.AllowedOutboxes(&_AbsBridge.CallOpts, outbox) } // DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. // // Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { +func (_AbsBridge *AbsBridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + err := _AbsBridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) if err != nil { return *new([32]byte), err @@ -393,23 +371,23 @@ func (_Bridge *BridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int // DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. // // Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _Bridge.Contract.DelayedInboxAccs(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _AbsBridge.Contract.DelayedInboxAccs(&_AbsBridge.CallOpts, arg0) } // DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. // // Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _Bridge.Contract.DelayedInboxAccs(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _AbsBridge.Contract.DelayedInboxAccs(&_AbsBridge.CallOpts, arg0) } // DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. // // Solidity: function delayedMessageCount() view returns(uint256) -func (_Bridge *BridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { +func (_AbsBridge *AbsBridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "delayedMessageCount") + err := _AbsBridge.contract.Call(opts, &out, "delayedMessageCount") if err != nil { return *new(*big.Int), err @@ -424,23 +402,23 @@ func (_Bridge *BridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, // DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. // // Solidity: function delayedMessageCount() view returns(uint256) -func (_Bridge *BridgeSession) DelayedMessageCount() (*big.Int, error) { - return _Bridge.Contract.DelayedMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) DelayedMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.DelayedMessageCount(&_AbsBridge.CallOpts) } // DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. // // Solidity: function delayedMessageCount() view returns(uint256) -func (_Bridge *BridgeCallerSession) DelayedMessageCount() (*big.Int, error) { - return _Bridge.Contract.DelayedMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.DelayedMessageCount(&_AbsBridge.CallOpts) } // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // // Solidity: function rollup() view returns(address) -func (_Bridge *BridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { +func (_AbsBridge *AbsBridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "rollup") + err := _AbsBridge.contract.Call(opts, &out, "rollup") if err != nil { return *new(common.Address), err @@ -455,23 +433,23 @@ func (_Bridge *BridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // // Solidity: function rollup() view returns(address) -func (_Bridge *BridgeSession) Rollup() (common.Address, error) { - return _Bridge.Contract.Rollup(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) Rollup() (common.Address, error) { + return _AbsBridge.Contract.Rollup(&_AbsBridge.CallOpts) } // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // // Solidity: function rollup() view returns(address) -func (_Bridge *BridgeCallerSession) Rollup() (common.Address, error) { - return _Bridge.Contract.Rollup(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) Rollup() (common.Address, error) { + return _AbsBridge.Contract.Rollup(&_AbsBridge.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_Bridge *BridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { +func (_AbsBridge *AbsBridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "sequencerInbox") + err := _AbsBridge.contract.Call(opts, &out, "sequencerInbox") if err != nil { return *new(common.Address), err @@ -486,23 +464,23 @@ func (_Bridge *BridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_Bridge *BridgeSession) SequencerInbox() (common.Address, error) { - return _Bridge.Contract.SequencerInbox(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) SequencerInbox() (common.Address, error) { + return _AbsBridge.Contract.SequencerInbox(&_AbsBridge.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_Bridge *BridgeCallerSession) SequencerInbox() (common.Address, error) { - return _Bridge.Contract.SequencerInbox(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) SequencerInbox() (common.Address, error) { + return _AbsBridge.Contract.SequencerInbox(&_AbsBridge.CallOpts) } // SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. // // Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { +func (_AbsBridge *AbsBridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + err := _AbsBridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) if err != nil { return *new([32]byte), err @@ -517,23 +495,23 @@ func (_Bridge *BridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.I // SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. // // Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _Bridge.Contract.SequencerInboxAccs(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _AbsBridge.Contract.SequencerInboxAccs(&_AbsBridge.CallOpts, arg0) } // SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. // // Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_Bridge *BridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _Bridge.Contract.SequencerInboxAccs(&_Bridge.CallOpts, arg0) +func (_AbsBridge *AbsBridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _AbsBridge.Contract.SequencerInboxAccs(&_AbsBridge.CallOpts, arg0) } // SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. // // Solidity: function sequencerMessageCount() view returns(uint256) -func (_Bridge *BridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { +func (_AbsBridge *AbsBridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "sequencerMessageCount") + err := _AbsBridge.contract.Call(opts, &out, "sequencerMessageCount") if err != nil { return *new(*big.Int), err @@ -548,23 +526,23 @@ func (_Bridge *BridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.In // SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. // // Solidity: function sequencerMessageCount() view returns(uint256) -func (_Bridge *BridgeSession) SequencerMessageCount() (*big.Int, error) { - return _Bridge.Contract.SequencerMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) SequencerMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.SequencerMessageCount(&_AbsBridge.CallOpts) } // SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. // // Solidity: function sequencerMessageCount() view returns(uint256) -func (_Bridge *BridgeCallerSession) SequencerMessageCount() (*big.Int, error) { - return _Bridge.Contract.SequencerMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.SequencerMessageCount(&_AbsBridge.CallOpts) } // SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. // // Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_Bridge *BridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { +func (_AbsBridge *AbsBridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Bridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + err := _AbsBridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") if err != nil { return *new(*big.Int), err @@ -579,251 +557,209 @@ func (_Bridge *BridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpt // SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. // // Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_Bridge *BridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { - return _Bridge.Contract.SequencerReportedSubMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.SequencerReportedSubMessageCount(&_AbsBridge.CallOpts) } // SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. // // Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_Bridge *BridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { - return _Bridge.Contract.SequencerReportedSubMessageCount(&_Bridge.CallOpts) +func (_AbsBridge *AbsBridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _AbsBridge.Contract.SequencerReportedSubMessageCount(&_AbsBridge.CallOpts) } // AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. // // Solidity: function acceptFundsFromOldBridge() payable returns() -func (_Bridge *BridgeTransactor) AcceptFundsFromOldBridge(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "acceptFundsFromOldBridge") +func (_AbsBridge *AbsBridgeTransactor) AcceptFundsFromOldBridge(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "acceptFundsFromOldBridge") } // AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. // // Solidity: function acceptFundsFromOldBridge() payable returns() -func (_Bridge *BridgeSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { - return _Bridge.Contract.AcceptFundsFromOldBridge(&_Bridge.TransactOpts) +func (_AbsBridge *AbsBridgeSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _AbsBridge.Contract.AcceptFundsFromOldBridge(&_AbsBridge.TransactOpts) } // AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. // // Solidity: function acceptFundsFromOldBridge() payable returns() -func (_Bridge *BridgeTransactorSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { - return _Bridge.Contract.AcceptFundsFromOldBridge(&_Bridge.TransactOpts) -} - -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. -// -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_Bridge *BridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash) -} - -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. -// -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_Bridge *BridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.Contract.EnqueueDelayedMessage(&_Bridge.TransactOpts, kind, sender, messageDataHash) -} - -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. -// -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_Bridge *BridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.Contract.EnqueueDelayedMessage(&_Bridge.TransactOpts, kind, sender, messageDataHash) +func (_AbsBridge *AbsBridgeTransactorSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _AbsBridge.Contract.AcceptFundsFromOldBridge(&_AbsBridge.TransactOpts) } // EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. // // Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_Bridge *BridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +func (_AbsBridge *AbsBridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) } // EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. // // Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_Bridge *BridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _Bridge.Contract.EnqueueSequencerMessage(&_Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +func (_AbsBridge *AbsBridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.Contract.EnqueueSequencerMessage(&_AbsBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) } // EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. // // Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_Bridge *BridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _Bridge.Contract.EnqueueSequencerMessage(&_Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +func (_AbsBridge *AbsBridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.Contract.EnqueueSequencerMessage(&_AbsBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) } // ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // // Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_Bridge *BridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "executeCall", to, value, data) +func (_AbsBridge *AbsBridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "executeCall", to, value, data) } // ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // // Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_Bridge *BridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _Bridge.Contract.ExecuteCall(&_Bridge.TransactOpts, to, value, data) +func (_AbsBridge *AbsBridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsBridge.Contract.ExecuteCall(&_AbsBridge.TransactOpts, to, value, data) } // ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // // Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_Bridge *BridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _Bridge.Contract.ExecuteCall(&_Bridge.TransactOpts, to, value, data) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address rollup_) returns() -func (_Bridge *BridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "initialize", rollup_) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address rollup_) returns() -func (_Bridge *BridgeSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _Bridge.Contract.Initialize(&_Bridge.TransactOpts, rollup_) -} - -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. -// -// Solidity: function initialize(address rollup_) returns() -func (_Bridge *BridgeTransactorSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _Bridge.Contract.Initialize(&_Bridge.TransactOpts, rollup_) +func (_AbsBridge *AbsBridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsBridge.Contract.ExecuteCall(&_AbsBridge.TransactOpts, to, value, data) } // SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. // // Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_Bridge *BridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +func (_AbsBridge *AbsBridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) } // SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. // // Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_Bridge *BridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.Contract.SetDelayedInbox(&_Bridge.TransactOpts, inbox, enabled) +func (_AbsBridge *AbsBridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.Contract.SetDelayedInbox(&_AbsBridge.TransactOpts, inbox, enabled) } // SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. // // Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_Bridge *BridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.Contract.SetDelayedInbox(&_Bridge.TransactOpts, inbox, enabled) +func (_AbsBridge *AbsBridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.Contract.SetDelayedInbox(&_AbsBridge.TransactOpts, inbox, enabled) } // SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. // // Solidity: function setOutbox(address outbox, bool enabled) returns() -func (_Bridge *BridgeTransactor) SetOutbox(opts *bind.TransactOpts, outbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "setOutbox", outbox, enabled) +func (_AbsBridge *AbsBridgeTransactor) SetOutbox(opts *bind.TransactOpts, outbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "setOutbox", outbox, enabled) } // SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. // // Solidity: function setOutbox(address outbox, bool enabled) returns() -func (_Bridge *BridgeSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.Contract.SetOutbox(&_Bridge.TransactOpts, outbox, enabled) +func (_AbsBridge *AbsBridgeSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.Contract.SetOutbox(&_AbsBridge.TransactOpts, outbox, enabled) } // SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. // // Solidity: function setOutbox(address outbox, bool enabled) returns() -func (_Bridge *BridgeTransactorSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { - return _Bridge.Contract.SetOutbox(&_Bridge.TransactOpts, outbox, enabled) +func (_AbsBridge *AbsBridgeTransactorSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _AbsBridge.Contract.SetOutbox(&_AbsBridge.TransactOpts, outbox, enabled) } // SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. // // Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_Bridge *BridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +func (_AbsBridge *AbsBridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) } // SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. // // Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_Bridge *BridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { - return _Bridge.Contract.SetSequencerInbox(&_Bridge.TransactOpts, _sequencerInbox) +func (_AbsBridge *AbsBridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsBridge.Contract.SetSequencerInbox(&_AbsBridge.TransactOpts, _sequencerInbox) } // SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. // // Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_Bridge *BridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { - return _Bridge.Contract.SetSequencerInbox(&_Bridge.TransactOpts, _sequencerInbox) +func (_AbsBridge *AbsBridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsBridge.Contract.SetSequencerInbox(&_AbsBridge.TransactOpts, _sequencerInbox) } // SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. // // Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() -func (_Bridge *BridgeTransactor) SetSequencerReportedSubMessageCount(opts *bind.TransactOpts, newMsgCount *big.Int) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "setSequencerReportedSubMessageCount", newMsgCount) +func (_AbsBridge *AbsBridgeTransactor) SetSequencerReportedSubMessageCount(opts *bind.TransactOpts, newMsgCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "setSequencerReportedSubMessageCount", newMsgCount) } // SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. // // Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() -func (_Bridge *BridgeSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { - return _Bridge.Contract.SetSequencerReportedSubMessageCount(&_Bridge.TransactOpts, newMsgCount) +func (_AbsBridge *AbsBridgeSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.Contract.SetSequencerReportedSubMessageCount(&_AbsBridge.TransactOpts, newMsgCount) } // SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. // // Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() -func (_Bridge *BridgeTransactorSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { - return _Bridge.Contract.SetSequencerReportedSubMessageCount(&_Bridge.TransactOpts, newMsgCount) +func (_AbsBridge *AbsBridgeTransactorSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _AbsBridge.Contract.SetSequencerReportedSubMessageCount(&_AbsBridge.TransactOpts, newMsgCount) } // SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. // // Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) -func (_Bridge *BridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "submitBatchSpendingReport", sender, messageDataHash) +func (_AbsBridge *AbsBridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "submitBatchSpendingReport", sender, messageDataHash) } // SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. // // Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) -func (_Bridge *BridgeSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.Contract.SubmitBatchSpendingReport(&_Bridge.TransactOpts, sender, messageDataHash) +func (_AbsBridge *AbsBridgeSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _AbsBridge.Contract.SubmitBatchSpendingReport(&_AbsBridge.TransactOpts, sender, messageDataHash) } // SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. // // Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) -func (_Bridge *BridgeTransactorSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _Bridge.Contract.SubmitBatchSpendingReport(&_Bridge.TransactOpts, sender, messageDataHash) +func (_AbsBridge *AbsBridgeTransactorSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _AbsBridge.Contract.SubmitBatchSpendingReport(&_AbsBridge.TransactOpts, sender, messageDataHash) } // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. // // Solidity: function updateRollupAddress(address _rollup) returns() -func (_Bridge *BridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { - return _Bridge.contract.Transact(opts, "updateRollupAddress", _rollup) +func (_AbsBridge *AbsBridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _AbsBridge.contract.Transact(opts, "updateRollupAddress", _rollup) } // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. // // Solidity: function updateRollupAddress(address _rollup) returns() -func (_Bridge *BridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { - return _Bridge.Contract.UpdateRollupAddress(&_Bridge.TransactOpts, _rollup) +func (_AbsBridge *AbsBridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _AbsBridge.Contract.UpdateRollupAddress(&_AbsBridge.TransactOpts, _rollup) } // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. // // Solidity: function updateRollupAddress(address _rollup) returns() -func (_Bridge *BridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { - return _Bridge.Contract.UpdateRollupAddress(&_Bridge.TransactOpts, _rollup) +func (_AbsBridge *AbsBridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _AbsBridge.Contract.UpdateRollupAddress(&_AbsBridge.TransactOpts, _rollup) } -// BridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the Bridge contract. -type BridgeBridgeCallTriggeredIterator struct { - Event *BridgeBridgeCallTriggered // Event containing the contract specifics and raw log +// AbsBridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the AbsBridge contract. +type AbsBridgeBridgeCallTriggeredIterator struct { + Event *AbsBridgeBridgeCallTriggered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -837,7 +773,7 @@ type BridgeBridgeCallTriggeredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeBridgeCallTriggeredIterator) Next() bool { +func (it *AbsBridgeBridgeCallTriggeredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -846,7 +782,7 @@ func (it *BridgeBridgeCallTriggeredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeBridgeCallTriggered) + it.Event = new(AbsBridgeBridgeCallTriggered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -861,7 +797,7 @@ func (it *BridgeBridgeCallTriggeredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeBridgeCallTriggered) + it.Event = new(AbsBridgeBridgeCallTriggered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -877,19 +813,19 @@ func (it *BridgeBridgeCallTriggeredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeBridgeCallTriggeredIterator) Error() error { +func (it *AbsBridgeBridgeCallTriggeredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeBridgeCallTriggeredIterator) Close() error { +func (it *AbsBridgeBridgeCallTriggeredIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the Bridge contract. -type BridgeBridgeCallTriggered struct { +// AbsBridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the AbsBridge contract. +type AbsBridgeBridgeCallTriggered struct { Outbox common.Address To common.Address Value *big.Int @@ -900,7 +836,7 @@ type BridgeBridgeCallTriggered struct { // FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. // // Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_Bridge *BridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*BridgeBridgeCallTriggeredIterator, error) { +func (_AbsBridge *AbsBridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*AbsBridgeBridgeCallTriggeredIterator, error) { var outboxRule []interface{} for _, outboxItem := range outbox { @@ -911,17 +847,17 @@ func (_Bridge *BridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, toRule = append(toRule, toItem) } - logs, sub, err := _Bridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) if err != nil { return nil, err } - return &BridgeBridgeCallTriggeredIterator{contract: _Bridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil + return &AbsBridgeBridgeCallTriggeredIterator{contract: _AbsBridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil } // WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. // // Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_Bridge *BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *BridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { +func (_AbsBridge *AbsBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *AbsBridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { var outboxRule []interface{} for _, outboxItem := range outbox { @@ -932,7 +868,7 @@ func (_Bridge *BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, si toRule = append(toRule, toItem) } - logs, sub, err := _Bridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) if err != nil { return nil, err } @@ -942,8 +878,8 @@ func (_Bridge *BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, si select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeBridgeCallTriggered) - if err := _Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + event := new(AbsBridgeBridgeCallTriggered) + if err := _AbsBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { return err } event.Raw = log @@ -967,18 +903,18 @@ func (_Bridge *BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, si // ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. // // Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_Bridge *BridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*BridgeBridgeCallTriggered, error) { - event := new(BridgeBridgeCallTriggered) - if err := _Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { +func (_AbsBridge *AbsBridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*AbsBridgeBridgeCallTriggered, error) { + event := new(AbsBridgeBridgeCallTriggered) + if err := _AbsBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the Bridge contract. -type BridgeInboxToggleIterator struct { - Event *BridgeInboxToggle // Event containing the contract specifics and raw log +// AbsBridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the AbsBridge contract. +type AbsBridgeInboxToggleIterator struct { + Event *AbsBridgeInboxToggle // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -992,7 +928,7 @@ type BridgeInboxToggleIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeInboxToggleIterator) Next() bool { +func (it *AbsBridgeInboxToggleIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1001,7 +937,7 @@ func (it *BridgeInboxToggleIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeInboxToggle) + it.Event = new(AbsBridgeInboxToggle) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1016,7 +952,7 @@ func (it *BridgeInboxToggleIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeInboxToggle) + it.Event = new(AbsBridgeInboxToggle) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1032,19 +968,19 @@ func (it *BridgeInboxToggleIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeInboxToggleIterator) Error() error { +func (it *AbsBridgeInboxToggleIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeInboxToggleIterator) Close() error { +func (it *AbsBridgeInboxToggleIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeInboxToggle represents a InboxToggle event raised by the Bridge contract. -type BridgeInboxToggle struct { +// AbsBridgeInboxToggle represents a InboxToggle event raised by the AbsBridge contract. +type AbsBridgeInboxToggle struct { Inbox common.Address Enabled bool Raw types.Log // Blockchain specific contextual infos @@ -1053,31 +989,31 @@ type BridgeInboxToggle struct { // FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. // // Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_Bridge *BridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*BridgeInboxToggleIterator, error) { +func (_AbsBridge *AbsBridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*AbsBridgeInboxToggleIterator, error) { var inboxRule []interface{} for _, inboxItem := range inbox { inboxRule = append(inboxRule, inboxItem) } - logs, sub, err := _Bridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) if err != nil { return nil, err } - return &BridgeInboxToggleIterator{contract: _Bridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil + return &AbsBridgeInboxToggleIterator{contract: _AbsBridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil } // WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. // // Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_Bridge *BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *BridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { +func (_AbsBridge *AbsBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *AbsBridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { var inboxRule []interface{} for _, inboxItem := range inbox { inboxRule = append(inboxRule, inboxItem) } - logs, sub, err := _Bridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) if err != nil { return nil, err } @@ -1087,8 +1023,8 @@ func (_Bridge *BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan< select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeInboxToggle) - if err := _Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + event := new(AbsBridgeInboxToggle) + if err := _AbsBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { return err } event.Raw = log @@ -1112,18 +1048,18 @@ func (_Bridge *BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan< // ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. // // Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_Bridge *BridgeFilterer) ParseInboxToggle(log types.Log) (*BridgeInboxToggle, error) { - event := new(BridgeInboxToggle) - if err := _Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { +func (_AbsBridge *AbsBridgeFilterer) ParseInboxToggle(log types.Log) (*AbsBridgeInboxToggle, error) { + event := new(AbsBridgeInboxToggle) + if err := _AbsBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Bridge contract. -type BridgeInitializedIterator struct { - Event *BridgeInitialized // Event containing the contract specifics and raw log +// AbsBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AbsBridge contract. +type AbsBridgeInitializedIterator struct { + Event *AbsBridgeInitialized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1137,7 +1073,7 @@ type BridgeInitializedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeInitializedIterator) Next() bool { +func (it *AbsBridgeInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1146,7 +1082,7 @@ func (it *BridgeInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeInitialized) + it.Event = new(AbsBridgeInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1161,7 +1097,7 @@ func (it *BridgeInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeInitialized) + it.Event = new(AbsBridgeInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1177,19 +1113,19 @@ func (it *BridgeInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeInitializedIterator) Error() error { +func (it *AbsBridgeInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeInitializedIterator) Close() error { +func (it *AbsBridgeInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeInitialized represents a Initialized event raised by the Bridge contract. -type BridgeInitialized struct { +// AbsBridgeInitialized represents a Initialized event raised by the AbsBridge contract. +type AbsBridgeInitialized struct { Version uint8 Raw types.Log // Blockchain specific contextual infos } @@ -1197,21 +1133,21 @@ type BridgeInitialized struct { // FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // // Solidity: event Initialized(uint8 version) -func (_Bridge *BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*BridgeInitializedIterator, error) { +func (_AbsBridge *AbsBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*AbsBridgeInitializedIterator, error) { - logs, sub, err := _Bridge.contract.FilterLogs(opts, "Initialized") + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &BridgeInitializedIterator{contract: _Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &AbsBridgeInitializedIterator{contract: _AbsBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil } // WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // // Solidity: event Initialized(uint8 version) -func (_Bridge *BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BridgeInitialized) (event.Subscription, error) { +func (_AbsBridge *AbsBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AbsBridgeInitialized) (event.Subscription, error) { - logs, sub, err := _Bridge.contract.WatchLogs(opts, "Initialized") + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -1221,8 +1157,8 @@ func (_Bridge *BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan< select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeInitialized) - if err := _Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(AbsBridgeInitialized) + if err := _AbsBridge.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -1246,18 +1182,18 @@ func (_Bridge *BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan< // ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // // Solidity: event Initialized(uint8 version) -func (_Bridge *BridgeFilterer) ParseInitialized(log types.Log) (*BridgeInitialized, error) { - event := new(BridgeInitialized) - if err := _Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { +func (_AbsBridge *AbsBridgeFilterer) ParseInitialized(log types.Log) (*AbsBridgeInitialized, error) { + event := new(AbsBridgeInitialized) + if err := _AbsBridge.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the Bridge contract. -type BridgeMessageDeliveredIterator struct { - Event *BridgeMessageDelivered // Event containing the contract specifics and raw log +// AbsBridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the AbsBridge contract. +type AbsBridgeMessageDeliveredIterator struct { + Event *AbsBridgeMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1271,7 +1207,7 @@ type BridgeMessageDeliveredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeMessageDeliveredIterator) Next() bool { +func (it *AbsBridgeMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1280,7 +1216,7 @@ func (it *BridgeMessageDeliveredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeMessageDelivered) + it.Event = new(AbsBridgeMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1295,7 +1231,7 @@ func (it *BridgeMessageDeliveredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeMessageDelivered) + it.Event = new(AbsBridgeMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1311,19 +1247,19 @@ func (it *BridgeMessageDeliveredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeMessageDeliveredIterator) Error() error { +func (it *AbsBridgeMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeMessageDeliveredIterator) Close() error { +func (it *AbsBridgeMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeMessageDelivered represents a MessageDelivered event raised by the Bridge contract. -type BridgeMessageDelivered struct { +// AbsBridgeMessageDelivered represents a MessageDelivered event raised by the AbsBridge contract. +type AbsBridgeMessageDelivered struct { MessageIndex *big.Int BeforeInboxAcc [32]byte Inbox common.Address @@ -1338,7 +1274,7 @@ type BridgeMessageDelivered struct { // FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. // // Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_Bridge *BridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*BridgeMessageDeliveredIterator, error) { +func (_AbsBridge *AbsBridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*AbsBridgeMessageDeliveredIterator, error) { var messageIndexRule []interface{} for _, messageIndexItem := range messageIndex { @@ -1349,17 +1285,17 @@ func (_Bridge *BridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, mes beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) } - logs, sub, err := _Bridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) if err != nil { return nil, err } - return &BridgeMessageDeliveredIterator{contract: _Bridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil + return &AbsBridgeMessageDeliveredIterator{contract: _AbsBridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil } // WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. // // Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_Bridge *BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *BridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { +func (_AbsBridge *AbsBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *AbsBridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { var messageIndexRule []interface{} for _, messageIndexItem := range messageIndex { @@ -1370,7 +1306,7 @@ func (_Bridge *BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) } - logs, sub, err := _Bridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) if err != nil { return nil, err } @@ -1380,8 +1316,8 @@ func (_Bridge *BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeMessageDelivered) - if err := _Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + event := new(AbsBridgeMessageDelivered) + if err := _AbsBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { return err } event.Raw = log @@ -1405,18 +1341,18 @@ func (_Bridge *BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink // ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. // // Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_Bridge *BridgeFilterer) ParseMessageDelivered(log types.Log) (*BridgeMessageDelivered, error) { - event := new(BridgeMessageDelivered) - if err := _Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { +func (_AbsBridge *AbsBridgeFilterer) ParseMessageDelivered(log types.Log) (*AbsBridgeMessageDelivered, error) { + event := new(AbsBridgeMessageDelivered) + if err := _AbsBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the Bridge contract. -type BridgeOutboxToggleIterator struct { - Event *BridgeOutboxToggle // Event containing the contract specifics and raw log +// AbsBridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the AbsBridge contract. +type AbsBridgeOutboxToggleIterator struct { + Event *AbsBridgeOutboxToggle // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1430,7 +1366,7 @@ type BridgeOutboxToggleIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeOutboxToggleIterator) Next() bool { +func (it *AbsBridgeOutboxToggleIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1439,7 +1375,7 @@ func (it *BridgeOutboxToggleIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeOutboxToggle) + it.Event = new(AbsBridgeOutboxToggle) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1454,7 +1390,7 @@ func (it *BridgeOutboxToggleIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeOutboxToggle) + it.Event = new(AbsBridgeOutboxToggle) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1470,19 +1406,19 @@ func (it *BridgeOutboxToggleIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeOutboxToggleIterator) Error() error { +func (it *AbsBridgeOutboxToggleIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeOutboxToggleIterator) Close() error { +func (it *AbsBridgeOutboxToggleIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeOutboxToggle represents a OutboxToggle event raised by the Bridge contract. -type BridgeOutboxToggle struct { +// AbsBridgeOutboxToggle represents a OutboxToggle event raised by the AbsBridge contract. +type AbsBridgeOutboxToggle struct { Outbox common.Address Enabled bool Raw types.Log // Blockchain specific contextual infos @@ -1491,31 +1427,31 @@ type BridgeOutboxToggle struct { // FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. // // Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_Bridge *BridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*BridgeOutboxToggleIterator, error) { +func (_AbsBridge *AbsBridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*AbsBridgeOutboxToggleIterator, error) { var outboxRule []interface{} for _, outboxItem := range outbox { outboxRule = append(outboxRule, outboxItem) } - logs, sub, err := _Bridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) if err != nil { return nil, err } - return &BridgeOutboxToggleIterator{contract: _Bridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil + return &AbsBridgeOutboxToggleIterator{contract: _AbsBridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil } // WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. // // Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_Bridge *BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *BridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { +func (_AbsBridge *AbsBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *AbsBridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { var outboxRule []interface{} for _, outboxItem := range outbox { outboxRule = append(outboxRule, outboxItem) } - logs, sub, err := _Bridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) if err != nil { return nil, err } @@ -1525,8 +1461,8 @@ func (_Bridge *BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeOutboxToggle) - if err := _Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + event := new(AbsBridgeOutboxToggle) + if err := _AbsBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { return err } event.Raw = log @@ -1550,18 +1486,18 @@ func (_Bridge *BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan // ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. // // Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_Bridge *BridgeFilterer) ParseOutboxToggle(log types.Log) (*BridgeOutboxToggle, error) { - event := new(BridgeOutboxToggle) - if err := _Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { +func (_AbsBridge *AbsBridgeFilterer) ParseOutboxToggle(log types.Log) (*AbsBridgeOutboxToggle, error) { + event := new(AbsBridgeOutboxToggle) + if err := _AbsBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the Bridge contract. -type BridgeSequencerInboxUpdatedIterator struct { - Event *BridgeSequencerInboxUpdated // Event containing the contract specifics and raw log +// AbsBridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the AbsBridge contract. +type AbsBridgeRollupUpdatedIterator struct { + Event *AbsBridgeRollupUpdated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1575,7 +1511,7 @@ type BridgeSequencerInboxUpdatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeSequencerInboxUpdatedIterator) Next() bool { +func (it *AbsBridgeRollupUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1584,7 +1520,7 @@ func (it *BridgeSequencerInboxUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeSequencerInboxUpdated) + it.Event = new(AbsBridgeRollupUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1599,7 +1535,7 @@ func (it *BridgeSequencerInboxUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeSequencerInboxUpdated) + it.Event = new(AbsBridgeRollupUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1615,41 +1551,41 @@ func (it *BridgeSequencerInboxUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeSequencerInboxUpdatedIterator) Error() error { +func (it *AbsBridgeRollupUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeSequencerInboxUpdatedIterator) Close() error { +func (it *AbsBridgeRollupUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the Bridge contract. -type BridgeSequencerInboxUpdated struct { - NewSequencerInbox common.Address - Raw types.Log // Blockchain specific contextual infos +// AbsBridgeRollupUpdated represents a RollupUpdated event raised by the AbsBridge contract. +type AbsBridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_Bridge *BridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*BridgeSequencerInboxUpdatedIterator, error) { +// Solidity: event RollupUpdated(address rollup) +func (_AbsBridge *AbsBridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*AbsBridgeRollupUpdatedIterator, error) { - logs, sub, err := _Bridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "RollupUpdated") if err != nil { return nil, err } - return &BridgeSequencerInboxUpdatedIterator{contract: _Bridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil + return &AbsBridgeRollupUpdatedIterator{contract: _AbsBridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil } -// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_Bridge *BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *BridgeSequencerInboxUpdated) (event.Subscription, error) { +// Solidity: event RollupUpdated(address rollup) +func (_AbsBridge *AbsBridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *AbsBridgeRollupUpdated) (event.Subscription, error) { - logs, sub, err := _Bridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "RollupUpdated") if err != nil { return nil, err } @@ -1659,8 +1595,8 @@ func (_Bridge *BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeSequencerInboxUpdated) - if err := _Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + event := new(AbsBridgeRollupUpdated) + if err := _AbsBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { return err } event.Raw = log @@ -1681,125 +1617,259 @@ func (_Bridge *BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, }), nil } -// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_Bridge *BridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*BridgeSequencerInboxUpdated, error) { - event := new(BridgeSequencerInboxUpdated) - if err := _Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { +// Solidity: event RollupUpdated(address rollup) +func (_AbsBridge *AbsBridgeFilterer) ParseRollupUpdated(log types.Log) (*AbsBridgeRollupUpdated, error) { + event := new(AbsBridgeRollupUpdated) + if err := _AbsBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IBridgeMetaData contains all meta data concerning the IBridge contract. -var IBridgeMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgNum\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", -} - -// IBridgeABI is the input ABI used to generate the binding from. -// Deprecated: Use IBridgeMetaData.ABI instead. -var IBridgeABI = IBridgeMetaData.ABI - -// IBridge is an auto generated Go binding around an Ethereum contract. -type IBridge struct { - IBridgeCaller // Read-only binding to the contract - IBridgeTransactor // Write-only binding to the contract - IBridgeFilterer // Log filterer for contract events -} +// AbsBridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the AbsBridge contract. +type AbsBridgeSequencerInboxUpdatedIterator struct { + Event *AbsBridgeSequencerInboxUpdated // Event containing the contract specifics and raw log -// IBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. -type IBridgeCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// IBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. -type IBridgeTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration } -// IBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type IBridgeFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsBridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// IBridgeSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type IBridgeSession struct { - Contract *IBridge // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// IBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type IBridgeCallerSession struct { - Contract *IBridgeCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// IBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type IBridgeTransactorSession struct { - Contract *IBridgeTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsBridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail } -// IBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. -type IBridgeRaw struct { - Contract *IBridge // Generic contract binding to access the raw methods on +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsBridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// IBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type IBridgeCallerRaw struct { - Contract *IBridgeCaller // Generic read-only contract binding to access the raw methods on +// AbsBridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the AbsBridge contract. +type AbsBridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos } -// IBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type IBridgeTransactorRaw struct { - Contract *IBridgeTransactor // Generic write-only contract binding to access the raw methods on -} +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_AbsBridge *AbsBridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*AbsBridgeSequencerInboxUpdatedIterator, error) { -// NewIBridge creates a new instance of IBridge, bound to a specific deployed contract. -func NewIBridge(address common.Address, backend bind.ContractBackend) (*IBridge, error) { - contract, err := bindIBridge(address, backend, backend, backend) + logs, sub, err := _AbsBridge.contract.FilterLogs(opts, "SequencerInboxUpdated") if err != nil { return nil, err } - return &IBridge{IBridgeCaller: IBridgeCaller{contract: contract}, IBridgeTransactor: IBridgeTransactor{contract: contract}, IBridgeFilterer: IBridgeFilterer{contract: contract}}, nil + return &AbsBridgeSequencerInboxUpdatedIterator{contract: _AbsBridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil } -// NewIBridgeCaller creates a new read-only instance of IBridge, bound to a specific deployed contract. -func NewIBridgeCaller(address common.Address, caller bind.ContractCaller) (*IBridgeCaller, error) { - contract, err := bindIBridge(address, caller, nil, nil) +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_AbsBridge *AbsBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *AbsBridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _AbsBridge.contract.WatchLogs(opts, "SequencerInboxUpdated") if err != nil { return nil, err } - return &IBridgeCaller{contract: contract}, nil + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsBridgeSequencerInboxUpdated) + if err := _AbsBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// NewIBridgeTransactor creates a new write-only instance of IBridge, bound to a specific deployed contract. -func NewIBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*IBridgeTransactor, error) { - contract, err := bindIBridge(address, nil, transactor, nil) +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_AbsBridge *AbsBridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*AbsBridgeSequencerInboxUpdated, error) { + event := new(AbsBridgeSequencerInboxUpdated) + if err := _AbsBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AbsInboxMetaData contains all meta data concerning the AbsInbox contract. +var AbsInboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1Forked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"}],\"name\":\"NotAllowedOrigin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"AllowListAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"AllowListEnabledUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// AbsInboxABI is the input ABI used to generate the binding from. +// Deprecated: Use AbsInboxMetaData.ABI instead. +var AbsInboxABI = AbsInboxMetaData.ABI + +// AbsInbox is an auto generated Go binding around an Ethereum contract. +type AbsInbox struct { + AbsInboxCaller // Read-only binding to the contract + AbsInboxTransactor // Write-only binding to the contract + AbsInboxFilterer // Log filterer for contract events +} + +// AbsInboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type AbsInboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbsInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AbsInboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbsInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbsInboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbsInboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AbsInboxSession struct { + Contract *AbsInbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbsInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AbsInboxCallerSession struct { + Contract *AbsInboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AbsInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AbsInboxTransactorSession struct { + Contract *AbsInboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbsInboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type AbsInboxRaw struct { + Contract *AbsInbox // Generic contract binding to access the raw methods on +} + +// AbsInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbsInboxCallerRaw struct { + Contract *AbsInboxCaller // Generic read-only contract binding to access the raw methods on +} + +// AbsInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbsInboxTransactorRaw struct { + Contract *AbsInboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAbsInbox creates a new instance of AbsInbox, bound to a specific deployed contract. +func NewAbsInbox(address common.Address, backend bind.ContractBackend) (*AbsInbox, error) { + contract, err := bindAbsInbox(address, backend, backend, backend) if err != nil { return nil, err } - return &IBridgeTransactor{contract: contract}, nil + return &AbsInbox{AbsInboxCaller: AbsInboxCaller{contract: contract}, AbsInboxTransactor: AbsInboxTransactor{contract: contract}, AbsInboxFilterer: AbsInboxFilterer{contract: contract}}, nil } -// NewIBridgeFilterer creates a new log filterer instance of IBridge, bound to a specific deployed contract. -func NewIBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*IBridgeFilterer, error) { - contract, err := bindIBridge(address, nil, nil, filterer) +// NewAbsInboxCaller creates a new read-only instance of AbsInbox, bound to a specific deployed contract. +func NewAbsInboxCaller(address common.Address, caller bind.ContractCaller) (*AbsInboxCaller, error) { + contract, err := bindAbsInbox(address, caller, nil, nil) if err != nil { return nil, err } - return &IBridgeFilterer{contract: contract}, nil + return &AbsInboxCaller{contract: contract}, nil } -// bindIBridge binds a generic wrapper to an already deployed contract. -func bindIBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IBridgeMetaData.GetAbi() +// NewAbsInboxTransactor creates a new write-only instance of AbsInbox, bound to a specific deployed contract. +func NewAbsInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*AbsInboxTransactor, error) { + contract, err := bindAbsInbox(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AbsInboxTransactor{contract: contract}, nil +} + +// NewAbsInboxFilterer creates a new log filterer instance of AbsInbox, bound to a specific deployed contract. +func NewAbsInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*AbsInboxFilterer, error) { + contract, err := bindAbsInbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AbsInboxFilterer{contract: contract}, nil +} + +// bindAbsInbox binds a generic wrapper to an already deployed contract. +func bindAbsInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AbsInboxMetaData.GetAbi() if err != nil { return nil, err } @@ -1810,46 +1880,77 @@ func bindIBridge(address common.Address, caller bind.ContractCaller, transactor // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IBridge *IBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IBridge.Contract.IBridgeCaller.contract.Call(opts, result, method, params...) +func (_AbsInbox *AbsInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsInbox.Contract.AbsInboxCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_IBridge *IBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IBridge.Contract.IBridgeTransactor.contract.Transfer(opts) +func (_AbsInbox *AbsInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsInbox.Contract.AbsInboxTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_IBridge *IBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IBridge.Contract.IBridgeTransactor.contract.Transact(opts, method, params...) +func (_AbsInbox *AbsInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsInbox.Contract.AbsInboxTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IBridge *IBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IBridge.Contract.contract.Call(opts, result, method, params...) +func (_AbsInbox *AbsInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsInbox.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_IBridge *IBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IBridge.Contract.contract.Transfer(opts) +func (_AbsInbox *AbsInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsInbox.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_IBridge *IBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IBridge.Contract.contract.Transact(opts, method, params...) +func (_AbsInbox *AbsInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsInbox.Contract.contract.Transact(opts, method, params...) } -// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. // -// Solidity: function activeOutbox() view returns(address) -func (_IBridge *IBridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function allowListEnabled() view returns(bool) +func (_AbsInbox *AbsInboxCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "activeOutbox") + err := _AbsInbox.contract.Call(opts, &out, "allowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_AbsInbox *AbsInboxSession) AllowListEnabled() (bool, error) { + return _AbsInbox.Contract.AllowListEnabled(&_AbsInbox.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_AbsInbox *AbsInboxCallerSession) AllowListEnabled() (bool, error) { + return _AbsInbox.Contract.AllowListEnabled(&_AbsInbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsInbox *AbsInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsInbox.contract.Call(opts, &out, "bridge") if err != nil { return *new(common.Address), err @@ -1861,119 +1962,119 @@ func (_IBridge *IBridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address } -// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. // -// Solidity: function activeOutbox() view returns(address) -func (_IBridge *IBridgeSession) ActiveOutbox() (common.Address, error) { - return _IBridge.Contract.ActiveOutbox(&_IBridge.CallOpts) +// Solidity: function bridge() view returns(address) +func (_AbsInbox *AbsInboxSession) Bridge() (common.Address, error) { + return _AbsInbox.Contract.Bridge(&_AbsInbox.CallOpts) } -// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. // -// Solidity: function activeOutbox() view returns(address) -func (_IBridge *IBridgeCallerSession) ActiveOutbox() (common.Address, error) { - return _IBridge.Contract.ActiveOutbox(&_IBridge.CallOpts) +// Solidity: function bridge() view returns(address) +func (_AbsInbox *AbsInboxCallerSession) Bridge() (common.Address, error) { + return _AbsInbox.Contract.Bridge(&_AbsInbox.CallOpts) } -// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // -// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_IBridge *IBridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_AbsInbox *AbsInboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + err := _AbsInbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) if err != nil { - return *new(bool), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // -// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_IBridge *IBridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { - return _IBridge.Contract.AllowedDelayedInboxes(&_IBridge.CallOpts, inbox) +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_AbsInbox *AbsInboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _AbsInbox.Contract.CalculateRetryableSubmissionFee(&_AbsInbox.CallOpts, dataLength, baseFee) } -// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // -// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) -func (_IBridge *IBridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { - return _IBridge.Contract.AllowedDelayedInboxes(&_IBridge.CallOpts, inbox) +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_AbsInbox *AbsInboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _AbsInbox.Contract.CalculateRetryableSubmissionFee(&_AbsInbox.CallOpts, dataLength, baseFee) } -// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_IBridge *IBridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { +// Solidity: function getProxyAdmin() view returns(address) +func (_AbsInbox *AbsInboxCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + err := _AbsInbox.contract.Call(opts, &out, "getProxyAdmin") if err != nil { - return *new(bool), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_IBridge *IBridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { - return _IBridge.Contract.AllowedOutboxes(&_IBridge.CallOpts, outbox) +// Solidity: function getProxyAdmin() view returns(address) +func (_AbsInbox *AbsInboxSession) GetProxyAdmin() (common.Address, error) { + return _AbsInbox.Contract.GetProxyAdmin(&_AbsInbox.CallOpts) } -// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function allowedOutboxes(address outbox) view returns(bool) -func (_IBridge *IBridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { - return _IBridge.Contract.AllowedOutboxes(&_IBridge.CallOpts, outbox) +// Solidity: function getProxyAdmin() view returns(address) +func (_AbsInbox *AbsInboxCallerSession) GetProxyAdmin() (common.Address, error) { + return _AbsInbox.Contract.GetProxyAdmin(&_AbsInbox.CallOpts) } -// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. // -// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { +// Solidity: function isAllowed(address ) view returns(bool) +func (_AbsInbox *AbsInboxCaller) IsAllowed(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + err := _AbsInbox.contract.Call(opts, &out, "isAllowed", arg0) if err != nil { - return *new([32]byte), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. // -// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _IBridge.Contract.DelayedInboxAccs(&_IBridge.CallOpts, arg0) +// Solidity: function isAllowed(address ) view returns(bool) +func (_AbsInbox *AbsInboxSession) IsAllowed(arg0 common.Address) (bool, error) { + return _AbsInbox.Contract.IsAllowed(&_AbsInbox.CallOpts, arg0) } -// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. // -// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _IBridge.Contract.DelayedInboxAccs(&_IBridge.CallOpts, arg0) +// Solidity: function isAllowed(address ) view returns(bool) +func (_AbsInbox *AbsInboxCallerSession) IsAllowed(arg0 common.Address) (bool, error) { + return _AbsInbox.Contract.IsAllowed(&_AbsInbox.CallOpts, arg0) } -// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // -// Solidity: function delayedMessageCount() view returns(uint256) -func (_IBridge *IBridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function maxDataSize() view returns(uint256) +func (_AbsInbox *AbsInboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "delayedMessageCount") + err := _AbsInbox.contract.Call(opts, &out, "maxDataSize") if err != nil { return *new(*big.Int), err @@ -1985,57 +2086,57 @@ func (_IBridge *IBridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.In } -// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // -// Solidity: function delayedMessageCount() view returns(uint256) -func (_IBridge *IBridgeSession) DelayedMessageCount() (*big.Int, error) { - return _IBridge.Contract.DelayedMessageCount(&_IBridge.CallOpts) +// Solidity: function maxDataSize() view returns(uint256) +func (_AbsInbox *AbsInboxSession) MaxDataSize() (*big.Int, error) { + return _AbsInbox.Contract.MaxDataSize(&_AbsInbox.CallOpts) } -// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // -// Solidity: function delayedMessageCount() view returns(uint256) -func (_IBridge *IBridgeCallerSession) DelayedMessageCount() (*big.Int, error) { - return _IBridge.Contract.DelayedMessageCount(&_IBridge.CallOpts) +// Solidity: function maxDataSize() view returns(uint256) +func (_AbsInbox *AbsInboxCallerSession) MaxDataSize() (*big.Int, error) { + return _AbsInbox.Contract.MaxDataSize(&_AbsInbox.CallOpts) } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// Paused is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function rollup() view returns(address) -func (_IBridge *IBridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function paused() view returns(bool) +func (_AbsInbox *AbsInboxCaller) Paused(opts *bind.CallOpts) (bool, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "rollup") + err := _AbsInbox.contract.Call(opts, &out, "paused") if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// Paused is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function rollup() view returns(address) -func (_IBridge *IBridgeSession) Rollup() (common.Address, error) { - return _IBridge.Contract.Rollup(&_IBridge.CallOpts) +// Solidity: function paused() view returns(bool) +func (_AbsInbox *AbsInboxSession) Paused() (bool, error) { + return _AbsInbox.Contract.Paused(&_AbsInbox.CallOpts) } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// Paused is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function rollup() view returns(address) -func (_IBridge *IBridgeCallerSession) Rollup() (common.Address, error) { - return _IBridge.Contract.Rollup(&_IBridge.CallOpts) +// Solidity: function paused() view returns(bool) +func (_AbsInbox *AbsInboxCallerSession) Paused() (bool, error) { + return _AbsInbox.Contract.Paused(&_AbsInbox.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IBridge *IBridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { +func (_AbsInbox *AbsInboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _IBridge.contract.Call(opts, &out, "sequencerInbox") + err := _AbsInbox.contract.Call(opts, &out, "sequencerInbox") if err != nil { return *new(common.Address), err @@ -2050,344 +2151,354 @@ func (_IBridge *IBridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Addre // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IBridge *IBridgeSession) SequencerInbox() (common.Address, error) { - return _IBridge.Contract.SequencerInbox(&_IBridge.CallOpts) +func (_AbsInbox *AbsInboxSession) SequencerInbox() (common.Address, error) { + return _AbsInbox.Contract.SequencerInbox(&_AbsInbox.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IBridge *IBridgeCallerSession) SequencerInbox() (common.Address, error) { - return _IBridge.Contract.SequencerInbox(&_IBridge.CallOpts) +func (_AbsInbox *AbsInboxCallerSession) SequencerInbox() (common.Address, error) { + return _AbsInbox.Contract.SequencerInbox(&_AbsInbox.CallOpts) } -// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { - var out []interface{} - err := _IBridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_AbsInbox *AbsInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) } -// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _IBridge.Contract.SequencerInboxAccs(&_IBridge.CallOpts, arg0) +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_AbsInbox *AbsInboxSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsInbox.Contract.Initialize(&_AbsInbox.TransactOpts, _bridge, _sequencerInbox) } -// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. // -// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) -func (_IBridge *IBridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { - return _IBridge.Contract.SequencerInboxAccs(&_IBridge.CallOpts, arg0) +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_AbsInbox *AbsInboxTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _AbsInbox.Contract.Initialize(&_AbsInbox.TransactOpts, _bridge, _sequencerInbox) } -// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. // -// Solidity: function sequencerMessageCount() view returns(uint256) -func (_IBridge *IBridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _IBridge.contract.Call(opts, &out, "sequencerMessageCount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - +// Solidity: function pause() returns() +func (_AbsInbox *AbsInboxTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "pause") } -// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. // -// Solidity: function sequencerMessageCount() view returns(uint256) -func (_IBridge *IBridgeSession) SequencerMessageCount() (*big.Int, error) { - return _IBridge.Contract.SequencerMessageCount(&_IBridge.CallOpts) +// Solidity: function pause() returns() +func (_AbsInbox *AbsInboxSession) Pause() (*types.Transaction, error) { + return _AbsInbox.Contract.Pause(&_AbsInbox.TransactOpts) } -// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. // -// Solidity: function sequencerMessageCount() view returns(uint256) -func (_IBridge *IBridgeCallerSession) SequencerMessageCount() (*big.Int, error) { - return _IBridge.Contract.SequencerMessageCount(&_IBridge.CallOpts) +// Solidity: function pause() returns() +func (_AbsInbox *AbsInboxTransactorSession) Pause() (*types.Transaction, error) { + return _AbsInbox.Contract.Pause(&_AbsInbox.TransactOpts) } -// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // -// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_IBridge *IBridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _IBridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) } -// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // -// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_IBridge *IBridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { - return _IBridge.Contract.SequencerReportedSubMessageCount(&_IBridge.CallOpts) +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendContractTransaction(&_AbsInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) } -// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // -// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) -func (_IBridge *IBridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { - return _IBridge.Contract.SequencerReportedSubMessageCount(&_IBridge.CallOpts) +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendContractTransaction(&_AbsInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) } -// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // -// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) -func (_IBridge *IBridgeTransactor) AllowedDelayedInboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "allowedDelayedInboxList", arg0) +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "sendL2Message", messageData) } -// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // -// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) -func (_IBridge *IBridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.AllowedDelayedInboxList(&_IBridge.TransactOpts, arg0) +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendL2Message(&_AbsInbox.TransactOpts, messageData) } -// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // -// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) -func (_IBridge *IBridgeTransactorSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.AllowedDelayedInboxList(&_IBridge.TransactOpts, arg0) +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendL2Message(&_AbsInbox.TransactOpts, messageData) } -// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // -// Solidity: function allowedOutboxList(uint256 ) returns(address) -func (_IBridge *IBridgeTransactor) AllowedOutboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "allowedOutboxList", arg0) +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) } -// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // -// Solidity: function allowedOutboxList(uint256 ) returns(address) -func (_IBridge *IBridgeSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.AllowedOutboxList(&_IBridge.TransactOpts, arg0) +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendL2MessageFromOrigin(&_AbsInbox.TransactOpts, messageData) } -// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // -// Solidity: function allowedOutboxList(uint256 ) returns(address) -func (_IBridge *IBridgeTransactorSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.AllowedOutboxList(&_IBridge.TransactOpts, arg0) +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_AbsInbox *AbsInboxTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendL2MessageFromOrigin(&_AbsInbox.TransactOpts, messageData) } -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_IBridge *IBridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash) +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) } -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_IBridge *IBridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _IBridge.Contract.EnqueueDelayedMessage(&_IBridge.TransactOpts, kind, sender, messageDataHash) +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendUnsignedTransaction(&_AbsInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) } -// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // -// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) -func (_IBridge *IBridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { - return _IBridge.Contract.EnqueueDelayedMessage(&_IBridge.TransactOpts, kind, sender, messageDataHash) +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_AbsInbox *AbsInboxTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsInbox.Contract.SendUnsignedTransaction(&_AbsInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) } -// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_IBridge *IBridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_AbsInbox *AbsInboxTransactor) SetAllowList(opts *bind.TransactOpts, user []common.Address, val []bool) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "setAllowList", user, val) } -// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_IBridge *IBridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.EnqueueSequencerMessage(&_IBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_AbsInbox *AbsInboxSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _AbsInbox.Contract.SetAllowList(&_AbsInbox.TransactOpts, user, val) } -// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) -func (_IBridge *IBridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { - return _IBridge.Contract.EnqueueSequencerMessage(&_IBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_AbsInbox *AbsInboxTransactorSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _AbsInbox.Contract.SetAllowList(&_AbsInbox.TransactOpts, user, val) } -// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_IBridge *IBridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "executeCall", to, value, data) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_AbsInbox *AbsInboxTransactor) SetAllowListEnabled(opts *bind.TransactOpts, _allowListEnabled bool) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "setAllowListEnabled", _allowListEnabled) } -// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_IBridge *IBridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IBridge.Contract.ExecuteCall(&_IBridge.TransactOpts, to, value, data) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_AbsInbox *AbsInboxSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _AbsInbox.Contract.SetAllowListEnabled(&_AbsInbox.TransactOpts, _allowListEnabled) } -// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) -func (_IBridge *IBridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IBridge.Contract.ExecuteCall(&_IBridge.TransactOpts, to, value, data) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_AbsInbox *AbsInboxTransactorSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _AbsInbox.Contract.SetAllowListEnabled(&_AbsInbox.TransactOpts, _allowListEnabled) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // -// Solidity: function initialize(address rollup_) returns() -func (_IBridge *IBridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "initialize", rollup_) +// Solidity: function unpause() returns() +func (_AbsInbox *AbsInboxTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsInbox.contract.Transact(opts, "unpause") } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // -// Solidity: function initialize(address rollup_) returns() -func (_IBridge *IBridgeSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _IBridge.Contract.Initialize(&_IBridge.TransactOpts, rollup_) +// Solidity: function unpause() returns() +func (_AbsInbox *AbsInboxSession) Unpause() (*types.Transaction, error) { + return _AbsInbox.Contract.Unpause(&_AbsInbox.TransactOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // -// Solidity: function initialize(address rollup_) returns() -func (_IBridge *IBridgeTransactorSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _IBridge.Contract.Initialize(&_IBridge.TransactOpts, rollup_) +// Solidity: function unpause() returns() +func (_AbsInbox *AbsInboxTransactorSession) Unpause() (*types.Transaction, error) { + return _AbsInbox.Contract.Unpause(&_AbsInbox.TransactOpts) } -// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. -// -// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +// AbsInboxAllowListAddressSetIterator is returned from FilterAllowListAddressSet and is used to iterate over the raw logs and unpacked data for AllowListAddressSet events raised by the AbsInbox contract. +type AbsInboxAllowListAddressSetIterator struct { + Event *AbsInboxAllowListAddressSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration } -// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. -// -// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.Contract.SetDelayedInbox(&_IBridge.TransactOpts, inbox, enabled) +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsInboxAllowListAddressSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsInboxAllowListAddressSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsInboxAllowListAddressSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. -// -// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.Contract.SetDelayedInbox(&_IBridge.TransactOpts, inbox, enabled) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsInboxAllowListAddressSetIterator) Error() error { + return it.fail } -// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. -// -// Solidity: function setOutbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeTransactor) SetOutbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "setOutbox", inbox, enabled) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsInboxAllowListAddressSetIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. -// -// Solidity: function setOutbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.Contract.SetOutbox(&_IBridge.TransactOpts, inbox, enabled) +// AbsInboxAllowListAddressSet represents a AllowListAddressSet event raised by the AbsInbox contract. +type AbsInboxAllowListAddressSet struct { + User common.Address + Val bool + Raw types.Log // Blockchain specific contextual infos } -// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// FilterAllowListAddressSet is a free log retrieval operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. // -// Solidity: function setOutbox(address inbox, bool enabled) returns() -func (_IBridge *IBridgeTransactorSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { - return _IBridge.Contract.SetOutbox(&_IBridge.TransactOpts, inbox, enabled) -} - -// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. -// -// Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_IBridge *IBridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) -} - -// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. -// -// Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_IBridge *IBridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { - return _IBridge.Contract.SetSequencerInbox(&_IBridge.TransactOpts, _sequencerInbox) -} +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_AbsInbox *AbsInboxFilterer) FilterAllowListAddressSet(opts *bind.FilterOpts, user []common.Address) (*AbsInboxAllowListAddressSetIterator, error) { -// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. -// -// Solidity: function setSequencerInbox(address _sequencerInbox) returns() -func (_IBridge *IBridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { - return _IBridge.Contract.SetSequencerInbox(&_IBridge.TransactOpts, _sequencerInbox) -} + var userRule []interface{} + for _, userItem := range user { + userRule = append(userRule, userItem) + } -// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. -// -// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) -func (_IBridge *IBridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "submitBatchSpendingReport", batchPoster, dataHash) + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "AllowListAddressSet", userRule) + if err != nil { + return nil, err + } + return &AbsInboxAllowListAddressSetIterator{contract: _AbsInbox.contract, event: "AllowListAddressSet", logs: logs, sub: sub}, nil } -// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// WatchAllowListAddressSet is a free log subscription operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. // -// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) -func (_IBridge *IBridgeSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { - return _IBridge.Contract.SubmitBatchSpendingReport(&_IBridge.TransactOpts, batchPoster, dataHash) -} +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_AbsInbox *AbsInboxFilterer) WatchAllowListAddressSet(opts *bind.WatchOpts, sink chan<- *AbsInboxAllowListAddressSet, user []common.Address) (event.Subscription, error) { -// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. -// -// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) -func (_IBridge *IBridgeTransactorSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { - return _IBridge.Contract.SubmitBatchSpendingReport(&_IBridge.TransactOpts, batchPoster, dataHash) -} + var userRule []interface{} + for _, userItem := range user { + userRule = append(userRule, userItem) + } -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. -// -// Solidity: function updateRollupAddress(address _rollup) returns() -func (_IBridge *IBridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { - return _IBridge.contract.Transact(opts, "updateRollupAddress", _rollup) -} + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "AllowListAddressSet", userRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsInboxAllowListAddressSet) + if err := _AbsInbox.contract.UnpackLog(event, "AllowListAddressSet", log); err != nil { + return err + } + event.Raw = log -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. -// -// Solidity: function updateRollupAddress(address _rollup) returns() -func (_IBridge *IBridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { - return _IBridge.Contract.UpdateRollupAddress(&_IBridge.TransactOpts, _rollup) + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// ParseAllowListAddressSet is a log parse operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. // -// Solidity: function updateRollupAddress(address _rollup) returns() -func (_IBridge *IBridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { - return _IBridge.Contract.UpdateRollupAddress(&_IBridge.TransactOpts, _rollup) +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_AbsInbox *AbsInboxFilterer) ParseAllowListAddressSet(log types.Log) (*AbsInboxAllowListAddressSet, error) { + event := new(AbsInboxAllowListAddressSet) + if err := _AbsInbox.contract.UnpackLog(event, "AllowListAddressSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// IBridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the IBridge contract. -type IBridgeBridgeCallTriggeredIterator struct { - Event *IBridgeBridgeCallTriggered // Event containing the contract specifics and raw log +// AbsInboxAllowListEnabledUpdatedIterator is returned from FilterAllowListEnabledUpdated and is used to iterate over the raw logs and unpacked data for AllowListEnabledUpdated events raised by the AbsInbox contract. +type AbsInboxAllowListEnabledUpdatedIterator struct { + Event *AbsInboxAllowListEnabledUpdated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2401,7 +2512,7 @@ type IBridgeBridgeCallTriggeredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IBridgeBridgeCallTriggeredIterator) Next() bool { +func (it *AbsInboxAllowListEnabledUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2410,7 +2521,7 @@ func (it *IBridgeBridgeCallTriggeredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IBridgeBridgeCallTriggered) + it.Event = new(AbsInboxAllowListEnabledUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2425,7 +2536,7 @@ func (it *IBridgeBridgeCallTriggeredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IBridgeBridgeCallTriggered) + it.Event = new(AbsInboxAllowListEnabledUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2441,62 +2552,41 @@ func (it *IBridgeBridgeCallTriggeredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IBridgeBridgeCallTriggeredIterator) Error() error { +func (it *AbsInboxAllowListEnabledUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IBridgeBridgeCallTriggeredIterator) Close() error { +func (it *AbsInboxAllowListEnabledUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IBridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the IBridge contract. -type IBridgeBridgeCallTriggered struct { - Outbox common.Address - To common.Address - Value *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos +// AbsInboxAllowListEnabledUpdated represents a AllowListEnabledUpdated event raised by the AbsInbox contract. +type AbsInboxAllowListEnabledUpdated struct { + IsEnabled bool + Raw types.Log // Blockchain specific contextual infos } -// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// FilterAllowListEnabledUpdated is a free log retrieval operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. // -// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_IBridge *IBridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*IBridgeBridgeCallTriggeredIterator, error) { - - var outboxRule []interface{} - for _, outboxItem := range outbox { - outboxRule = append(outboxRule, outboxItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_AbsInbox *AbsInboxFilterer) FilterAllowListEnabledUpdated(opts *bind.FilterOpts) (*AbsInboxAllowListEnabledUpdatedIterator, error) { - logs, sub, err := _IBridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "AllowListEnabledUpdated") if err != nil { return nil, err } - return &IBridgeBridgeCallTriggeredIterator{contract: _IBridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil + return &AbsInboxAllowListEnabledUpdatedIterator{contract: _AbsInbox.contract, event: "AllowListEnabledUpdated", logs: logs, sub: sub}, nil } -// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// WatchAllowListEnabledUpdated is a free log subscription operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. // -// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_IBridge *IBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *IBridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { - - var outboxRule []interface{} - for _, outboxItem := range outbox { - outboxRule = append(outboxRule, outboxItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_AbsInbox *AbsInboxFilterer) WatchAllowListEnabledUpdated(opts *bind.WatchOpts, sink chan<- *AbsInboxAllowListEnabledUpdated) (event.Subscription, error) { - logs, sub, err := _IBridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "AllowListEnabledUpdated") if err != nil { return nil, err } @@ -2506,8 +2596,8 @@ func (_IBridge *IBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IBridgeBridgeCallTriggered) - if err := _IBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + event := new(AbsInboxAllowListEnabledUpdated) + if err := _AbsInbox.contract.UnpackLog(event, "AllowListEnabledUpdated", log); err != nil { return err } event.Raw = log @@ -2528,21 +2618,21 @@ func (_IBridge *IBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, }), nil } -// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// ParseAllowListEnabledUpdated is a log parse operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. // -// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) -func (_IBridge *IBridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*IBridgeBridgeCallTriggered, error) { - event := new(IBridgeBridgeCallTriggered) - if err := _IBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_AbsInbox *AbsInboxFilterer) ParseAllowListEnabledUpdated(log types.Log) (*AbsInboxAllowListEnabledUpdated, error) { + event := new(AbsInboxAllowListEnabledUpdated) + if err := _AbsInbox.contract.UnpackLog(event, "AllowListEnabledUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IBridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the IBridge contract. -type IBridgeInboxToggleIterator struct { - Event *IBridgeInboxToggle // Event containing the contract specifics and raw log +// AbsInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the AbsInbox contract. +type AbsInboxInboxMessageDeliveredIterator struct { + Event *AbsInboxInboxMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2556,7 +2646,7 @@ type IBridgeInboxToggleIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IBridgeInboxToggleIterator) Next() bool { +func (it *AbsInboxInboxMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2565,7 +2655,7 @@ func (it *IBridgeInboxToggleIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IBridgeInboxToggle) + it.Event = new(AbsInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2580,7 +2670,7 @@ func (it *IBridgeInboxToggleIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IBridgeInboxToggle) + it.Event = new(AbsInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2596,52 +2686,52 @@ func (it *IBridgeInboxToggleIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IBridgeInboxToggleIterator) Error() error { +func (it *AbsInboxInboxMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IBridgeInboxToggleIterator) Close() error { +func (it *AbsInboxInboxMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// IBridgeInboxToggle represents a InboxToggle event raised by the IBridge contract. -type IBridgeInboxToggle struct { - Inbox common.Address - Enabled bool - Raw types.Log // Blockchain specific contextual infos +// AbsInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the AbsInbox contract. +type AbsInboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_IBridge *IBridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*IBridgeInboxToggleIterator, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsInbox *AbsInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*AbsInboxInboxMessageDeliveredIterator, error) { - var inboxRule []interface{} - for _, inboxItem := range inbox { - inboxRule = append(inboxRule, inboxItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IBridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } - return &IBridgeInboxToggleIterator{contract: _IBridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil + return &AbsInboxInboxMessageDeliveredIterator{contract: _AbsInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil } -// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_IBridge *IBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *IBridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsInbox *AbsInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *AbsInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { - var inboxRule []interface{} - for _, inboxItem := range inbox { - inboxRule = append(inboxRule, inboxItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IBridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } @@ -2651,8 +2741,8 @@ func (_IBridge *IBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IBridgeInboxToggle) - if err := _IBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + event := new(AbsInboxInboxMessageDelivered) + if err := _AbsInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return err } event.Raw = log @@ -2673,21 +2763,21 @@ func (_IBridge *IBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink cha }), nil } -// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event InboxToggle(address indexed inbox, bool enabled) -func (_IBridge *IBridgeFilterer) ParseInboxToggle(log types.Log) (*IBridgeInboxToggle, error) { - event := new(IBridgeInboxToggle) - if err := _IBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsInbox *AbsInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*AbsInboxInboxMessageDelivered, error) { + event := new(AbsInboxInboxMessageDelivered) + if err := _AbsInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IBridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the IBridge contract. -type IBridgeMessageDeliveredIterator struct { - Event *IBridgeMessageDelivered // Event containing the contract specifics and raw log +// AbsInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the AbsInbox contract. +type AbsInboxInboxMessageDeliveredFromOriginIterator struct { + Event *AbsInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2701,7 +2791,7 @@ type IBridgeMessageDeliveredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IBridgeMessageDeliveredIterator) Next() bool { +func (it *AbsInboxInboxMessageDeliveredFromOriginIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2710,7 +2800,7 @@ func (it *IBridgeMessageDeliveredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IBridgeMessageDelivered) + it.Event = new(AbsInboxInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2725,7 +2815,7 @@ func (it *IBridgeMessageDeliveredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IBridgeMessageDelivered) + it.Event = new(AbsInboxInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2741,66 +2831,51 @@ func (it *IBridgeMessageDeliveredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IBridgeMessageDeliveredIterator) Error() error { +func (it *AbsInboxInboxMessageDeliveredFromOriginIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IBridgeMessageDeliveredIterator) Close() error { +func (it *AbsInboxInboxMessageDeliveredFromOriginIterator) Close() error { it.sub.Unsubscribe() return nil } -// IBridgeMessageDelivered represents a MessageDelivered event raised by the IBridge contract. -type IBridgeMessageDelivered struct { - MessageIndex *big.Int - BeforeInboxAcc [32]byte - Inbox common.Address - Kind uint8 - Sender common.Address - MessageDataHash [32]byte - BaseFeeL1 *big.Int - Timestamp uint64 - Raw types.Log // Blockchain specific contextual infos +// AbsInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the AbsInbox contract. +type AbsInboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // -// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_IBridge *IBridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*IBridgeMessageDeliveredIterator, error) { +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsInbox *AbsInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*AbsInboxInboxMessageDeliveredFromOriginIterator, error) { - var messageIndexRule []interface{} - for _, messageIndexItem := range messageIndex { - messageIndexRule = append(messageIndexRule, messageIndexItem) - } - var beforeInboxAccRule []interface{} - for _, beforeInboxAccItem := range beforeInboxAcc { - beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IBridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } - return &IBridgeMessageDeliveredIterator{contract: _IBridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil + return &AbsInboxInboxMessageDeliveredFromOriginIterator{contract: _AbsInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil } -// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // -// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_IBridge *IBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *IBridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsInbox *AbsInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *AbsInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { - var messageIndexRule []interface{} - for _, messageIndexItem := range messageIndex { - messageIndexRule = append(messageIndexRule, messageIndexItem) - } - var beforeInboxAccRule []interface{} - for _, beforeInboxAccItem := range beforeInboxAcc { - beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IBridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } @@ -2810,8 +2885,8 @@ func (_IBridge *IBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sin select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IBridgeMessageDelivered) - if err := _IBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + event := new(AbsInboxInboxMessageDeliveredFromOrigin) + if err := _AbsInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return err } event.Raw = log @@ -2832,21 +2907,21 @@ func (_IBridge *IBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sin }), nil } -// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // -// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) -func (_IBridge *IBridgeFilterer) ParseMessageDelivered(log types.Log) (*IBridgeMessageDelivered, error) { - event := new(IBridgeMessageDelivered) - if err := _IBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsInbox *AbsInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*AbsInboxInboxMessageDeliveredFromOrigin, error) { + event := new(AbsInboxInboxMessageDeliveredFromOrigin) + if err := _AbsInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IBridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the IBridge contract. -type IBridgeOutboxToggleIterator struct { - Event *IBridgeOutboxToggle // Event containing the contract specifics and raw log +// AbsInboxInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AbsInbox contract. +type AbsInboxInitializedIterator struct { + Event *AbsInboxInitialized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2860,7 +2935,7 @@ type IBridgeOutboxToggleIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IBridgeOutboxToggleIterator) Next() bool { +func (it *AbsInboxInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2869,7 +2944,7 @@ func (it *IBridgeOutboxToggleIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IBridgeOutboxToggle) + it.Event = new(AbsInboxInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2884,7 +2959,7 @@ func (it *IBridgeOutboxToggleIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IBridgeOutboxToggle) + it.Event = new(AbsInboxInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2900,52 +2975,175 @@ func (it *IBridgeOutboxToggleIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IBridgeOutboxToggleIterator) Error() error { +func (it *AbsInboxInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IBridgeOutboxToggleIterator) Close() error { +func (it *AbsInboxInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IBridgeOutboxToggle represents a OutboxToggle event raised by the IBridge contract. -type IBridgeOutboxToggle struct { - Outbox common.Address - Enabled bool +// AbsInboxInitialized represents a Initialized event raised by the AbsInbox contract. +type AbsInboxInitialized struct { + Version uint8 Raw types.Log // Blockchain specific contextual infos } -// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_IBridge *IBridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*IBridgeOutboxToggleIterator, error) { +// Solidity: event Initialized(uint8 version) +func (_AbsInbox *AbsInboxFilterer) FilterInitialized(opts *bind.FilterOpts) (*AbsInboxInitializedIterator, error) { - var outboxRule []interface{} - for _, outboxItem := range outbox { - outboxRule = append(outboxRule, outboxItem) + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err } + return &AbsInboxInitializedIterator{contract: _AbsInbox.contract, event: "Initialized", logs: logs, sub: sub}, nil +} - logs, sub, err := _IBridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AbsInbox *AbsInboxFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AbsInboxInitialized) (event.Subscription, error) { + + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } - return &IBridgeOutboxToggleIterator{contract: _IBridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsInboxInitialized) + if err := _AbsInbox.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_IBridge *IBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *IBridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { +// Solidity: event Initialized(uint8 version) +func (_AbsInbox *AbsInboxFilterer) ParseInitialized(log types.Log) (*AbsInboxInitialized, error) { + event := new(AbsInboxInitialized) + if err := _AbsInbox.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} - var outboxRule []interface{} - for _, outboxItem := range outbox { - outboxRule = append(outboxRule, outboxItem) +// AbsInboxPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the AbsInbox contract. +type AbsInboxPausedIterator struct { + Event *AbsInboxPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsInboxPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsInboxPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - logs, sub, err := _IBridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsInboxPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsInboxPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsInboxPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AbsInboxPaused represents a Paused event raised by the AbsInbox contract. +type AbsInboxPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_AbsInbox *AbsInboxFilterer) FilterPaused(opts *bind.FilterOpts) (*AbsInboxPausedIterator, error) { + + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &AbsInboxPausedIterator{contract: _AbsInbox.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_AbsInbox *AbsInboxFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *AbsInboxPaused) (event.Subscription, error) { + + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "Paused") if err != nil { return nil, err } @@ -2955,8 +3153,8 @@ func (_IBridge *IBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink ch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IBridgeOutboxToggle) - if err := _IBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + event := new(AbsInboxPaused) + if err := _AbsInbox.contract.UnpackLog(event, "Paused", log); err != nil { return err } event.Raw = log @@ -2977,21 +3175,21 @@ func (_IBridge *IBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink ch }), nil } -// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. // -// Solidity: event OutboxToggle(address indexed outbox, bool enabled) -func (_IBridge *IBridgeFilterer) ParseOutboxToggle(log types.Log) (*IBridgeOutboxToggle, error) { - event := new(IBridgeOutboxToggle) - if err := _IBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { +// Solidity: event Paused(address account) +func (_AbsInbox *AbsInboxFilterer) ParsePaused(log types.Log) (*AbsInboxPaused, error) { + event := new(AbsInboxPaused) + if err := _AbsInbox.contract.UnpackLog(event, "Paused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IBridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the IBridge contract. -type IBridgeSequencerInboxUpdatedIterator struct { - Event *IBridgeSequencerInboxUpdated // Event containing the contract specifics and raw log +// AbsInboxUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the AbsInbox contract. +type AbsInboxUnpausedIterator struct { + Event *AbsInboxUnpaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3005,7 +3203,7 @@ type IBridgeSequencerInboxUpdatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IBridgeSequencerInboxUpdatedIterator) Next() bool { +func (it *AbsInboxUnpausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3014,7 +3212,7 @@ func (it *IBridgeSequencerInboxUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IBridgeSequencerInboxUpdated) + it.Event = new(AbsInboxUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3029,7 +3227,7 @@ func (it *IBridgeSequencerInboxUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IBridgeSequencerInboxUpdated) + it.Event = new(AbsInboxUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3045,41 +3243,41 @@ func (it *IBridgeSequencerInboxUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IBridgeSequencerInboxUpdatedIterator) Error() error { +func (it *AbsInboxUnpausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IBridgeSequencerInboxUpdatedIterator) Close() error { +func (it *AbsInboxUnpausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IBridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the IBridge contract. -type IBridgeSequencerInboxUpdated struct { - NewSequencerInbox common.Address - Raw types.Log // Blockchain specific contextual infos +// AbsInboxUnpaused represents a Unpaused event raised by the AbsInbox contract. +type AbsInboxUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_IBridge *IBridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*IBridgeSequencerInboxUpdatedIterator, error) { +// Solidity: event Unpaused(address account) +func (_AbsInbox *AbsInboxFilterer) FilterUnpaused(opts *bind.FilterOpts) (*AbsInboxUnpausedIterator, error) { - logs, sub, err := _IBridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + logs, sub, err := _AbsInbox.contract.FilterLogs(opts, "Unpaused") if err != nil { return nil, err } - return &IBridgeSequencerInboxUpdatedIterator{contract: _IBridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil + return &AbsInboxUnpausedIterator{contract: _AbsInbox.contract, event: "Unpaused", logs: logs, sub: sub}, nil } -// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_IBridge *IBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *IBridgeSequencerInboxUpdated) (event.Subscription, error) { +// Solidity: event Unpaused(address account) +func (_AbsInbox *AbsInboxFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *AbsInboxUnpaused) (event.Subscription, error) { - logs, sub, err := _IBridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + logs, sub, err := _AbsInbox.contract.WatchLogs(opts, "Unpaused") if err != nil { return nil, err } @@ -3089,8 +3287,8 @@ func (_IBridge *IBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IBridgeSequencerInboxUpdated) - if err := _IBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + event := new(AbsInboxUnpaused) + if err := _AbsInbox.contract.UnpackLog(event, "Unpaused", log); err != nil { return err } event.Raw = log @@ -3111,125 +3309,125 @@ func (_IBridge *IBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts }), nil } -// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. // -// Solidity: event SequencerInboxUpdated(address newSequencerInbox) -func (_IBridge *IBridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*IBridgeSequencerInboxUpdated, error) { - event := new(IBridgeSequencerInboxUpdated) - if err := _IBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { +// Solidity: event Unpaused(address account) +func (_AbsInbox *AbsInboxFilterer) ParseUnpaused(log types.Log) (*AbsInboxUnpaused, error) { + event := new(AbsInboxUnpaused) + if err := _AbsInbox.contract.UnpackLog(event, "Unpaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IDelayedMessageProviderMetaData contains all meta data concerning the IDelayedMessageProvider contract. -var IDelayedMessageProviderMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"}]", +// AbsOutboxMetaData contains all meta data concerning the AbsOutbox contract. +var AbsOutboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPostUpgradeInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"NotRollup\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SimulationOnlyEntrypoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } -// IDelayedMessageProviderABI is the input ABI used to generate the binding from. -// Deprecated: Use IDelayedMessageProviderMetaData.ABI instead. -var IDelayedMessageProviderABI = IDelayedMessageProviderMetaData.ABI +// AbsOutboxABI is the input ABI used to generate the binding from. +// Deprecated: Use AbsOutboxMetaData.ABI instead. +var AbsOutboxABI = AbsOutboxMetaData.ABI -// IDelayedMessageProvider is an auto generated Go binding around an Ethereum contract. -type IDelayedMessageProvider struct { - IDelayedMessageProviderCaller // Read-only binding to the contract - IDelayedMessageProviderTransactor // Write-only binding to the contract - IDelayedMessageProviderFilterer // Log filterer for contract events +// AbsOutbox is an auto generated Go binding around an Ethereum contract. +type AbsOutbox struct { + AbsOutboxCaller // Read-only binding to the contract + AbsOutboxTransactor // Write-only binding to the contract + AbsOutboxFilterer // Log filterer for contract events } -// IDelayedMessageProviderCaller is an auto generated read-only Go binding around an Ethereum contract. -type IDelayedMessageProviderCaller struct { +// AbsOutboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type AbsOutboxCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IDelayedMessageProviderTransactor is an auto generated write-only Go binding around an Ethereum contract. -type IDelayedMessageProviderTransactor struct { +// AbsOutboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AbsOutboxTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IDelayedMessageProviderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type IDelayedMessageProviderFilterer struct { +// AbsOutboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbsOutboxFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IDelayedMessageProviderSession is an auto generated Go binding around an Ethereum contract, +// AbsOutboxSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type IDelayedMessageProviderSession struct { - Contract *IDelayedMessageProvider // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type AbsOutboxSession struct { + Contract *AbsOutbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// IDelayedMessageProviderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// AbsOutboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type IDelayedMessageProviderCallerSession struct { - Contract *IDelayedMessageProviderCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type AbsOutboxCallerSession struct { + Contract *AbsOutboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// IDelayedMessageProviderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// AbsOutboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type IDelayedMessageProviderTransactorSession struct { - Contract *IDelayedMessageProviderTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type AbsOutboxTransactorSession struct { + Contract *AbsOutboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// IDelayedMessageProviderRaw is an auto generated low-level Go binding around an Ethereum contract. -type IDelayedMessageProviderRaw struct { - Contract *IDelayedMessageProvider // Generic contract binding to access the raw methods on +// AbsOutboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type AbsOutboxRaw struct { + Contract *AbsOutbox // Generic contract binding to access the raw methods on } -// IDelayedMessageProviderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type IDelayedMessageProviderCallerRaw struct { - Contract *IDelayedMessageProviderCaller // Generic read-only contract binding to access the raw methods on +// AbsOutboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbsOutboxCallerRaw struct { + Contract *AbsOutboxCaller // Generic read-only contract binding to access the raw methods on } -// IDelayedMessageProviderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type IDelayedMessageProviderTransactorRaw struct { - Contract *IDelayedMessageProviderTransactor // Generic write-only contract binding to access the raw methods on +// AbsOutboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbsOutboxTransactorRaw struct { + Contract *AbsOutboxTransactor // Generic write-only contract binding to access the raw methods on } -// NewIDelayedMessageProvider creates a new instance of IDelayedMessageProvider, bound to a specific deployed contract. -func NewIDelayedMessageProvider(address common.Address, backend bind.ContractBackend) (*IDelayedMessageProvider, error) { - contract, err := bindIDelayedMessageProvider(address, backend, backend, backend) +// NewAbsOutbox creates a new instance of AbsOutbox, bound to a specific deployed contract. +func NewAbsOutbox(address common.Address, backend bind.ContractBackend) (*AbsOutbox, error) { + contract, err := bindAbsOutbox(address, backend, backend, backend) if err != nil { return nil, err } - return &IDelayedMessageProvider{IDelayedMessageProviderCaller: IDelayedMessageProviderCaller{contract: contract}, IDelayedMessageProviderTransactor: IDelayedMessageProviderTransactor{contract: contract}, IDelayedMessageProviderFilterer: IDelayedMessageProviderFilterer{contract: contract}}, nil + return &AbsOutbox{AbsOutboxCaller: AbsOutboxCaller{contract: contract}, AbsOutboxTransactor: AbsOutboxTransactor{contract: contract}, AbsOutboxFilterer: AbsOutboxFilterer{contract: contract}}, nil } -// NewIDelayedMessageProviderCaller creates a new read-only instance of IDelayedMessageProvider, bound to a specific deployed contract. -func NewIDelayedMessageProviderCaller(address common.Address, caller bind.ContractCaller) (*IDelayedMessageProviderCaller, error) { - contract, err := bindIDelayedMessageProvider(address, caller, nil, nil) +// NewAbsOutboxCaller creates a new read-only instance of AbsOutbox, bound to a specific deployed contract. +func NewAbsOutboxCaller(address common.Address, caller bind.ContractCaller) (*AbsOutboxCaller, error) { + contract, err := bindAbsOutbox(address, caller, nil, nil) if err != nil { return nil, err } - return &IDelayedMessageProviderCaller{contract: contract}, nil + return &AbsOutboxCaller{contract: contract}, nil } -// NewIDelayedMessageProviderTransactor creates a new write-only instance of IDelayedMessageProvider, bound to a specific deployed contract. -func NewIDelayedMessageProviderTransactor(address common.Address, transactor bind.ContractTransactor) (*IDelayedMessageProviderTransactor, error) { - contract, err := bindIDelayedMessageProvider(address, nil, transactor, nil) +// NewAbsOutboxTransactor creates a new write-only instance of AbsOutbox, bound to a specific deployed contract. +func NewAbsOutboxTransactor(address common.Address, transactor bind.ContractTransactor) (*AbsOutboxTransactor, error) { + contract, err := bindAbsOutbox(address, nil, transactor, nil) if err != nil { return nil, err } - return &IDelayedMessageProviderTransactor{contract: contract}, nil + return &AbsOutboxTransactor{contract: contract}, nil } -// NewIDelayedMessageProviderFilterer creates a new log filterer instance of IDelayedMessageProvider, bound to a specific deployed contract. -func NewIDelayedMessageProviderFilterer(address common.Address, filterer bind.ContractFilterer) (*IDelayedMessageProviderFilterer, error) { - contract, err := bindIDelayedMessageProvider(address, nil, nil, filterer) +// NewAbsOutboxFilterer creates a new log filterer instance of AbsOutbox, bound to a specific deployed contract. +func NewAbsOutboxFilterer(address common.Address, filterer bind.ContractFilterer) (*AbsOutboxFilterer, error) { + contract, err := bindAbsOutbox(address, nil, nil, filterer) if err != nil { return nil, err } - return &IDelayedMessageProviderFilterer{contract: contract}, nil + return &AbsOutboxFilterer{contract: contract}, nil } -// bindIDelayedMessageProvider binds a generic wrapper to an already deployed contract. -func bindIDelayedMessageProvider(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IDelayedMessageProviderMetaData.GetAbi() +// bindAbsOutbox binds a generic wrapper to an already deployed contract. +func bindAbsOutbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AbsOutboxMetaData.GetAbi() if err != nil { return nil, err } @@ -3240,43 +3438,16058 @@ func bindIDelayedMessageProvider(address common.Address, caller bind.ContractCal // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IDelayedMessageProvider.Contract.IDelayedMessageProviderCaller.contract.Call(opts, result, method, params...) +func (_AbsOutbox *AbsOutboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsOutbox.Contract.AbsOutboxCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IDelayedMessageProvider.Contract.IDelayedMessageProviderTransactor.contract.Transfer(opts) +func (_AbsOutbox *AbsOutboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsOutbox.Contract.AbsOutboxTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IDelayedMessageProvider.Contract.IDelayedMessageProviderTransactor.contract.Transact(opts, method, params...) +func (_AbsOutbox *AbsOutboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsOutbox.Contract.AbsOutboxTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IDelayedMessageProvider *IDelayedMessageProviderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IDelayedMessageProvider.Contract.contract.Call(opts, result, method, params...) +func (_AbsOutbox *AbsOutboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsOutbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbsOutbox *AbsOutboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsOutbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbsOutbox *AbsOutboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsOutbox.Contract.contract.Transact(opts, method, params...) +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_AbsOutbox *AbsOutboxCaller) OUTBOXVERSION(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "OUTBOX_VERSION") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_AbsOutbox *AbsOutboxSession) OUTBOXVERSION() (*big.Int, error) { + return _AbsOutbox.Contract.OUTBOXVERSION(&_AbsOutbox.CallOpts) +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_AbsOutbox *AbsOutboxCallerSession) OUTBOXVERSION() (*big.Int, error) { + return _AbsOutbox.Contract.OUTBOXVERSION(&_AbsOutbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsOutbox *AbsOutboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsOutbox *AbsOutboxSession) Bridge() (common.Address, error) { + return _AbsOutbox.Contract.Bridge(&_AbsOutbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsOutbox *AbsOutboxCallerSession) Bridge() (common.Address, error) { + return _AbsOutbox.Contract.Bridge(&_AbsOutbox.CallOpts) +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxCaller) CalculateItemHash(opts *bind.CallOpts, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "calculateItemHash", l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxSession) CalculateItemHash(l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + return _AbsOutbox.Contract.CalculateItemHash(&_AbsOutbox.CallOpts, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxCallerSession) CalculateItemHash(l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + return _AbsOutbox.Contract.CalculateItemHash(&_AbsOutbox.CallOpts, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxCaller) CalculateMerkleRoot(opts *bind.CallOpts, proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "calculateMerkleRoot", proof, path, item) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxSession) CalculateMerkleRoot(proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + return _AbsOutbox.Contract.CalculateMerkleRoot(&_AbsOutbox.CallOpts, proof, path, item) +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_AbsOutbox *AbsOutboxCallerSession) CalculateMerkleRoot(proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + return _AbsOutbox.Contract.CalculateMerkleRoot(&_AbsOutbox.CallOpts, proof, path, item) +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_AbsOutbox *AbsOutboxCaller) IsSpent(opts *bind.CallOpts, index *big.Int) (bool, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "isSpent", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_AbsOutbox *AbsOutboxSession) IsSpent(index *big.Int) (bool, error) { + return _AbsOutbox.Contract.IsSpent(&_AbsOutbox.CallOpts, index) +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_AbsOutbox *AbsOutboxCallerSession) IsSpent(index *big.Int) (bool, error) { + return _AbsOutbox.Contract.IsSpent(&_AbsOutbox.CallOpts, index) +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1BatchNum(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1BatchNum") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_AbsOutbox *AbsOutboxSession) L2ToL1BatchNum() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1BatchNum(&_AbsOutbox.CallOpts) +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1BatchNum() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1BatchNum(&_AbsOutbox.CallOpts) +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1Block(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1Block") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_AbsOutbox *AbsOutboxSession) L2ToL1Block() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1Block(&_AbsOutbox.CallOpts) +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1Block() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1Block(&_AbsOutbox.CallOpts) +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1EthBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1EthBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_AbsOutbox *AbsOutboxSession) L2ToL1EthBlock() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1EthBlock(&_AbsOutbox.CallOpts) +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1EthBlock() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1EthBlock(&_AbsOutbox.CallOpts) +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1OutputId(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1OutputId") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_AbsOutbox *AbsOutboxSession) L2ToL1OutputId() ([32]byte, error) { + return _AbsOutbox.Contract.L2ToL1OutputId(&_AbsOutbox.CallOpts) +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1OutputId() ([32]byte, error) { + return _AbsOutbox.Contract.L2ToL1OutputId(&_AbsOutbox.CallOpts) +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_AbsOutbox *AbsOutboxSession) L2ToL1Sender() (common.Address, error) { + return _AbsOutbox.Contract.L2ToL1Sender(&_AbsOutbox.CallOpts) +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1Sender() (common.Address, error) { + return _AbsOutbox.Contract.L2ToL1Sender(&_AbsOutbox.CallOpts) +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_AbsOutbox *AbsOutboxCaller) L2ToL1Timestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "l2ToL1Timestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_AbsOutbox *AbsOutboxSession) L2ToL1Timestamp() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1Timestamp(&_AbsOutbox.CallOpts) +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_AbsOutbox *AbsOutboxCallerSession) L2ToL1Timestamp() (*big.Int, error) { + return _AbsOutbox.Contract.L2ToL1Timestamp(&_AbsOutbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsOutbox *AbsOutboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsOutbox *AbsOutboxSession) Rollup() (common.Address, error) { + return _AbsOutbox.Contract.Rollup(&_AbsOutbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsOutbox *AbsOutboxCallerSession) Rollup() (common.Address, error) { + return _AbsOutbox.Contract.Rollup(&_AbsOutbox.CallOpts) +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxCaller) Roots(opts *bind.CallOpts, arg0 [32]byte) ([32]byte, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "roots", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxSession) Roots(arg0 [32]byte) ([32]byte, error) { + return _AbsOutbox.Contract.Roots(&_AbsOutbox.CallOpts, arg0) +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxCallerSession) Roots(arg0 [32]byte) ([32]byte, error) { + return _AbsOutbox.Contract.Roots(&_AbsOutbox.CallOpts, arg0) +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxCaller) Spent(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _AbsOutbox.contract.Call(opts, &out, "spent", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxSession) Spent(arg0 *big.Int) ([32]byte, error) { + return _AbsOutbox.Contract.Spent(&_AbsOutbox.CallOpts, arg0) +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_AbsOutbox *AbsOutboxCallerSession) Spent(arg0 *big.Int) ([32]byte, error) { + return _AbsOutbox.Contract.Spent(&_AbsOutbox.CallOpts, arg0) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxTransactor) ExecuteTransaction(opts *bind.TransactOpts, proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "executeTransaction", proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxSession) ExecuteTransaction(proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.ExecuteTransaction(&_AbsOutbox.TransactOpts, proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxTransactorSession) ExecuteTransaction(proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.ExecuteTransaction(&_AbsOutbox.TransactOpts, proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxTransactor) ExecuteTransactionSimulation(opts *bind.TransactOpts, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "executeTransactionSimulation", index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxSession) ExecuteTransactionSimulation(index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.ExecuteTransactionSimulation(&_AbsOutbox.TransactOpts, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_AbsOutbox *AbsOutboxTransactorSession) ExecuteTransactionSimulation(index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.ExecuteTransactionSimulation(&_AbsOutbox.TransactOpts, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsOutbox *AbsOutboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "initialize", _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsOutbox *AbsOutboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _AbsOutbox.Contract.Initialize(&_AbsOutbox.TransactOpts, _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsOutbox *AbsOutboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _AbsOutbox.Contract.Initialize(&_AbsOutbox.TransactOpts, _bridge) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_AbsOutbox *AbsOutboxTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_AbsOutbox *AbsOutboxSession) PostUpgradeInit() (*types.Transaction, error) { + return _AbsOutbox.Contract.PostUpgradeInit(&_AbsOutbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_AbsOutbox *AbsOutboxTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _AbsOutbox.Contract.PostUpgradeInit(&_AbsOutbox.TransactOpts) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsOutbox *AbsOutboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "updateRollupAddress") +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsOutbox *AbsOutboxSession) UpdateRollupAddress() (*types.Transaction, error) { + return _AbsOutbox.Contract.UpdateRollupAddress(&_AbsOutbox.TransactOpts) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsOutbox *AbsOutboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { + return _AbsOutbox.Contract.UpdateRollupAddress(&_AbsOutbox.TransactOpts) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_AbsOutbox *AbsOutboxTransactor) UpdateSendRoot(opts *bind.TransactOpts, root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _AbsOutbox.contract.Transact(opts, "updateSendRoot", root, l2BlockHash) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_AbsOutbox *AbsOutboxSession) UpdateSendRoot(root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.UpdateSendRoot(&_AbsOutbox.TransactOpts, root, l2BlockHash) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_AbsOutbox *AbsOutboxTransactorSession) UpdateSendRoot(root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _AbsOutbox.Contract.UpdateSendRoot(&_AbsOutbox.TransactOpts, root, l2BlockHash) +} + +// AbsOutboxOutBoxTransactionExecutedIterator is returned from FilterOutBoxTransactionExecuted and is used to iterate over the raw logs and unpacked data for OutBoxTransactionExecuted events raised by the AbsOutbox contract. +type AbsOutboxOutBoxTransactionExecutedIterator struct { + Event *AbsOutboxOutBoxTransactionExecuted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsOutboxOutBoxTransactionExecutedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsOutboxOutBoxTransactionExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsOutboxOutBoxTransactionExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsOutboxOutBoxTransactionExecutedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsOutboxOutBoxTransactionExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AbsOutboxOutBoxTransactionExecuted represents a OutBoxTransactionExecuted event raised by the AbsOutbox contract. +type AbsOutboxOutBoxTransactionExecuted struct { + To common.Address + L2Sender common.Address + Zero *big.Int + TransactionIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutBoxTransactionExecuted is a free log retrieval operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_AbsOutbox *AbsOutboxFilterer) FilterOutBoxTransactionExecuted(opts *bind.FilterOpts, to []common.Address, l2Sender []common.Address, zero []*big.Int) (*AbsOutboxOutBoxTransactionExecutedIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var l2SenderRule []interface{} + for _, l2SenderItem := range l2Sender { + l2SenderRule = append(l2SenderRule, l2SenderItem) + } + var zeroRule []interface{} + for _, zeroItem := range zero { + zeroRule = append(zeroRule, zeroItem) + } + + logs, sub, err := _AbsOutbox.contract.FilterLogs(opts, "OutBoxTransactionExecuted", toRule, l2SenderRule, zeroRule) + if err != nil { + return nil, err + } + return &AbsOutboxOutBoxTransactionExecutedIterator{contract: _AbsOutbox.contract, event: "OutBoxTransactionExecuted", logs: logs, sub: sub}, nil +} + +// WatchOutBoxTransactionExecuted is a free log subscription operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_AbsOutbox *AbsOutboxFilterer) WatchOutBoxTransactionExecuted(opts *bind.WatchOpts, sink chan<- *AbsOutboxOutBoxTransactionExecuted, to []common.Address, l2Sender []common.Address, zero []*big.Int) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var l2SenderRule []interface{} + for _, l2SenderItem := range l2Sender { + l2SenderRule = append(l2SenderRule, l2SenderItem) + } + var zeroRule []interface{} + for _, zeroItem := range zero { + zeroRule = append(zeroRule, zeroItem) + } + + logs, sub, err := _AbsOutbox.contract.WatchLogs(opts, "OutBoxTransactionExecuted", toRule, l2SenderRule, zeroRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsOutboxOutBoxTransactionExecuted) + if err := _AbsOutbox.contract.UnpackLog(event, "OutBoxTransactionExecuted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutBoxTransactionExecuted is a log parse operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_AbsOutbox *AbsOutboxFilterer) ParseOutBoxTransactionExecuted(log types.Log) (*AbsOutboxOutBoxTransactionExecuted, error) { + event := new(AbsOutboxOutBoxTransactionExecuted) + if err := _AbsOutbox.contract.UnpackLog(event, "OutBoxTransactionExecuted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AbsOutboxSendRootUpdatedIterator is returned from FilterSendRootUpdated and is used to iterate over the raw logs and unpacked data for SendRootUpdated events raised by the AbsOutbox contract. +type AbsOutboxSendRootUpdatedIterator struct { + Event *AbsOutboxSendRootUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsOutboxSendRootUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsOutboxSendRootUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsOutboxSendRootUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsOutboxSendRootUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsOutboxSendRootUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AbsOutboxSendRootUpdated represents a SendRootUpdated event raised by the AbsOutbox contract. +type AbsOutboxSendRootUpdated struct { + OutputRoot [32]byte + L2BlockHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSendRootUpdated is a free log retrieval operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_AbsOutbox *AbsOutboxFilterer) FilterSendRootUpdated(opts *bind.FilterOpts, outputRoot [][32]byte, l2BlockHash [][32]byte) (*AbsOutboxSendRootUpdatedIterator, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2BlockHashRule []interface{} + for _, l2BlockHashItem := range l2BlockHash { + l2BlockHashRule = append(l2BlockHashRule, l2BlockHashItem) + } + + logs, sub, err := _AbsOutbox.contract.FilterLogs(opts, "SendRootUpdated", outputRootRule, l2BlockHashRule) + if err != nil { + return nil, err + } + return &AbsOutboxSendRootUpdatedIterator{contract: _AbsOutbox.contract, event: "SendRootUpdated", logs: logs, sub: sub}, nil +} + +// WatchSendRootUpdated is a free log subscription operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_AbsOutbox *AbsOutboxFilterer) WatchSendRootUpdated(opts *bind.WatchOpts, sink chan<- *AbsOutboxSendRootUpdated, outputRoot [][32]byte, l2BlockHash [][32]byte) (event.Subscription, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2BlockHashRule []interface{} + for _, l2BlockHashItem := range l2BlockHash { + l2BlockHashRule = append(l2BlockHashRule, l2BlockHashItem) + } + + logs, sub, err := _AbsOutbox.contract.WatchLogs(opts, "SendRootUpdated", outputRootRule, l2BlockHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsOutboxSendRootUpdated) + if err := _AbsOutbox.contract.UnpackLog(event, "SendRootUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSendRootUpdated is a log parse operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_AbsOutbox *AbsOutboxFilterer) ParseSendRootUpdated(log types.Log) (*AbsOutboxSendRootUpdated, error) { + event := new(AbsOutboxSendRootUpdated) + if err := _AbsOutbox.contract.UnpackLog(event, "SendRootUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeMetaData contains all meta data concerning the Bridge contract. +var BridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50608051611a716100306000396000610f2a0152611a716000f3fe60806040526004361061017f5760003560e01c80639e5d4c49116100d6578063d5719dc21161007f578063eca067ad11610059578063eca067ad14610457578063ee35f3271461046c578063f81ff3b31461048c57600080fd5b8063d5719dc214610417578063e76f5c8d14610437578063e77145f41461023457600080fd5b8063c4d66de8116100b0578063c4d66de8146103b7578063cb23bcb5146103d7578063cee3d728146103f757600080fd5b80639e5d4c4914610337578063ab5d894314610365578063ae60bd131461037a57600080fd5b80635fca4a16116101385780638db5993b116101125780638db5993b146102cc578063919cc706146102df578063945e1147146102ff57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028c57600080fd5b8063413b35bd11610169578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a8575b600080fd5b34801561019057600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c3366004611761565b6104ac565b3480156101d457600080fd5b506102046101e336600461178f565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f3660046117b3565b6104cd565b005b34801561024257600080fd5b5061023461025136600461178f565b6107d3565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b506101956102873660046117f1565b6108ff565b34801561029857600080fd5b506102ac6102a736600461181d565b610960565b60408051948552602085019390935291830152606082015260800161019f565b6101956102da36600461184f565b610af9565b3480156102eb57600080fd5b506102346102fa36600461178f565b610b0f565b34801561030b57600080fd5b5061031f61031a366004611761565b610c34565b6040516001600160a01b03909116815260200161019f565b34801561034357600080fd5b50610357610352366004611896565b610c5e565b60405161019f929190611943565b34801561037157600080fd5b5061031f610df4565b34801561038657600080fd5b5061020461039536600461178f565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103c357600080fd5b506102346103d236600461178f565b610e37565b3480156103e357600080fd5b5060085461031f906001600160a01b031681565b34801561040357600080fd5b506102346104123660046117b3565b61105b565b34801561042357600080fd5b50610195610432366004611761565b6113c9565b34801561044357600080fd5b5061031f610452366004611761565b6113d9565b34801561046357600080fd5b50600654610195565b34801561047857600080fd5b5060095461031f906001600160a01b031681565b34801561049857600080fd5b506102346104a7366004611761565b6113e9565b600781815481106104bc57600080fd5b600091825260209091200154905081565b6008546001600160a01b0316331461059c5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d919061197f565b9050336001600160a01b0382161461059a57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106085750505050565b82156106a357604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600380546106b39060019061199c565b815481106106c3576106c36119bd565b6000918252602090912001548254600380546001600160a01b039093169290919081106106f2576106f26119bd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600160006003856000015481548110610740576107406119bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610776576107766119d3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6008546001600160a01b0316331461089d5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610853919061197f565b9050336001600160a01b0382161461089b57600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a906020015b60405180910390a150565b6009546000906001600160a01b03163314610948576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610957600d84434248876114b8565b90505b92915050565b6009546000908190819081906001600160a01b031633146109af576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b85600a54141580156109c057508515155b80156109cd5750600a5415155b15610a1257600a546040517fe2051feb000000000000000000000000000000000000000000000000000000008152600481019190915260248101879052604401610591565b600a85905560075493508315610a505760078054610a329060019061199c565b81548110610a4257610a426119bd565b906000526020600020015492505b8615610a81576006610a6360018961199c565b81548110610a7357610a736119bd565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b6000610b078484843461168a565b949350505050565b6008546001600160a01b03163314610bd95760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f919061197f565b9050336001600160a01b03821614610bd757600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a906020016108f4565b60048181548110610c4457600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610caf576040517f32ea82ab000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b8215801590610cc657506001600160a01b0386163b155b15610d08576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610591565b6005805473ffffffffffffffffffffffffffffffffffffffff1981163317909155604080516020601f87018190048102820181019092528581526001600160a01b0390921691610d76918991899189908990819084018382808284376000920191909152506116f292505050565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610de2908a908a908a906119e9565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000018101610e3257600091505090565b919050565b600054610100900460ff1615808015610e575750600054600160ff909116105b80610e715750303b158015610e71575060005460ff166001145b610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610591565b6000805460ff191660011790558015610f20576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556008805490911691841691909117905580156107cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6008546001600160a01b031633146111255760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db919061197f565b9050336001600160a01b0382161461112357600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b03831601611192576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610591565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a2821515811515036111ff5750505050565b821561129b57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600480546112ab9060019061199c565b815481106112bb576112bb6119bd565b6000918252602090912001548254600480546001600160a01b039093169290919081106112ea576112ea6119bd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600260006004856000015481548110611338576113386119bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600480548061136e5761136e6119d3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104bc57600080fd5b60038181548110610c4457600080fd5b6008546001600160a01b031633146114b35760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611469919061197f565b9050336001600160a01b038216146114b157600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b600a55565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a5909201909252805191012060009190600082156115b557600661159760018561199c565b815481106115a7576115a76119bd565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b3360009081526001602081905260408220015460ff166116d8576040517fb6c60ea3000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b60006116e88686434248896114b8565b9695505050505050565b60006060846001600160a01b0316848460405161170f9190611a1f565b60006040518083038185875af1925050503d806000811461174c576040519150601f19603f3d011682016040523d82523d6000602084013e611751565b606091505b5090969095509350505050565b50565b60006020828403121561177357600080fd5b5035919050565b6001600160a01b038116811461175e57600080fd5b6000602082840312156117a157600080fd5b81356117ac8161177a565b9392505050565b600080604083850312156117c657600080fd5b82356117d18161177a565b9150602083013580151581146117e657600080fd5b809150509250929050565b6000806040838503121561180457600080fd5b823561180f8161177a565b946020939093013593505050565b6000806000806080858703121561183357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561186457600080fd5b833560ff8116811461187557600080fd5b925060208401356118858161177a565b929592945050506040919091013590565b600080600080606085870312156118ac57600080fd5b84356118b78161177a565b935060208501359250604085013567ffffffffffffffff808211156118db57600080fd5b818701915087601f8301126118ef57600080fd5b8135818111156118fe57600080fd5b88602082850101111561191057600080fd5b95989497505060200194505050565b60005b8381101561193a578181015183820152602001611922565b50506000910152565b8215158152604060208201526000825180604084015261196a81606085016020870161191f565b601f01601f1916919091016060019392505050565b60006020828403121561199157600080fd5b81516117ac8161177a565b8181038181111561095a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251611a3181846020870161191f565b919091019291505056fea2646970667358221220f09ac599ae9a292d61113612565f42dc9a7ab0843609f16028c4c796db0db04164736f6c63430008110033", +} + +// BridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use BridgeMetaData.ABI instead. +var BridgeABI = BridgeMetaData.ABI + +// BridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BridgeMetaData.Bin instead. +var BridgeBin = BridgeMetaData.Bin + +// DeployBridge deploys a new Ethereum contract, binding an instance of Bridge to it. +func DeployBridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Bridge, error) { + parsed, err := BridgeMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BridgeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Bridge{BridgeCaller: BridgeCaller{contract: contract}, BridgeTransactor: BridgeTransactor{contract: contract}, BridgeFilterer: BridgeFilterer{contract: contract}}, nil +} + +// Bridge is an auto generated Go binding around an Ethereum contract. +type Bridge struct { + BridgeCaller // Read-only binding to the contract + BridgeTransactor // Write-only binding to the contract + BridgeFilterer // Log filterer for contract events +} + +// BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type BridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BridgeSession struct { + Contract *Bridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BridgeCallerSession struct { + Contract *BridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BridgeTransactorSession struct { + Contract *BridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type BridgeRaw struct { + Contract *Bridge // Generic contract binding to access the raw methods on +} + +// BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BridgeCallerRaw struct { + Contract *BridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BridgeTransactorRaw struct { + Contract *BridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBridge creates a new instance of Bridge, bound to a specific deployed contract. +func NewBridge(address common.Address, backend bind.ContractBackend) (*Bridge, error) { + contract, err := bindBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Bridge{BridgeCaller: BridgeCaller{contract: contract}, BridgeTransactor: BridgeTransactor{contract: contract}, BridgeFilterer: BridgeFilterer{contract: contract}}, nil +} + +// NewBridgeCaller creates a new read-only instance of Bridge, bound to a specific deployed contract. +func NewBridgeCaller(address common.Address, caller bind.ContractCaller) (*BridgeCaller, error) { + contract, err := bindBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BridgeCaller{contract: contract}, nil +} + +// NewBridgeTransactor creates a new write-only instance of Bridge, bound to a specific deployed contract. +func NewBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*BridgeTransactor, error) { + contract, err := bindBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BridgeTransactor{contract: contract}, nil +} + +// NewBridgeFilterer creates a new log filterer instance of Bridge, bound to a specific deployed contract. +func NewBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*BridgeFilterer, error) { + contract, err := bindBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BridgeFilterer{contract: contract}, nil +} + +// bindBridge binds a generic wrapper to an already deployed contract. +func bindBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Bridge *BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Bridge.Contract.BridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Bridge *BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Bridge.Contract.BridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Bridge *BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Bridge.Contract.BridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Bridge *BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Bridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Bridge *BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Bridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Bridge *BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Bridge.Contract.contract.Transact(opts, method, params...) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_Bridge *BridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "activeOutbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_Bridge *BridgeSession) ActiveOutbox() (common.Address, error) { + return _Bridge.Contract.ActiveOutbox(&_Bridge.CallOpts) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_Bridge *BridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _Bridge.Contract.ActiveOutbox(&_Bridge.CallOpts) +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_Bridge *BridgeCaller) AllowedDelayedInboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "allowedDelayedInboxList", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_Bridge *BridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _Bridge.Contract.AllowedDelayedInboxList(&_Bridge.CallOpts, arg0) +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_Bridge *BridgeCallerSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _Bridge.Contract.AllowedDelayedInboxList(&_Bridge.CallOpts, arg0) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_Bridge *BridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_Bridge *BridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _Bridge.Contract.AllowedDelayedInboxes(&_Bridge.CallOpts, inbox) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_Bridge *BridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _Bridge.Contract.AllowedDelayedInboxes(&_Bridge.CallOpts, inbox) +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_Bridge *BridgeCaller) AllowedOutboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "allowedOutboxList", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_Bridge *BridgeSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _Bridge.Contract.AllowedOutboxList(&_Bridge.CallOpts, arg0) +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_Bridge *BridgeCallerSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _Bridge.Contract.AllowedOutboxList(&_Bridge.CallOpts, arg0) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_Bridge *BridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_Bridge *BridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _Bridge.Contract.AllowedOutboxes(&_Bridge.CallOpts, outbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_Bridge *BridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _Bridge.Contract.AllowedOutboxes(&_Bridge.CallOpts, outbox) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _Bridge.Contract.DelayedInboxAccs(&_Bridge.CallOpts, arg0) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _Bridge.Contract.DelayedInboxAccs(&_Bridge.CallOpts, arg0) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_Bridge *BridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "delayedMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_Bridge *BridgeSession) DelayedMessageCount() (*big.Int, error) { + return _Bridge.Contract.DelayedMessageCount(&_Bridge.CallOpts) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_Bridge *BridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _Bridge.Contract.DelayedMessageCount(&_Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_Bridge *BridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_Bridge *BridgeSession) Rollup() (common.Address, error) { + return _Bridge.Contract.Rollup(&_Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_Bridge *BridgeCallerSession) Rollup() (common.Address, error) { + return _Bridge.Contract.Rollup(&_Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_Bridge *BridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_Bridge *BridgeSession) SequencerInbox() (common.Address, error) { + return _Bridge.Contract.SequencerInbox(&_Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_Bridge *BridgeCallerSession) SequencerInbox() (common.Address, error) { + return _Bridge.Contract.SequencerInbox(&_Bridge.CallOpts) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _Bridge.Contract.SequencerInboxAccs(&_Bridge.CallOpts, arg0) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_Bridge *BridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _Bridge.Contract.SequencerInboxAccs(&_Bridge.CallOpts, arg0) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_Bridge *BridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "sequencerMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_Bridge *BridgeSession) SequencerMessageCount() (*big.Int, error) { + return _Bridge.Contract.SequencerMessageCount(&_Bridge.CallOpts) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_Bridge *BridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _Bridge.Contract.SequencerMessageCount(&_Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_Bridge *BridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Bridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_Bridge *BridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _Bridge.Contract.SequencerReportedSubMessageCount(&_Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_Bridge *BridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _Bridge.Contract.SequencerReportedSubMessageCount(&_Bridge.CallOpts) +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_Bridge *BridgeTransactor) AcceptFundsFromOldBridge(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "acceptFundsFromOldBridge") +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_Bridge *BridgeSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _Bridge.Contract.AcceptFundsFromOldBridge(&_Bridge.TransactOpts) +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_Bridge *BridgeTransactorSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _Bridge.Contract.AcceptFundsFromOldBridge(&_Bridge.TransactOpts) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_Bridge *BridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_Bridge *BridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.Contract.EnqueueDelayedMessage(&_Bridge.TransactOpts, kind, sender, messageDataHash) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_Bridge *BridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.Contract.EnqueueDelayedMessage(&_Bridge.TransactOpts, kind, sender, messageDataHash) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_Bridge *BridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_Bridge *BridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _Bridge.Contract.EnqueueSequencerMessage(&_Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_Bridge *BridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _Bridge.Contract.EnqueueSequencerMessage(&_Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_Bridge *BridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "executeCall", to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_Bridge *BridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.ExecuteCall(&_Bridge.TransactOpts, to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_Bridge *BridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _Bridge.Contract.ExecuteCall(&_Bridge.TransactOpts, to, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_Bridge *BridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "initialize", rollup_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_Bridge *BridgeSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { + return _Bridge.Contract.Initialize(&_Bridge.TransactOpts, rollup_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_Bridge *BridgeTransactorSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { + return _Bridge.Contract.Initialize(&_Bridge.TransactOpts, rollup_) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_Bridge *BridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_Bridge *BridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.Contract.SetDelayedInbox(&_Bridge.TransactOpts, inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_Bridge *BridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.Contract.SetDelayedInbox(&_Bridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_Bridge *BridgeTransactor) SetOutbox(opts *bind.TransactOpts, outbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "setOutbox", outbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_Bridge *BridgeSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.Contract.SetOutbox(&_Bridge.TransactOpts, outbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_Bridge *BridgeTransactorSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _Bridge.Contract.SetOutbox(&_Bridge.TransactOpts, outbox, enabled) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_Bridge *BridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_Bridge *BridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _Bridge.Contract.SetSequencerInbox(&_Bridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_Bridge *BridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _Bridge.Contract.SetSequencerInbox(&_Bridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_Bridge *BridgeTransactor) SetSequencerReportedSubMessageCount(opts *bind.TransactOpts, newMsgCount *big.Int) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "setSequencerReportedSubMessageCount", newMsgCount) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_Bridge *BridgeSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _Bridge.Contract.SetSequencerReportedSubMessageCount(&_Bridge.TransactOpts, newMsgCount) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_Bridge *BridgeTransactorSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _Bridge.Contract.SetSequencerReportedSubMessageCount(&_Bridge.TransactOpts, newMsgCount) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_Bridge *BridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "submitBatchSpendingReport", sender, messageDataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_Bridge *BridgeSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.Contract.SubmitBatchSpendingReport(&_Bridge.TransactOpts, sender, messageDataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_Bridge *BridgeTransactorSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _Bridge.Contract.SubmitBatchSpendingReport(&_Bridge.TransactOpts, sender, messageDataHash) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_Bridge *BridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _Bridge.contract.Transact(opts, "updateRollupAddress", _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_Bridge *BridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpdateRollupAddress(&_Bridge.TransactOpts, _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_Bridge *BridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _Bridge.Contract.UpdateRollupAddress(&_Bridge.TransactOpts, _rollup) +} + +// BridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the Bridge contract. +type BridgeBridgeCallTriggeredIterator struct { + Event *BridgeBridgeCallTriggered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeBridgeCallTriggeredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeBridgeCallTriggeredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeBridgeCallTriggeredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the Bridge contract. +type BridgeBridgeCallTriggered struct { + Outbox common.Address + To common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_Bridge *BridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*BridgeBridgeCallTriggeredIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return &BridgeBridgeCallTriggeredIterator{contract: _Bridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil +} + +// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_Bridge *BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *BridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeBridgeCallTriggered) + if err := _Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_Bridge *BridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*BridgeBridgeCallTriggered, error) { + event := new(BridgeBridgeCallTriggered) + if err := _Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the Bridge contract. +type BridgeInboxToggleIterator struct { + Event *BridgeInboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeInboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeInboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeInboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeInboxToggle represents a InboxToggle event raised by the Bridge contract. +type BridgeInboxToggle struct { + Inbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_Bridge *BridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*BridgeInboxToggleIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return &BridgeInboxToggleIterator{contract: _Bridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil +} + +// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_Bridge *BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *BridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeInboxToggle) + if err := _Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_Bridge *BridgeFilterer) ParseInboxToggle(log types.Log) (*BridgeInboxToggle, error) { + event := new(BridgeInboxToggle) + if err := _Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Bridge contract. +type BridgeInitializedIterator struct { + Event *BridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeInitialized represents a Initialized event raised by the Bridge contract. +type BridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Bridge *BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*BridgeInitializedIterator, error) { + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &BridgeInitializedIterator{contract: _Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Bridge *BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeInitialized) + if err := _Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Bridge *BridgeFilterer) ParseInitialized(log types.Log) (*BridgeInitialized, error) { + event := new(BridgeInitialized) + if err := _Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the Bridge contract. +type BridgeMessageDeliveredIterator struct { + Event *BridgeMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeMessageDelivered represents a MessageDelivered event raised by the Bridge contract. +type BridgeMessageDelivered struct { + MessageIndex *big.Int + BeforeInboxAcc [32]byte + Inbox common.Address + Kind uint8 + Sender common.Address + MessageDataHash [32]byte + BaseFeeL1 *big.Int + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_Bridge *BridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*BridgeMessageDeliveredIterator, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return &BridgeMessageDeliveredIterator{contract: _Bridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_Bridge *BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *BridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeMessageDelivered) + if err := _Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_Bridge *BridgeFilterer) ParseMessageDelivered(log types.Log) (*BridgeMessageDelivered, error) { + event := new(BridgeMessageDelivered) + if err := _Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the Bridge contract. +type BridgeOutboxToggleIterator struct { + Event *BridgeOutboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeOutboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeOutboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeOutboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeOutboxToggle represents a OutboxToggle event raised by the Bridge contract. +type BridgeOutboxToggle struct { + Outbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_Bridge *BridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*BridgeOutboxToggleIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return &BridgeOutboxToggleIterator{contract: _Bridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil +} + +// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_Bridge *BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *BridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeOutboxToggle) + if err := _Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_Bridge *BridgeFilterer) ParseOutboxToggle(log types.Log) (*BridgeOutboxToggle, error) { + event := new(BridgeOutboxToggle) + if err := _Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the Bridge contract. +type BridgeRollupUpdatedIterator struct { + Event *BridgeRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeRollupUpdated represents a RollupUpdated event raised by the Bridge contract. +type BridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_Bridge *BridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*BridgeRollupUpdatedIterator, error) { + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &BridgeRollupUpdatedIterator{contract: _Bridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_Bridge *BridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *BridgeRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeRollupUpdated) + if err := _Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_Bridge *BridgeFilterer) ParseRollupUpdated(log types.Log) (*BridgeRollupUpdated, error) { + event := new(BridgeRollupUpdated) + if err := _Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the Bridge contract. +type BridgeSequencerInboxUpdatedIterator struct { + Event *BridgeSequencerInboxUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the Bridge contract. +type BridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_Bridge *BridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*BridgeSequencerInboxUpdatedIterator, error) { + + logs, sub, err := _Bridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return &BridgeSequencerInboxUpdatedIterator{contract: _Bridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil +} + +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_Bridge *BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *BridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _Bridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeSequencerInboxUpdated) + if err := _Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_Bridge *BridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*BridgeSequencerInboxUpdated, error) { + event := new(BridgeSequencerInboxUpdated) + if err := _Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeMetaData contains all meta data concerning the ERC20Bridge contract. +var ERC20BridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"CallTargetNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidTokenSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenFeeAmount\",\"type\":\"uint256\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeToken_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b506080516120aa61003060003960006108e301526120aa6000f3fe60806040526004361061018a5760003560e01c80639e5d4c49116100d6578063e1758bd81161007f578063eca067ad11610059578063eca067ad1461048f578063ee35f327146104a4578063f81ff3b3146104c457600080fd5b8063e1758bd81461044f578063e76f5c8d1461046f578063e77145f41461023f57600080fd5b8063cb23bcb5116100b0578063cb23bcb5146103ef578063cee3d7281461040f578063d5719dc21461042f57600080fd5b80639e5d4c491461036f578063ab5d89431461039d578063ae60bd13146103b257600080fd5b80635fca4a161161013857806386598a561161011257806386598a56146102d7578063919cc70614610317578063945e11471461033757600080fd5b80635fca4a161461028157806375d81e25146102975780637a88b107146102b757600080fd5b806347fb24c51161016957806347fb24c51461021f578063485cc955146102415780634f61f8501461026157600080fd5b806284120c1461018f57806316bf5579146101b3578063413b35bd146101d3575b600080fd5b34801561019b57600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101a06101ce366004611d11565b6104e4565b3480156101df57600080fd5b5061020f6101ee366004611d3f565b6001600160a01b031660009081526002602052604090206001015460ff1690565b60405190151581526020016101aa565b34801561022b57600080fd5b5061023f61023a366004611d6a565b610505565b005b34801561024d57600080fd5b5061023f61025c366004611da3565b61080a565b34801561026d57600080fd5b5061023f61027c366004611d3f565b610a54565b34801561028d57600080fd5b506101a0600a5481565b3480156102a357600080fd5b506101a06102b2366004611dd1565b610b80565b3480156102c357600080fd5b506101a06102d2366004611e1d565b610b97565b3480156102e357600080fd5b506102f76102f2366004611e49565b610bf8565b6040805194855260208501939093529183015260608201526080016101aa565b34801561032357600080fd5b5061023f610332366004611d3f565b610d91565b34801561034357600080fd5b50610357610352366004611d11565b610eb6565b6040516001600160a01b0390911681526020016101aa565b34801561037b57600080fd5b5061038f61038a366004611e7b565b610ee0565b6040516101aa929190611f54565b3480156103a957600080fd5b50610357611076565b3480156103be57600080fd5b5061020f6103cd366004611d3f565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103fb57600080fd5b50600854610357906001600160a01b031681565b34801561041b57600080fd5b5061023f61042a366004611d6a565b6110b9565b34801561043b57600080fd5b506101a061044a366004611d11565b611427565b34801561045b57600080fd5b50603354610357906001600160a01b031681565b34801561047b57600080fd5b5061035761048a366004611d11565b611437565b34801561049b57600080fd5b506006546101a0565b3480156104b057600080fd5b50600954610357906001600160a01b031681565b3480156104d057600080fd5b5061023f6104df366004611d11565b611447565b600781815481106104f457600080fd5b600091825260209091200154905081565b6008546001600160a01b031633146105d45760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105859190611f6f565b9050336001600160a01b038216146105d257600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106405750505050565b82156106db57604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff19169091179055610804565b600380546106eb90600190611f8c565b815481106106fb576106fb611fad565b6000918252602090912001548254600380546001600160a01b0390931692909190811061072a5761072a611fad565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061077857610778611fad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560038054806107ae576107ae611fc3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505050565b600054610100900460ff161580801561082a5750600054600160ff909116105b806108445750303b158015610844575060005460ff166001145b6108b65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105c9565b6000805460ff1916600117905580156108d9576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109775760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105c9565b6001600160a01b0382166109c2576040517f06dff6d60000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016105c9565b603380546001600160a01b0380851673ffffffffffffffffffffffffffffffffffffffff19928316179092556005805482168317905560088054928616929091169190911790558015610a4f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6008546001600160a01b03163314610b1e5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190611f6f565b9050336001600160a01b03821614610b1c57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105c9565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a906020015b60405180910390a150565b6000610b8e85858585611516565b95945050505050565b6009546000906001600160a01b03163314610be0576040517f88f84f040000000000000000000000000000000000000000000000000000000081523360048201526024016105c9565b610bef600d844342488761157f565b90505b92915050565b6009546000908190819081906001600160a01b03163314610c47576040517f88f84f040000000000000000000000000000000000000000000000000000000081523360048201526024016105c9565b85600a5414158015610c5857508515155b8015610c655750600a5415155b15610caa57600a546040517fe2051feb0000000000000000000000000000000000000000000000000000000081526004810191909152602481018790526044016105c9565b600a85905560075493508315610ce85760078054610cca90600190611f8c565b81548110610cda57610cda611fad565b906000526020600020015492505b8615610d19576006610cfb600189611f8c565b81548110610d0b57610d0b611fad565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b6008546001600160a01b03163314610e5b5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190611f6f565b9050336001600160a01b03821614610e5957600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105c9565b505b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a90602001610b75565b60048181548110610ec657600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610f31576040517f32ea82ab0000000000000000000000000000000000000000000000000000000081523360048201526024016105c9565b8215801590610f4857506001600160a01b0386163b155b15610f8a576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b03871660048201526024016105c9565b6005805473ffffffffffffffffffffffffffffffffffffffff1981163317909155604080516020601f87018190048102820181019092528581526001600160a01b0390921691610ff89189918991899089908190840183828082843760009201919091525061175192505050565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690611064908a908a908a90611fd9565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000181016110b457600091505090565b919050565b6008546001600160a01b031633146111835760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111399190611f6f565b9050336001600160a01b0382161461118157600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105c9565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b038316016111f0576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016105c9565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a28215158115150361125d5750505050565b82156112f957604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff19169091179055610804565b6004805461130990600190611f8c565b8154811061131957611319611fad565b6000918252602090912001548254600480546001600160a01b0390931692909190811061134857611348611fad565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460026000600485600001548154811061139657611396611fad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806113cc576113cc611fc3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104f457600080fd5b60038181548110610ec657600080fd5b6008546001600160a01b031633146115115760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c79190611f6f565b9050336001600160a01b0382161461150f57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105c9565b505b600a55565b3360009081526001602081905260408220015460ff16611564576040517fb6c60ea30000000000000000000000000000000000000000000000000000000081523360048201526024016105c9565b600061157486864342858961157f565b9050610b8e8361197d565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a59092019092528051910120600091906000821561167c57600661165e600185611f8c565b8154811061166e5761166e611fad565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b6033546000906060906001600160a01b039081169086168190036117ac576040517fe16cd2080000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016105c9565b6117c06001600160a01b0382168787611998565b83516001935015611974576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f919061200f565b9050866001600160a01b0316856040516118699190612028565b6000604051808303816000865af19150503d80600081146118a6576040519150601f19603f3d011682016040523d82523d6000602084013e6118ab565b606091505b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291955093506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611911573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611935919061200f565b905081811015611971576040517f576b38b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b50935093915050565b603354611995906001600160a01b0316333084611a41565b50565b6040516001600160a01b038316602482015260448101829052610a4f9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a92565b6040516001600160a01b03808516602483015283166044820152606481018290526108049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119dd565b6000611ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b779092919063ffffffff16565b805190915015610a4f5780806020019051810190611b059190612044565b610a4f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105c9565b6060611b868484600085611b90565b90505b9392505050565b606082471015611c085760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105c9565b6001600160a01b0385163b611c5f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105c9565b600080866001600160a01b03168587604051611c7b9190612028565b60006040518083038185875af1925050503d8060008114611cb8576040519150601f19603f3d011682016040523d82523d6000602084013e611cbd565b606091505b5091509150611ccd828286611cd8565b979650505050505050565b60608315611ce7575081611b89565b825115611cf75782518084602001fd5b8160405162461bcd60e51b81526004016105c99190612061565b600060208284031215611d2357600080fd5b5035919050565b6001600160a01b038116811461199557600080fd5b600060208284031215611d5157600080fd5b8135611b8981611d2a565b801515811461199557600080fd5b60008060408385031215611d7d57600080fd5b8235611d8881611d2a565b91506020830135611d9881611d5c565b809150509250929050565b60008060408385031215611db657600080fd5b8235611dc181611d2a565b91506020830135611d9881611d2a565b60008060008060808587031215611de757600080fd5b843560ff81168114611df857600080fd5b93506020850135611e0881611d2a565b93969395505050506040820135916060013590565b60008060408385031215611e3057600080fd5b8235611e3b81611d2a565b946020939093013593505050565b60008060008060808587031215611e5f57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060608587031215611e9157600080fd5b8435611e9c81611d2a565b935060208501359250604085013567ffffffffffffffff80821115611ec057600080fd5b818701915087601f830112611ed457600080fd5b813581811115611ee357600080fd5b886020828501011115611ef557600080fd5b95989497505060200194505050565b60005b83811015611f1f578181015183820152602001611f07565b50506000910152565b60008151808452611f40816020860160208601611f04565b601f01601f19169290920160200192915050565b8215158152604060208201526000611b866040830184611f28565b600060208284031215611f8157600080fd5b8151611b8981611d2a565b81810381811115610bf257634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561202157600080fd5b5051919050565b6000825161203a818460208701611f04565b9190910192915050565b60006020828403121561205657600080fd5b8151611b8981611d5c565b602081526000610bef6020830184611f2856fea2646970667358221220920108598662d7d4af7f893a099369f252b1ca05a98b3183477e1277263d4c6364736f6c63430008110033", +} + +// ERC20BridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20BridgeMetaData.ABI instead. +var ERC20BridgeABI = ERC20BridgeMetaData.ABI + +// ERC20BridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20BridgeMetaData.Bin instead. +var ERC20BridgeBin = ERC20BridgeMetaData.Bin + +// DeployERC20Bridge deploys a new Ethereum contract, binding an instance of ERC20Bridge to it. +func DeployERC20Bridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20Bridge, error) { + parsed, err := ERC20BridgeMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20BridgeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20Bridge{ERC20BridgeCaller: ERC20BridgeCaller{contract: contract}, ERC20BridgeTransactor: ERC20BridgeTransactor{contract: contract}, ERC20BridgeFilterer: ERC20BridgeFilterer{contract: contract}}, nil +} + +// ERC20Bridge is an auto generated Go binding around an Ethereum contract. +type ERC20Bridge struct { + ERC20BridgeCaller // Read-only binding to the contract + ERC20BridgeTransactor // Write-only binding to the contract + ERC20BridgeFilterer // Log filterer for contract events +} + +// ERC20BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20BridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20BridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20BridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20BridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20BridgeSession struct { + Contract *ERC20Bridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20BridgeCallerSession struct { + Contract *ERC20BridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20BridgeTransactorSession struct { + Contract *ERC20BridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20BridgeRaw struct { + Contract *ERC20Bridge // Generic contract binding to access the raw methods on +} + +// ERC20BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20BridgeCallerRaw struct { + Contract *ERC20BridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20BridgeTransactorRaw struct { + Contract *ERC20BridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20Bridge creates a new instance of ERC20Bridge, bound to a specific deployed contract. +func NewERC20Bridge(address common.Address, backend bind.ContractBackend) (*ERC20Bridge, error) { + contract, err := bindERC20Bridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20Bridge{ERC20BridgeCaller: ERC20BridgeCaller{contract: contract}, ERC20BridgeTransactor: ERC20BridgeTransactor{contract: contract}, ERC20BridgeFilterer: ERC20BridgeFilterer{contract: contract}}, nil +} + +// NewERC20BridgeCaller creates a new read-only instance of ERC20Bridge, bound to a specific deployed contract. +func NewERC20BridgeCaller(address common.Address, caller bind.ContractCaller) (*ERC20BridgeCaller, error) { + contract, err := bindERC20Bridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20BridgeCaller{contract: contract}, nil +} + +// NewERC20BridgeTransactor creates a new write-only instance of ERC20Bridge, bound to a specific deployed contract. +func NewERC20BridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20BridgeTransactor, error) { + contract, err := bindERC20Bridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20BridgeTransactor{contract: contract}, nil +} + +// NewERC20BridgeFilterer creates a new log filterer instance of ERC20Bridge, bound to a specific deployed contract. +func NewERC20BridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20BridgeFilterer, error) { + contract, err := bindERC20Bridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20BridgeFilterer{contract: contract}, nil +} + +// bindERC20Bridge binds a generic wrapper to an already deployed contract. +func bindERC20Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20BridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Bridge *ERC20BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Bridge.Contract.ERC20BridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Bridge *ERC20BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Bridge.Contract.ERC20BridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Bridge *ERC20BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Bridge.Contract.ERC20BridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Bridge *ERC20BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Bridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Bridge *ERC20BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Bridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Bridge *ERC20BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Bridge.Contract.contract.Transact(opts, method, params...) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "activeOutbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) ActiveOutbox() (common.Address, error) { + return _ERC20Bridge.Contract.ActiveOutbox(&_ERC20Bridge.CallOpts) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _ERC20Bridge.Contract.ActiveOutbox(&_ERC20Bridge.CallOpts) +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) AllowedDelayedInboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "allowedDelayedInboxList", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _ERC20Bridge.Contract.AllowedDelayedInboxList(&_ERC20Bridge.CallOpts, arg0) +} + +// AllowedDelayedInboxList is a free data retrieval call binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) AllowedDelayedInboxList(arg0 *big.Int) (common.Address, error) { + return _ERC20Bridge.Contract.AllowedDelayedInboxList(&_ERC20Bridge.CallOpts, arg0) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _ERC20Bridge.Contract.AllowedDelayedInboxes(&_ERC20Bridge.CallOpts, inbox) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _ERC20Bridge.Contract.AllowedDelayedInboxes(&_ERC20Bridge.CallOpts, inbox) +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) AllowedOutboxList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "allowedOutboxList", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _ERC20Bridge.Contract.AllowedOutboxList(&_ERC20Bridge.CallOpts, arg0) +} + +// AllowedOutboxList is a free data retrieval call binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) AllowedOutboxList(arg0 *big.Int) (common.Address, error) { + return _ERC20Bridge.Contract.AllowedOutboxList(&_ERC20Bridge.CallOpts, arg0) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _ERC20Bridge.Contract.AllowedOutboxes(&_ERC20Bridge.CallOpts, outbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_ERC20Bridge *ERC20BridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _ERC20Bridge.Contract.AllowedOutboxes(&_ERC20Bridge.CallOpts, outbox) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _ERC20Bridge.Contract.DelayedInboxAccs(&_ERC20Bridge.CallOpts, arg0) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _ERC20Bridge.Contract.DelayedInboxAccs(&_ERC20Bridge.CallOpts, arg0) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "delayedMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeSession) DelayedMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.DelayedMessageCount(&_ERC20Bridge.CallOpts) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.DelayedMessageCount(&_ERC20Bridge.CallOpts) +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) NativeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "nativeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) NativeToken() (common.Address, error) { + return _ERC20Bridge.Contract.NativeToken(&_ERC20Bridge.CallOpts) +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) NativeToken() (common.Address, error) { + return _ERC20Bridge.Contract.NativeToken(&_ERC20Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) Rollup() (common.Address, error) { + return _ERC20Bridge.Contract.Rollup(&_ERC20Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) Rollup() (common.Address, error) { + return _ERC20Bridge.Contract.Rollup(&_ERC20Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeSession) SequencerInbox() (common.Address, error) { + return _ERC20Bridge.Contract.SequencerInbox(&_ERC20Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Bridge *ERC20BridgeCallerSession) SequencerInbox() (common.Address, error) { + return _ERC20Bridge.Contract.SequencerInbox(&_ERC20Bridge.CallOpts) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _ERC20Bridge.Contract.SequencerInboxAccs(&_ERC20Bridge.CallOpts, arg0) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_ERC20Bridge *ERC20BridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _ERC20Bridge.Contract.SequencerInboxAccs(&_ERC20Bridge.CallOpts, arg0) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "sequencerMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeSession) SequencerMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.SequencerMessageCount(&_ERC20Bridge.CallOpts) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.SequencerMessageCount(&_ERC20Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Bridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.SequencerReportedSubMessageCount(&_ERC20Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_ERC20Bridge *ERC20BridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _ERC20Bridge.Contract.SequencerReportedSubMessageCount(&_ERC20Bridge.CallOpts) +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_ERC20Bridge *ERC20BridgeTransactor) AcceptFundsFromOldBridge(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "acceptFundsFromOldBridge") +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_ERC20Bridge *ERC20BridgeSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _ERC20Bridge.Contract.AcceptFundsFromOldBridge(&_ERC20Bridge.TransactOpts) +} + +// AcceptFundsFromOldBridge is a paid mutator transaction binding the contract method 0xe77145f4. +// +// Solidity: function acceptFundsFromOldBridge() payable returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) AcceptFundsFromOldBridge() (*types.Transaction, error) { + return _ERC20Bridge.Contract.AcceptFundsFromOldBridge(&_ERC20Bridge.TransactOpts) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_ERC20Bridge *ERC20BridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_ERC20Bridge *ERC20BridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.EnqueueDelayedMessage(&_ERC20Bridge.TransactOpts, kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_ERC20Bridge *ERC20BridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.EnqueueDelayedMessage(&_ERC20Bridge.TransactOpts, kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_ERC20Bridge *ERC20BridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_ERC20Bridge *ERC20BridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.EnqueueSequencerMessage(&_ERC20Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_ERC20Bridge *ERC20BridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.EnqueueSequencerMessage(&_ERC20Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_ERC20Bridge *ERC20BridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "executeCall", to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_ERC20Bridge *ERC20BridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Bridge.Contract.ExecuteCall(&_ERC20Bridge.TransactOpts, to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_ERC20Bridge *ERC20BridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Bridge.Contract.ExecuteCall(&_ERC20Bridge.TransactOpts, to, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "initialize", rollup_, nativeToken_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_ERC20Bridge *ERC20BridgeSession) Initialize(rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.Initialize(&_ERC20Bridge.TransactOpts, rollup_, nativeToken_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) Initialize(rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.Initialize(&_ERC20Bridge.TransactOpts, rollup_, nativeToken_) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetDelayedInbox(&_ERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetDelayedInbox(&_ERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) SetOutbox(opts *bind.TransactOpts, outbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "setOutbox", outbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetOutbox(&_ERC20Bridge.TransactOpts, outbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address outbox, bool enabled) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) SetOutbox(outbox common.Address, enabled bool) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetOutbox(&_ERC20Bridge.TransactOpts, outbox, enabled) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_ERC20Bridge *ERC20BridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetSequencerInbox(&_ERC20Bridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetSequencerInbox(&_ERC20Bridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) SetSequencerReportedSubMessageCount(opts *bind.TransactOpts, newMsgCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "setSequencerReportedSubMessageCount", newMsgCount) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_ERC20Bridge *ERC20BridgeSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetSequencerReportedSubMessageCount(&_ERC20Bridge.TransactOpts, newMsgCount) +} + +// SetSequencerReportedSubMessageCount is a paid mutator transaction binding the contract method 0xf81ff3b3. +// +// Solidity: function setSequencerReportedSubMessageCount(uint256 newMsgCount) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) SetSequencerReportedSubMessageCount(newMsgCount *big.Int) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SetSequencerReportedSubMessageCount(&_ERC20Bridge.TransactOpts, newMsgCount) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_ERC20Bridge *ERC20BridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "submitBatchSpendingReport", sender, messageDataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_ERC20Bridge *ERC20BridgeSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SubmitBatchSpendingReport(&_ERC20Bridge.TransactOpts, sender, messageDataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address sender, bytes32 messageDataHash) returns(uint256) +func (_ERC20Bridge *ERC20BridgeTransactorSession) SubmitBatchSpendingReport(sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _ERC20Bridge.Contract.SubmitBatchSpendingReport(&_ERC20Bridge.TransactOpts, sender, messageDataHash) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_ERC20Bridge *ERC20BridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _ERC20Bridge.contract.Transact(opts, "updateRollupAddress", _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_ERC20Bridge *ERC20BridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.UpdateRollupAddress(&_ERC20Bridge.TransactOpts, _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_ERC20Bridge *ERC20BridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _ERC20Bridge.Contract.UpdateRollupAddress(&_ERC20Bridge.TransactOpts, _rollup) +} + +// ERC20BridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the ERC20Bridge contract. +type ERC20BridgeBridgeCallTriggeredIterator struct { + Event *ERC20BridgeBridgeCallTriggered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeBridgeCallTriggeredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeBridgeCallTriggeredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeBridgeCallTriggeredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the ERC20Bridge contract. +type ERC20BridgeBridgeCallTriggered struct { + Outbox common.Address + To common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*ERC20BridgeBridgeCallTriggeredIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return &ERC20BridgeBridgeCallTriggeredIterator{contract: _ERC20Bridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil +} + +// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *ERC20BridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeBridgeCallTriggered) + if err := _ERC20Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*ERC20BridgeBridgeCallTriggered, error) { + event := new(ERC20BridgeBridgeCallTriggered) + if err := _ERC20Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the ERC20Bridge contract. +type ERC20BridgeInboxToggleIterator struct { + Event *ERC20BridgeInboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeInboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeInboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeInboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeInboxToggle represents a InboxToggle event raised by the ERC20Bridge contract. +type ERC20BridgeInboxToggle struct { + Inbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*ERC20BridgeInboxToggleIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return &ERC20BridgeInboxToggleIterator{contract: _ERC20Bridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil +} + +// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *ERC20BridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeInboxToggle) + if err := _ERC20Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseInboxToggle(log types.Log) (*ERC20BridgeInboxToggle, error) { + event := new(ERC20BridgeInboxToggle) + if err := _ERC20Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20Bridge contract. +type ERC20BridgeInitializedIterator struct { + Event *ERC20BridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeInitialized represents a Initialized event raised by the ERC20Bridge contract. +type ERC20BridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20BridgeInitializedIterator, error) { + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20BridgeInitializedIterator{contract: _ERC20Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20BridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeInitialized) + if err := _ERC20Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseInitialized(log types.Log) (*ERC20BridgeInitialized, error) { + event := new(ERC20BridgeInitialized) + if err := _ERC20Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the ERC20Bridge contract. +type ERC20BridgeMessageDeliveredIterator struct { + Event *ERC20BridgeMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeMessageDelivered represents a MessageDelivered event raised by the ERC20Bridge contract. +type ERC20BridgeMessageDelivered struct { + MessageIndex *big.Int + BeforeInboxAcc [32]byte + Inbox common.Address + Kind uint8 + Sender common.Address + MessageDataHash [32]byte + BaseFeeL1 *big.Int + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*ERC20BridgeMessageDeliveredIterator, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return &ERC20BridgeMessageDeliveredIterator{contract: _ERC20Bridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *ERC20BridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeMessageDelivered) + if err := _ERC20Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseMessageDelivered(log types.Log) (*ERC20BridgeMessageDelivered, error) { + event := new(ERC20BridgeMessageDelivered) + if err := _ERC20Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the ERC20Bridge contract. +type ERC20BridgeOutboxToggleIterator struct { + Event *ERC20BridgeOutboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeOutboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeOutboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeOutboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeOutboxToggle represents a OutboxToggle event raised by the ERC20Bridge contract. +type ERC20BridgeOutboxToggle struct { + Outbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*ERC20BridgeOutboxToggleIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return &ERC20BridgeOutboxToggleIterator{contract: _ERC20Bridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil +} + +// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *ERC20BridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeOutboxToggle) + if err := _ERC20Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseOutboxToggle(log types.Log) (*ERC20BridgeOutboxToggle, error) { + event := new(ERC20BridgeOutboxToggle) + if err := _ERC20Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the ERC20Bridge contract. +type ERC20BridgeRollupUpdatedIterator struct { + Event *ERC20BridgeRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeRollupUpdated represents a RollupUpdated event raised by the ERC20Bridge contract. +type ERC20BridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*ERC20BridgeRollupUpdatedIterator, error) { + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &ERC20BridgeRollupUpdatedIterator{contract: _ERC20Bridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *ERC20BridgeRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeRollupUpdated) + if err := _ERC20Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseRollupUpdated(log types.Log) (*ERC20BridgeRollupUpdated, error) { + event := new(ERC20BridgeRollupUpdated) + if err := _ERC20Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20BridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the ERC20Bridge contract. +type ERC20BridgeSequencerInboxUpdatedIterator struct { + Event *ERC20BridgeSequencerInboxUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20BridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20BridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20BridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20BridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the ERC20Bridge contract. +type ERC20BridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_ERC20Bridge *ERC20BridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*ERC20BridgeSequencerInboxUpdatedIterator, error) { + + logs, sub, err := _ERC20Bridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return &ERC20BridgeSequencerInboxUpdatedIterator{contract: _ERC20Bridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil +} + +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_ERC20Bridge *ERC20BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *ERC20BridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _ERC20Bridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20BridgeSequencerInboxUpdated) + if err := _ERC20Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_ERC20Bridge *ERC20BridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*ERC20BridgeSequencerInboxUpdated, error) { + event := new(ERC20BridgeSequencerInboxUpdated) + if err := _ERC20Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxMetaData contains all meta data concerning the ERC20Inbox contract. +var ERC20InboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDataSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientSubmissionCost\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1Forked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"}],\"name\":\"NotAllowedOrigin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RetryableData\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"AllowListAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"AllowListEnabledUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenTotalFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenTotalFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60e0604052306080524660c05234801561001857600080fd5b50604051620026633803806200266383398101604081905261003991610041565b60a05261005a565b60006020828403121561005357600080fd5b5051919050565b60805160a05160c0516125b6620000ad600039600081816103a80152610ca8015260008181610305015281816104390152818161048e0152818161169401526116ed0152600061072601526125b66000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063a66b327d116100cd578063e3de72a511610081578063e8eb1dc311610066578063e8eb1dc314610300578063ee35f32714610327578063efeadb6d1461033a57600080fd5b8063e3de72a5146102da578063e78cea92146102ed57600080fd5b8063b79092fd116100b2578063b79092fd14610291578063b9b9a688146102a4578063babcc539146102b757600080fd5b8063a66b327d14610268578063b75436bb1461027e57600080fd5b8063549e8426116101245780638456cb59116101095780638456cb59146102095780638a631aa6146102115780638b3240a01461022457600080fd5b8063549e8426146101eb5780635c975abb146101fe57600080fd5b80633f4ba83a116101555780633f4ba83a146101bb578063485cc955146101c55780635075788b146101d857600080fd5b80631fe927cf1461017157806322bd5c1c14610197575b600080fd5b61018461017f366004611e2a565b61034d565b6040519081526020015b60405180910390f35b6066546101ab90600160a01b900460ff1681565b604051901515815260200161018e565b6101c3610518565b005b6101c36101d3366004611e81565b61064d565b6101846101e6366004611eba565b61092b565b6101846101f9366004611f37565b6109f8565b60335460ff166101ab565b6101c3610a6c565b61018461021f366004611fe7565b610b9e565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03165b6040516001600160a01b03909116815260200161018e565b61018461027636600461205a565b600092915050565b61018461028c366004611e2a565b610c52565b61018461029f36600461207c565b610d47565b6101846102b2366004611f37565b610e1f565b6101ab6102c5366004612095565b60676020526000908152604090205460ff1681565b6101c36102e836600461219f565b610e84565b606554610250906001600160a01b031681565b6101847f000000000000000000000000000000000000000000000000000000000000000081565b606654610250906001600160a01b031681565b6101c3610348366004612261565b611109565b6000610357611306565b606654600160a01b900460ff16801561038057503260009081526067602052604090205460ff16155b156103a557604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f0000000000000000000000000000000000000000000000000000000000000000146103fe576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214610437576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008211156104ba576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f0000000000000000000000000000000000000000000000000000000000000000602482015260440161039c565b60006104e160033386866040516104d292919061227e565b6040518091039020600061135b565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610586919061228e565b9050336001600160a01b03821614610642576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fc919061228e565b9050336001600160a01b0382161461064057604051630739600760e01b81523360048201526001600160a01b0380841660248301528216604482015260640161039c565b505b61064a61154c565b50565b600054610100900460ff161580801561066d5750600054600160ff909116105b806106875750303b158015610687575060005460ff166001145b6106f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161039c565b6000805460ff19166001179055801561071c576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107ba5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161039c565b6107c4838361159e565b606554604080517fe1758bd800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163e1758bd89160048083019260209291908290030181865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b919061228e565b6065546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291925082169063095ea7b3906044016020604051808303816000875af11580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de91906122ab565b50508015610926576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610935611306565b606654600160a01b900460ff16801561095e57503260009081526067602052604090205460ff16155b1561097e57604051630f51ed7160e41b815232600482015260240161039c565b67ffffffffffffffff8811156109a75760405163107c527b60e01b815260040160405180910390fd5b6109ec60033360008b8b8b8b6001600160a01b03168b8b8b6040516020016109d69897969594939291906122c8565b6040516020818303038152906040526000611690565b98975050505050505050565b6000610a02611306565b606654600160a01b900460ff168015610a2b57503260009081526067602052604090205460ff16155b15610a4b57604051630f51ed7160e41b815232600482015260240161039c565b610a5d8b8b8b8b8b8b8b8b8b8b611771565b9b9a5050505050505050505050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada919061228e565b9050336001600160a01b03821614610b96576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b50919061228e565b9050336001600160a01b03821614610b9457604051630739600760e01b81523360048201526001600160a01b0380841660248301528216604482015260640161039c565b505b61064a611858565b6000610ba8611306565b606654600160a01b900460ff168015610bd157503260009081526067602052604090205460ff16155b15610bf157604051630f51ed7160e41b815232600482015260240161039c565b67ffffffffffffffff871115610c1a5760405163107c527b60e01b815260040160405180910390fd5b610c4760033360018a8a8a6001600160a01b03168a8a8a6040516020016109d6979695949392919061232a565b979650505050505050565b6000610c5c611306565b606654600160a01b900460ff168015610c8557503260009081526067602052604090205460ff16155b15610ca557604051630f51ed7160e41b815232600482015260240161039c565b467f000000000000000000000000000000000000000000000000000000000000000014610cfe576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4060033385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611690915050565b9392505050565b6000610d51611306565b606654600160a01b900460ff168015610d7a57503260009081526067602052604090205460ff16155b15610d9a57604051630f51ed7160e41b815232600482015260240161039c565b33803b151580610daa5750323314155b15610dc8575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b16602082015260348101849052610d4090600c90339060540160405160208183030381529060405286611690565b6000610e29611306565b606654600160a01b900460ff168015610e5257503260009081526067602052604090205460ff16155b15610e7257604051630f51ed7160e41b815232600482015260240161039c565b610a5d8b8b8b8b8b8b8b8b8b8b611895565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef2919061228e565b9050336001600160a01b03821614610fae576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f68919061228e565b9050336001600160a01b03821614610fac57604051630739600760e01b81523360048201526001600160a01b0380841660248301528216604482015260640161039c565b505b8151835114610fff5760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f494e50555400000000000000000000000000000000000000604482015260640161039c565b60005b83518110156111035782818151811061101d5761101d612385565b60200260200101516067600086848151811061103b5761103b612385565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555083818151811061108c5761108c612385565b60200260200101516001600160a01b03167fd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a8483815181106110d0576110d0612385565b60200260200101516040516110e9911515815260200190565b60405180910390a2806110fb816123b1565b915050611002565b50505050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611177919061228e565b9050336001600160a01b03821614611233576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed919061228e565b9050336001600160a01b0382161461123157604051630739600760e01b81523360048201526001600160a01b0380841660248301528216604482015260640161039c565b505b606654600160a01b900460ff161515821515036112925760405162461bcd60e51b815260206004820152600b60248201527f414c52454144595f534554000000000000000000000000000000000000000000604482015260640161039c565b60668054831515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3906112fa90841515815260200190565b60405180910390a15050565b60335460ff16156113595760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161039c565b565b600080606560009054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d5919061228e565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c91906123cb565b90508381101561148b57600061147282866123e4565b90506114896001600160a01b03841633308461198c565b505b6065546001600160a01b03166375d81e258873111100000000000000000000000000000000111189016040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260ff90921660048301526001600160a01b0316602482015260448101889052606481018790526084016020604051808303816000875af1158015611528573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4791906123cb565b611554611a14565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff1661161b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161039c565b606580546001600160a01b038085167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117909155606680547fffffffffffffffffffffff0000000000000000000000000000000000000000001691831691909117905561168c611a66565b5050565b60007f0000000000000000000000000000000000000000000000000000000000000000835111156117195782516040517f4634691b00000000000000000000000000000000000000000000000000000000815260048101919091527f0000000000000000000000000000000000000000000000000000000000000000602482015260440161039c565b600061172e868686805190602001208661135b565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b856040516117609190612447565b60405180910390a295945050505050565b600061177d858761245a565b6117878b8b612471565b6117919190612471565b8410156117f3576117a2858761245a565b6117ac8b8b612471565b6117b69190612471565b6040517f7040b58c00000000000000000000000000000000000000000000000000000000815260048101919091526024810185905260440161039c565b6001600160a01b0388163b1561181d57731111000000000000000000000000000000001111880197505b6001600160a01b0387163b15610e725773111100000000000000000000000000000000111187019650610a5d8b8b8b8b8b8b8b8b8b8b611895565b611860611306565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115813390565b600085600114806118a65750846001145b156118f357338b8b868c8c8c8c8c8b8b6040517f07c266e300000000000000000000000000000000000000000000000000000000815260040161039c9b9a99989796959493929190612484565b67ffffffffffffffff86111561191c5760405163107c527b60e01b815260040160405180910390fd5b600061197c6009338e6001600160a01b03168e898f8f6001600160a01b03168f6001600160a01b03168f8f8e8e90508f8f6040516020016119679b9a9998979695949392919061250a565b60405160208183030381529060405288611690565b9c9b505050505050505050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611103908590611aeb565b60335460ff166113595760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161039c565b600054610100900460ff16611ae35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161039c565b611359611bd0565b6000611b40826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c599092919063ffffffff16565b8051909150156109265780806020019051810190611b5e91906122ab565b6109265760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161039c565b600054610100900460ff16611c4d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161039c565b6033805460ff19169055565b6060611c688484600085611c70565b949350505050565b606082471015611ce85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161039c565b6001600160a01b0385163b611d3f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161039c565b600080866001600160a01b03168587604051611d5b9190612564565b60006040518083038185875af1925050503d8060008114611d98576040519150601f19603f3d011682016040523d82523d6000602084013e611d9d565b606091505b5091509150610c4782828660608315611db7575081610d40565b825115611dc75782518084602001fd5b8160405162461bcd60e51b815260040161039c9190612447565b60008083601f840112611df357600080fd5b50813567ffffffffffffffff811115611e0b57600080fd5b602083019150836020828501011115611e2357600080fd5b9250929050565b60008060208385031215611e3d57600080fd5b823567ffffffffffffffff811115611e5457600080fd5b611e6085828601611de1565b90969095509350505050565b6001600160a01b038116811461064a57600080fd5b60008060408385031215611e9457600080fd5b8235611e9f81611e6c565b91506020830135611eaf81611e6c565b809150509250929050565b600080600080600080600060c0888a031215611ed557600080fd5b8735965060208801359550604088013594506060880135611ef581611e6c565b93506080880135925060a088013567ffffffffffffffff811115611f1857600080fd5b611f248a828b01611de1565b989b979a50959850939692959293505050565b6000806000806000806000806000806101208b8d031215611f5757600080fd5b8a35611f6281611e6c565b995060208b0135985060408b0135975060608b0135611f8081611e6c565b965060808b0135611f9081611e6c565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff811115611fc257600080fd5b611fce8d828e01611de1565b915080935050809150509295989b9194979a5092959850565b60008060008060008060a0878903121561200057600080fd5b8635955060208701359450604087013561201981611e6c565b935060608701359250608087013567ffffffffffffffff81111561203c57600080fd5b61204889828a01611de1565b979a9699509497509295939492505050565b6000806040838503121561206d57600080fd5b50508035926020909101359150565b60006020828403121561208e57600080fd5b5035919050565b6000602082840312156120a757600080fd5b8135610d4081611e6c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156120f1576120f16120b2565b604052919050565b600067ffffffffffffffff821115612113576121136120b2565b5060051b60200190565b801515811461064a57600080fd5b600082601f83011261213c57600080fd5b8135602061215161214c836120f9565b6120c8565b82815260059290921b8401810191818101908684111561217057600080fd5b8286015b848110156121945780356121878161211d565b8352918301918301612174565b509695505050505050565b600080604083850312156121b257600080fd5b823567ffffffffffffffff808211156121ca57600080fd5b818501915085601f8301126121de57600080fd5b813560206121ee61214c836120f9565b82815260059290921b8401810191818101908984111561220d57600080fd5b948201945b8386101561223457853561222581611e6c565b82529482019490820190612212565b9650508601359250508082111561224a57600080fd5b506122578582860161212b565b9150509250929050565b60006020828403121561227357600080fd5b8135610d408161211d565b8183823760009101908152919050565b6000602082840312156122a057600080fd5b8151610d4081611e6c565b6000602082840312156122bd57600080fd5b8151610d408161211d565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b168152876001820152866021820152856041820152846061820152836081820152818360a18301376000910160a101908152979650505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815286600182015285602182015284604182015283606182015281836081830137600091016081019081529695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982036123c4576123c461239b565b5060010190565b6000602082840312156123dd57600080fd5b5051919050565b818103818111156105125761051261239b565b60005b838110156124125781810151838201526020016123fa565b50506000910152565b600081518084526124338160208601602086016123f7565b601f01601f19169290920160200192915050565b602081526000610d40602083018461241b565b80820281158282048414176105125761051261239b565b808201808211156105125761051261239b565b60006101406001600160a01b03808f168452808e1660208501528c60408501528b60608501528a6080850152808a1660a085015280891660c0850152508660e084015285610100840152806101208401528381840152506101608385828501376000838501820152601f909301601f19169091019091019b9a5050505050505050505050565b8b81528a60208201528960408201528860608201528760808201528660a08201528560c08201528460e08201528361010082015260006101208385828501376000929093019092019081529b9a5050505050505050505050565b600082516125768184602087016123f7565b919091019291505056fea2646970667358221220401c3fdff347b90827ac500b1b7dda089b0fab3bf79ae3e00de2c3ab00fe912f64736f6c63430008110033", +} + +// ERC20InboxABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20InboxMetaData.ABI instead. +var ERC20InboxABI = ERC20InboxMetaData.ABI + +// ERC20InboxBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20InboxMetaData.Bin instead. +var ERC20InboxBin = ERC20InboxMetaData.Bin + +// DeployERC20Inbox deploys a new Ethereum contract, binding an instance of ERC20Inbox to it. +func DeployERC20Inbox(auth *bind.TransactOpts, backend bind.ContractBackend, _maxDataSize *big.Int) (common.Address, *types.Transaction, *ERC20Inbox, error) { + parsed, err := ERC20InboxMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20InboxBin), backend, _maxDataSize) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20Inbox{ERC20InboxCaller: ERC20InboxCaller{contract: contract}, ERC20InboxTransactor: ERC20InboxTransactor{contract: contract}, ERC20InboxFilterer: ERC20InboxFilterer{contract: contract}}, nil +} + +// ERC20Inbox is an auto generated Go binding around an Ethereum contract. +type ERC20Inbox struct { + ERC20InboxCaller // Read-only binding to the contract + ERC20InboxTransactor // Write-only binding to the contract + ERC20InboxFilterer // Log filterer for contract events +} + +// ERC20InboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20InboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20InboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20InboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20InboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20InboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20InboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20InboxSession struct { + Contract *ERC20Inbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20InboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20InboxCallerSession struct { + Contract *ERC20InboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20InboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20InboxTransactorSession struct { + Contract *ERC20InboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20InboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20InboxRaw struct { + Contract *ERC20Inbox // Generic contract binding to access the raw methods on +} + +// ERC20InboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20InboxCallerRaw struct { + Contract *ERC20InboxCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20InboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20InboxTransactorRaw struct { + Contract *ERC20InboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20Inbox creates a new instance of ERC20Inbox, bound to a specific deployed contract. +func NewERC20Inbox(address common.Address, backend bind.ContractBackend) (*ERC20Inbox, error) { + contract, err := bindERC20Inbox(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20Inbox{ERC20InboxCaller: ERC20InboxCaller{contract: contract}, ERC20InboxTransactor: ERC20InboxTransactor{contract: contract}, ERC20InboxFilterer: ERC20InboxFilterer{contract: contract}}, nil +} + +// NewERC20InboxCaller creates a new read-only instance of ERC20Inbox, bound to a specific deployed contract. +func NewERC20InboxCaller(address common.Address, caller bind.ContractCaller) (*ERC20InboxCaller, error) { + contract, err := bindERC20Inbox(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20InboxCaller{contract: contract}, nil +} + +// NewERC20InboxTransactor creates a new write-only instance of ERC20Inbox, bound to a specific deployed contract. +func NewERC20InboxTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20InboxTransactor, error) { + contract, err := bindERC20Inbox(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20InboxTransactor{contract: contract}, nil +} + +// NewERC20InboxFilterer creates a new log filterer instance of ERC20Inbox, bound to a specific deployed contract. +func NewERC20InboxFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20InboxFilterer, error) { + contract, err := bindERC20Inbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20InboxFilterer{contract: contract}, nil +} + +// bindERC20Inbox binds a generic wrapper to an already deployed contract. +func bindERC20Inbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20InboxMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Inbox *ERC20InboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Inbox.Contract.ERC20InboxCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Inbox *ERC20InboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Inbox.Contract.ERC20InboxTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Inbox *ERC20InboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Inbox.Contract.ERC20InboxTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Inbox *ERC20InboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Inbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Inbox *ERC20InboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Inbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Inbox *ERC20InboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Inbox.Contract.contract.Transact(opts, method, params...) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_ERC20Inbox *ERC20InboxCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "allowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_ERC20Inbox *ERC20InboxSession) AllowListEnabled() (bool, error) { + return _ERC20Inbox.Contract.AllowListEnabled(&_ERC20Inbox.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_ERC20Inbox *ERC20InboxCallerSession) AllowListEnabled() (bool, error) { + return _ERC20Inbox.Contract.AllowListEnabled(&_ERC20Inbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Inbox *ERC20InboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Inbox *ERC20InboxSession) Bridge() (common.Address, error) { + return _ERC20Inbox.Contract.Bridge(&_ERC20Inbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Inbox *ERC20InboxCallerSession) Bridge() (common.Address, error) { + return _ERC20Inbox.Contract.Bridge(&_ERC20Inbox.CallOpts) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 , uint256 ) pure returns(uint256) +func (_ERC20Inbox *ERC20InboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 , uint256 ) pure returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) CalculateRetryableSubmissionFee(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + return _ERC20Inbox.Contract.CalculateRetryableSubmissionFee(&_ERC20Inbox.CallOpts, arg0, arg1) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 , uint256 ) pure returns(uint256) +func (_ERC20Inbox *ERC20InboxCallerSession) CalculateRetryableSubmissionFee(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + return _ERC20Inbox.Contract.CalculateRetryableSubmissionFee(&_ERC20Inbox.CallOpts, arg0, arg1) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_ERC20Inbox *ERC20InboxCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "getProxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_ERC20Inbox *ERC20InboxSession) GetProxyAdmin() (common.Address, error) { + return _ERC20Inbox.Contract.GetProxyAdmin(&_ERC20Inbox.CallOpts) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_ERC20Inbox *ERC20InboxCallerSession) GetProxyAdmin() (common.Address, error) { + return _ERC20Inbox.Contract.GetProxyAdmin(&_ERC20Inbox.CallOpts) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) view returns(bool) +func (_ERC20Inbox *ERC20InboxCaller) IsAllowed(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "isAllowed", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) view returns(bool) +func (_ERC20Inbox *ERC20InboxSession) IsAllowed(arg0 common.Address) (bool, error) { + return _ERC20Inbox.Contract.IsAllowed(&_ERC20Inbox.CallOpts, arg0) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) view returns(bool) +func (_ERC20Inbox *ERC20InboxCallerSession) IsAllowed(arg0 common.Address) (bool, error) { + return _ERC20Inbox.Contract.IsAllowed(&_ERC20Inbox.CallOpts, arg0) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_ERC20Inbox *ERC20InboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "maxDataSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) MaxDataSize() (*big.Int, error) { + return _ERC20Inbox.Contract.MaxDataSize(&_ERC20Inbox.CallOpts) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_ERC20Inbox *ERC20InboxCallerSession) MaxDataSize() (*big.Int, error) { + return _ERC20Inbox.Contract.MaxDataSize(&_ERC20Inbox.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ERC20Inbox *ERC20InboxCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ERC20Inbox *ERC20InboxSession) Paused() (bool, error) { + return _ERC20Inbox.Contract.Paused(&_ERC20Inbox.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ERC20Inbox *ERC20InboxCallerSession) Paused() (bool, error) { + return _ERC20Inbox.Contract.Paused(&_ERC20Inbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Inbox *ERC20InboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Inbox.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Inbox *ERC20InboxSession) SequencerInbox() (common.Address, error) { + return _ERC20Inbox.Contract.SequencerInbox(&_ERC20Inbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_ERC20Inbox *ERC20InboxCallerSession) SequencerInbox() (common.Address, error) { + return _ERC20Inbox.Contract.SequencerInbox(&_ERC20Inbox.CallOpts) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) CreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "createRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.CreateRetryableTicket(&_ERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.CreateRetryableTicket(&_ERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) DepositERC20(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "depositERC20", amount) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) DepositERC20(amount *big.Int) (*types.Transaction, error) { + return _ERC20Inbox.Contract.DepositERC20(&_ERC20Inbox.TransactOpts, amount) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) DepositERC20(amount *big.Int) (*types.Transaction, error) { + return _ERC20Inbox.Contract.DepositERC20(&_ERC20Inbox.TransactOpts, amount) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_ERC20Inbox *ERC20InboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_ERC20Inbox *ERC20InboxSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Inbox.Contract.Initialize(&_ERC20Inbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_ERC20Inbox *ERC20InboxTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _ERC20Inbox.Contract.Initialize(&_ERC20Inbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20Inbox *ERC20InboxTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20Inbox *ERC20InboxSession) Pause() (*types.Transaction, error) { + return _ERC20Inbox.Contract.Pause(&_ERC20Inbox.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ERC20Inbox *ERC20InboxTransactorSession) Pause() (*types.Transaction, error) { + return _ERC20Inbox.Contract.Pause(&_ERC20Inbox.TransactOpts) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendContractTransaction(&_ERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendContractTransaction(&_ERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "sendL2Message", messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendL2Message(&_ERC20Inbox.TransactOpts, messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendL2Message(&_ERC20Inbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendL2MessageFromOrigin(&_ERC20Inbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendL2MessageFromOrigin(&_ERC20Inbox.TransactOpts, messageData) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendUnsignedTransaction(&_ERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SendUnsignedTransaction(&_ERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_ERC20Inbox *ERC20InboxTransactor) SetAllowList(opts *bind.TransactOpts, user []common.Address, val []bool) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "setAllowList", user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_ERC20Inbox *ERC20InboxSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SetAllowList(&_ERC20Inbox.TransactOpts, user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_ERC20Inbox *ERC20InboxTransactorSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SetAllowList(&_ERC20Inbox.TransactOpts, user, val) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_ERC20Inbox *ERC20InboxTransactor) SetAllowListEnabled(opts *bind.TransactOpts, _allowListEnabled bool) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "setAllowListEnabled", _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_ERC20Inbox *ERC20InboxSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SetAllowListEnabled(&_ERC20Inbox.TransactOpts, _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_ERC20Inbox *ERC20InboxTransactorSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _ERC20Inbox.Contract.SetAllowListEnabled(&_ERC20Inbox.TransactOpts, _allowListEnabled) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20Inbox *ERC20InboxTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20Inbox *ERC20InboxSession) Unpause() (*types.Transaction, error) { + return _ERC20Inbox.Contract.Unpause(&_ERC20Inbox.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ERC20Inbox *ERC20InboxTransactorSession) Unpause() (*types.Transaction, error) { + return _ERC20Inbox.Contract.Unpause(&_ERC20Inbox.TransactOpts) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactor) UnsafeCreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.contract.Transact(opts, "unsafeCreateRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.UnsafeCreateRetryableTicket(&_ERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_ERC20Inbox *ERC20InboxTransactorSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Inbox.Contract.UnsafeCreateRetryableTicket(&_ERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// ERC20InboxAllowListAddressSetIterator is returned from FilterAllowListAddressSet and is used to iterate over the raw logs and unpacked data for AllowListAddressSet events raised by the ERC20Inbox contract. +type ERC20InboxAllowListAddressSetIterator struct { + Event *ERC20InboxAllowListAddressSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxAllowListAddressSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxAllowListAddressSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxAllowListAddressSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxAllowListAddressSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxAllowListAddressSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxAllowListAddressSet represents a AllowListAddressSet event raised by the ERC20Inbox contract. +type ERC20InboxAllowListAddressSet struct { + User common.Address + Val bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAllowListAddressSet is a free log retrieval operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. +// +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_ERC20Inbox *ERC20InboxFilterer) FilterAllowListAddressSet(opts *bind.FilterOpts, user []common.Address) (*ERC20InboxAllowListAddressSetIterator, error) { + + var userRule []interface{} + for _, userItem := range user { + userRule = append(userRule, userItem) + } + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "AllowListAddressSet", userRule) + if err != nil { + return nil, err + } + return &ERC20InboxAllowListAddressSetIterator{contract: _ERC20Inbox.contract, event: "AllowListAddressSet", logs: logs, sub: sub}, nil +} + +// WatchAllowListAddressSet is a free log subscription operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. +// +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_ERC20Inbox *ERC20InboxFilterer) WatchAllowListAddressSet(opts *bind.WatchOpts, sink chan<- *ERC20InboxAllowListAddressSet, user []common.Address) (event.Subscription, error) { + + var userRule []interface{} + for _, userItem := range user { + userRule = append(userRule, userItem) + } + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "AllowListAddressSet", userRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxAllowListAddressSet) + if err := _ERC20Inbox.contract.UnpackLog(event, "AllowListAddressSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAllowListAddressSet is a log parse operation binding the contract event 0xd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a. +// +// Solidity: event AllowListAddressSet(address indexed user, bool val) +func (_ERC20Inbox *ERC20InboxFilterer) ParseAllowListAddressSet(log types.Log) (*ERC20InboxAllowListAddressSet, error) { + event := new(ERC20InboxAllowListAddressSet) + if err := _ERC20Inbox.contract.UnpackLog(event, "AllowListAddressSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxAllowListEnabledUpdatedIterator is returned from FilterAllowListEnabledUpdated and is used to iterate over the raw logs and unpacked data for AllowListEnabledUpdated events raised by the ERC20Inbox contract. +type ERC20InboxAllowListEnabledUpdatedIterator struct { + Event *ERC20InboxAllowListEnabledUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxAllowListEnabledUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxAllowListEnabledUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxAllowListEnabledUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxAllowListEnabledUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxAllowListEnabledUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxAllowListEnabledUpdated represents a AllowListEnabledUpdated event raised by the ERC20Inbox contract. +type ERC20InboxAllowListEnabledUpdated struct { + IsEnabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAllowListEnabledUpdated is a free log retrieval operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. +// +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_ERC20Inbox *ERC20InboxFilterer) FilterAllowListEnabledUpdated(opts *bind.FilterOpts) (*ERC20InboxAllowListEnabledUpdatedIterator, error) { + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "AllowListEnabledUpdated") + if err != nil { + return nil, err + } + return &ERC20InboxAllowListEnabledUpdatedIterator{contract: _ERC20Inbox.contract, event: "AllowListEnabledUpdated", logs: logs, sub: sub}, nil +} + +// WatchAllowListEnabledUpdated is a free log subscription operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. +// +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_ERC20Inbox *ERC20InboxFilterer) WatchAllowListEnabledUpdated(opts *bind.WatchOpts, sink chan<- *ERC20InboxAllowListEnabledUpdated) (event.Subscription, error) { + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "AllowListEnabledUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxAllowListEnabledUpdated) + if err := _ERC20Inbox.contract.UnpackLog(event, "AllowListEnabledUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAllowListEnabledUpdated is a log parse operation binding the contract event 0x16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb3. +// +// Solidity: event AllowListEnabledUpdated(bool isEnabled) +func (_ERC20Inbox *ERC20InboxFilterer) ParseAllowListEnabledUpdated(log types.Log) (*ERC20InboxAllowListEnabledUpdated, error) { + event := new(ERC20InboxAllowListEnabledUpdated) + if err := _ERC20Inbox.contract.UnpackLog(event, "AllowListEnabledUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the ERC20Inbox contract. +type ERC20InboxInboxMessageDeliveredIterator struct { + Event *ERC20InboxInboxMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxInboxMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxInboxMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxInboxMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the ERC20Inbox contract. +type ERC20InboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20Inbox *ERC20InboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*ERC20InboxInboxMessageDeliveredIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return &ERC20InboxInboxMessageDeliveredIterator{contract: _ERC20Inbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20Inbox *ERC20InboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *ERC20InboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxInboxMessageDelivered) + if err := _ERC20Inbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20Inbox *ERC20InboxFilterer) ParseInboxMessageDelivered(log types.Log) (*ERC20InboxInboxMessageDelivered, error) { + event := new(ERC20InboxInboxMessageDelivered) + if err := _ERC20Inbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the ERC20Inbox contract. +type ERC20InboxInboxMessageDeliveredFromOriginIterator struct { + Event *ERC20InboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the ERC20Inbox contract. +type ERC20InboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20Inbox *ERC20InboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*ERC20InboxInboxMessageDeliveredFromOriginIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return &ERC20InboxInboxMessageDeliveredFromOriginIterator{contract: _ERC20Inbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20Inbox *ERC20InboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *ERC20InboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxInboxMessageDeliveredFromOrigin) + if err := _ERC20Inbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20Inbox *ERC20InboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*ERC20InboxInboxMessageDeliveredFromOrigin, error) { + event := new(ERC20InboxInboxMessageDeliveredFromOrigin) + if err := _ERC20Inbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ERC20Inbox contract. +type ERC20InboxInitializedIterator struct { + Event *ERC20InboxInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxInitialized represents a Initialized event raised by the ERC20Inbox contract. +type ERC20InboxInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Inbox *ERC20InboxFilterer) FilterInitialized(opts *bind.FilterOpts) (*ERC20InboxInitializedIterator, error) { + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ERC20InboxInitializedIterator{contract: _ERC20Inbox.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Inbox *ERC20InboxFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ERC20InboxInitialized) (event.Subscription, error) { + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxInitialized) + if err := _ERC20Inbox.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ERC20Inbox *ERC20InboxFilterer) ParseInitialized(log types.Log) (*ERC20InboxInitialized, error) { + event := new(ERC20InboxInitialized) + if err := _ERC20Inbox.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ERC20Inbox contract. +type ERC20InboxPausedIterator struct { + Event *ERC20InboxPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxPaused represents a Paused event raised by the ERC20Inbox contract. +type ERC20InboxPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) FilterPaused(opts *bind.FilterOpts) (*ERC20InboxPausedIterator, error) { + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &ERC20InboxPausedIterator{contract: _ERC20Inbox.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ERC20InboxPaused) (event.Subscription, error) { + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxPaused) + if err := _ERC20Inbox.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) ParsePaused(log types.Log) (*ERC20InboxPaused, error) { + event := new(ERC20InboxPaused) + if err := _ERC20Inbox.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20InboxUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ERC20Inbox contract. +type ERC20InboxUnpausedIterator struct { + Event *ERC20InboxUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20InboxUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20InboxUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20InboxUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20InboxUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20InboxUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20InboxUnpaused represents a Unpaused event raised by the ERC20Inbox contract. +type ERC20InboxUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ERC20InboxUnpausedIterator, error) { + + logs, sub, err := _ERC20Inbox.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &ERC20InboxUnpausedIterator{contract: _ERC20Inbox.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ERC20InboxUnpaused) (event.Subscription, error) { + + logs, sub, err := _ERC20Inbox.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20InboxUnpaused) + if err := _ERC20Inbox.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_ERC20Inbox *ERC20InboxFilterer) ParseUnpaused(log types.Log) (*ERC20InboxUnpaused, error) { + event := new(ERC20InboxUnpaused) + if err := _ERC20Inbox.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20OutboxMetaData contains all meta data concerning the ERC20Outbox contract. +var ERC20OutboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPostUpgradeInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"NotRollup\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SimulationOnlyEntrypoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1WithdrawalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50608051611a71610037600039600081816107a50152610aa50152611a716000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c806395fcea78116100d8578063c4d66de81161008c578063cbf96f6311610066578063cbf96f63146102cf578063d5b5cc23146102d7578063e78cea92146102f757600080fd5b8063c4d66de814610289578063c75184df1461029c578063cb23bcb5146102bc57600080fd5b8063a04cee60116100bd578063a04cee601461024e578063ae6dead714610261578063b0f305371461028157600080fd5b806395fcea78146102335780639f0c04bf1461023b57600080fd5b80635a129efe1161012f57806372f2a8c71161011457806372f2a8c71461020357806380648b021461020b5780638515bc6a1461022b57600080fd5b80635a129efe146101d85780636ae71f12146101fb57600080fd5b8063119852711161016057806311985271146101b6578063288e5b10146101bd57806346547790146101d057600080fd5b80627436d31461017b57806308635a95146101a1575b600080fd5b61018e61018936600461139a565b61030a565b6040519081526020015b60405180910390f35b6101b46101af3660046114bc565b610347565b005b600061018e565b6101b46101cb3660046115b1565b6103ba565b61018e61040e565b6101eb6101e636600461164d565b61045a565b6040519015158152602001610198565b6101b4610477565b61018e6106d4565b6102136106ef565b6040516001600160a01b039091168152602001610198565b61018e61072d565b6101b461079b565b61018e610249366004611666565b61096c565b6101b461025c3660046116f5565b6109b1565b61018e61026f36600461164d565b60036020526000908152604090205481565b61018e610a49565b6101b4610297366004611717565b610a9b565b6102a4600281565b6040516001600160801b039091168152602001610198565b600054610213906001600160a01b031681565b61018e610d01565b61018e6102e536600461164d565b60026020526000908152604090205481565b600154610213906001600160a01b031681565b600061033f84848460405160200161032491815260200190565b60405160208183030381529060405280519060200120610d17565b949350505050565b6000610359898989898989898961096c565b905061039b8c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610dd29050565b6103ac8a8a8a8a8a8a8a8a8a610f3f565b505050505050505050505050565b33156103f2576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610403898989898989898989610f3f565b505050505050505050565b6004546000906001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161044c57600091505090565b6001600160801b0316919050565b60008060006104688461121c565b925092505061033f8282611259565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec919061173b565b6001600160a01b0316336001600160a01b0316146105d457600054604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a919061173b565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065b919061173b565b6000549091506001600160a01b038083169116036106a5576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600554600090600181016106ea57506000919050565b919050565b6006546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000181016106ea57600091505090565b6006546000907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff000000000000000000000001810161078857600091505090565b6bffffffffffffffffffffffff16919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105cb565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146108c9576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016105cb565b6004546001600160801b039081161461090e576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526bffffffffffffffffffffffff608082015260a001819052600481905560058190556006819055600755565b6000888888888888888860405160200161098d989796959493929190611758565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b03163314610a0a576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016105cb565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b60045460009070010000000000000000000000000000000090046001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161044c57600091505090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105cb565b6001600160a01b038116610b93576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b031615610bd6576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526bffffffffffffffffffffffff608085015260a09093018190526004818155600582905560068290556007919091556001805473ffffffffffffffffffffffffffffffffffffffff1916938616938417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb593818301939290918290030181865afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061173b565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b600754600090600181016106ea57600091505090565b8251600090610100811115610d63576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016105cb565b8260005b82811015610dc8576000878281518110610d8357610d836117c4565b60200260200101519050816001901b8716600003610daf57826000528060205260406000209250610dbf565b8060005282602052604060002092505b50600101610d67565b5095945050505050565b610100835110610e135782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016105cb91815260200190565b8251610e209060026118d4565b8210610e70578183516002610e3591906118d4565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105cb565b6000610e7d84848461030a565b600081815260036020526040902054909150610ec8576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016105cb565b6000806000610ed68661121c565b925092509250610ee68282611259565b15610f20576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016105cb565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610f8691815260200190565b60405180910390a4600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160038201548152505090506040518060c00160405280886001600160801b03168152602001866001600160801b031681526020018b60001b81526020018a6001600160a01b03168152602001876bffffffffffffffffffffffff1681526020016110da8690565b905280516020808301516001600160801b0390811670010000000000000000000000000000000002921691909117600455604080830151600555606083015160808401516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0909201516007558151601f8501829004820281018201909252838252611199918a91879190879087908190840183828082843760009201919091525061126892505050565b805160208201516001600160801b03908116700100000000000000000000000000000000029116176004556040810151600555606081015160808201516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a00151600755505050505050505050565b600080808061122c60ff866118f6565b9050600061123b60ff8761190a565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c49906112ba90889088908890600401611942565b6000604051808303816000875af11580156112d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611301919081019061198c565b915091508161134c5780511561131a5780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561139257611392611353565b604052919050565b6000806000606084860312156113af57600080fd5b833567ffffffffffffffff808211156113c757600080fd5b818601915086601f8301126113db57600080fd5b81356020828211156113ef576113ef611353565b8160051b9250611400818401611369565b828152928401810192818101908a85111561141a57600080fd5b948201945b848610156114385785358252948201949082019061141f565b9a918901359950506040909701359695505050505050565b6001600160a01b038116811461146557600080fd5b50565b80356106ea81611450565b60008083601f84011261148557600080fd5b50813567ffffffffffffffff81111561149d57600080fd5b6020830191508360208285010111156114b557600080fd5b9250929050565b60008060008060008060008060008060006101208c8e0312156114de57600080fd5b8b3567ffffffffffffffff808211156114f657600080fd5b818e0191508e601f83011261150a57600080fd5b81358181111561151957600080fd5b8f60208260051b850101111561152e57600080fd5b60208381019e50909c508e01359a5061154960408f01611468565b995061155760608f01611468565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561158a57600080fd5b506115978e828f01611473565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c0312156115d057600080fd5b8935985060208a01356115e281611450565b975060408a01356115f281611450565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561162a57600080fd5b6116368c828d01611473565b915080935050809150509295985092959850929598565b60006020828403121561165f57600080fd5b5035919050565b60008060008060008060008060e0898b03121561168257600080fd5b883561168d81611450565b9750602089013561169d81611450565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff8111156116d557600080fd5b6116e18b828c01611473565b999c989b5096995094979396929594505050565b6000806040838503121561170857600080fd5b50508035926020909101359150565b60006020828403121561172957600080fd5b813561173481611450565b9392505050565b60006020828403121561174d57600080fd5b815161173481611450565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561182b578160001904821115611811576118116117da565b8085161561181e57918102915b93841c93908002906117f5565b509250929050565b60008261184257506001611262565b8161184f57506000611262565b8160018114611865576002811461186f5761188b565b6001915050611262565b60ff841115611880576118806117da565b50506001821b611262565b5060208310610133831016604e8410600b84101617156118ae575081810a611262565b6118b883836117f0565b80600019048211156118cc576118cc6117da565b029392505050565b60006117348383611833565b634e487b7160e01b600052601260045260246000fd5b600082611905576119056118e0565b500490565b600082611919576119196118e0565b500690565b60005b83811015611939578181015183820152602001611921565b50506000910152565b6001600160a01b0384168152826020820152606060408201526000825180606084015261197681608085016020870161191e565b601f01601f191691909101608001949350505050565b6000806040838503121561199f57600080fd5b825180151581146119af57600080fd5b602084015190925067ffffffffffffffff808211156119cd57600080fd5b818501915085601f8301126119e157600080fd5b8151818111156119f3576119f3611353565b611a066020601f19601f84011601611369565b9150808252866020828501011115611a1d57600080fd5b611a2e81602084016020860161191e565b508092505050925092905056fea26469706673582212207173dec6b1cd776de85c9a00b2dbba76acfe9f8a8c9ccaf366ff4d4ff33ac85764736f6c63430008110033", +} + +// ERC20OutboxABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20OutboxMetaData.ABI instead. +var ERC20OutboxABI = ERC20OutboxMetaData.ABI + +// ERC20OutboxBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20OutboxMetaData.Bin instead. +var ERC20OutboxBin = ERC20OutboxMetaData.Bin + +// DeployERC20Outbox deploys a new Ethereum contract, binding an instance of ERC20Outbox to it. +func DeployERC20Outbox(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20Outbox, error) { + parsed, err := ERC20OutboxMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20OutboxBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20Outbox{ERC20OutboxCaller: ERC20OutboxCaller{contract: contract}, ERC20OutboxTransactor: ERC20OutboxTransactor{contract: contract}, ERC20OutboxFilterer: ERC20OutboxFilterer{contract: contract}}, nil +} + +// ERC20Outbox is an auto generated Go binding around an Ethereum contract. +type ERC20Outbox struct { + ERC20OutboxCaller // Read-only binding to the contract + ERC20OutboxTransactor // Write-only binding to the contract + ERC20OutboxFilterer // Log filterer for contract events +} + +// ERC20OutboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20OutboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20OutboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20OutboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20OutboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20OutboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20OutboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20OutboxSession struct { + Contract *ERC20Outbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20OutboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20OutboxCallerSession struct { + Contract *ERC20OutboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20OutboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20OutboxTransactorSession struct { + Contract *ERC20OutboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20OutboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20OutboxRaw struct { + Contract *ERC20Outbox // Generic contract binding to access the raw methods on +} + +// ERC20OutboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20OutboxCallerRaw struct { + Contract *ERC20OutboxCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20OutboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20OutboxTransactorRaw struct { + Contract *ERC20OutboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20Outbox creates a new instance of ERC20Outbox, bound to a specific deployed contract. +func NewERC20Outbox(address common.Address, backend bind.ContractBackend) (*ERC20Outbox, error) { + contract, err := bindERC20Outbox(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20Outbox{ERC20OutboxCaller: ERC20OutboxCaller{contract: contract}, ERC20OutboxTransactor: ERC20OutboxTransactor{contract: contract}, ERC20OutboxFilterer: ERC20OutboxFilterer{contract: contract}}, nil +} + +// NewERC20OutboxCaller creates a new read-only instance of ERC20Outbox, bound to a specific deployed contract. +func NewERC20OutboxCaller(address common.Address, caller bind.ContractCaller) (*ERC20OutboxCaller, error) { + contract, err := bindERC20Outbox(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20OutboxCaller{contract: contract}, nil +} + +// NewERC20OutboxTransactor creates a new write-only instance of ERC20Outbox, bound to a specific deployed contract. +func NewERC20OutboxTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20OutboxTransactor, error) { + contract, err := bindERC20Outbox(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20OutboxTransactor{contract: contract}, nil +} + +// NewERC20OutboxFilterer creates a new log filterer instance of ERC20Outbox, bound to a specific deployed contract. +func NewERC20OutboxFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20OutboxFilterer, error) { + contract, err := bindERC20Outbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20OutboxFilterer{contract: contract}, nil +} + +// bindERC20Outbox binds a generic wrapper to an already deployed contract. +func bindERC20Outbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20OutboxMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Outbox *ERC20OutboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Outbox.Contract.ERC20OutboxCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Outbox *ERC20OutboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ERC20OutboxTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Outbox *ERC20OutboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ERC20OutboxTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20Outbox *ERC20OutboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20Outbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20Outbox *ERC20OutboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Outbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20Outbox *ERC20OutboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20Outbox.Contract.contract.Transact(opts, method, params...) +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_ERC20Outbox *ERC20OutboxCaller) OUTBOXVERSION(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "OUTBOX_VERSION") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_ERC20Outbox *ERC20OutboxSession) OUTBOXVERSION() (*big.Int, error) { + return _ERC20Outbox.Contract.OUTBOXVERSION(&_ERC20Outbox.CallOpts) +} + +// OUTBOXVERSION is a free data retrieval call binding the contract method 0xc75184df. +// +// Solidity: function OUTBOX_VERSION() view returns(uint128) +func (_ERC20Outbox *ERC20OutboxCallerSession) OUTBOXVERSION() (*big.Int, error) { + return _ERC20Outbox.Contract.OUTBOXVERSION(&_ERC20Outbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Outbox *ERC20OutboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Outbox *ERC20OutboxSession) Bridge() (common.Address, error) { + return _ERC20Outbox.Contract.Bridge(&_ERC20Outbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20Outbox *ERC20OutboxCallerSession) Bridge() (common.Address, error) { + return _ERC20Outbox.Contract.Bridge(&_ERC20Outbox.CallOpts) +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCaller) CalculateItemHash(opts *bind.CallOpts, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "calculateItemHash", l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxSession) CalculateItemHash(l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + return _ERC20Outbox.Contract.CalculateItemHash(&_ERC20Outbox.CallOpts, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// CalculateItemHash is a free data retrieval call binding the contract method 0x9f0c04bf. +// +// Solidity: function calculateItemHash(address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCallerSession) CalculateItemHash(l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) ([32]byte, error) { + return _ERC20Outbox.Contract.CalculateItemHash(&_ERC20Outbox.CallOpts, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCaller) CalculateMerkleRoot(opts *bind.CallOpts, proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "calculateMerkleRoot", proof, path, item) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxSession) CalculateMerkleRoot(proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + return _ERC20Outbox.Contract.CalculateMerkleRoot(&_ERC20Outbox.CallOpts, proof, path, item) +} + +// CalculateMerkleRoot is a free data retrieval call binding the contract method 0x007436d3. +// +// Solidity: function calculateMerkleRoot(bytes32[] proof, uint256 path, bytes32 item) pure returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCallerSession) CalculateMerkleRoot(proof [][32]byte, path *big.Int, item [32]byte) ([32]byte, error) { + return _ERC20Outbox.Contract.CalculateMerkleRoot(&_ERC20Outbox.CallOpts, proof, path, item) +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_ERC20Outbox *ERC20OutboxCaller) IsSpent(opts *bind.CallOpts, index *big.Int) (bool, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "isSpent", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_ERC20Outbox *ERC20OutboxSession) IsSpent(index *big.Int) (bool, error) { + return _ERC20Outbox.Contract.IsSpent(&_ERC20Outbox.CallOpts, index) +} + +// IsSpent is a free data retrieval call binding the contract method 0x5a129efe. +// +// Solidity: function isSpent(uint256 index) view returns(bool) +func (_ERC20Outbox *ERC20OutboxCallerSession) IsSpent(index *big.Int) (bool, error) { + return _ERC20Outbox.Contract.IsSpent(&_ERC20Outbox.CallOpts, index) +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1BatchNum(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1BatchNum") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1BatchNum() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1BatchNum(&_ERC20Outbox.CallOpts) +} + +// L2ToL1BatchNum is a free data retrieval call binding the contract method 0x11985271. +// +// Solidity: function l2ToL1BatchNum() pure returns(uint256) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1BatchNum() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1BatchNum(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1Block(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1Block") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1Block() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1Block(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Block is a free data retrieval call binding the contract method 0x46547790. +// +// Solidity: function l2ToL1Block() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1Block() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1Block(&_ERC20Outbox.CallOpts) +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1EthBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1EthBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1EthBlock() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1EthBlock(&_ERC20Outbox.CallOpts) +} + +// L2ToL1EthBlock is a free data retrieval call binding the contract method 0x8515bc6a. +// +// Solidity: function l2ToL1EthBlock() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1EthBlock() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1EthBlock(&_ERC20Outbox.CallOpts) +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1OutputId(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1OutputId") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1OutputId() ([32]byte, error) { + return _ERC20Outbox.Contract.L2ToL1OutputId(&_ERC20Outbox.CallOpts) +} + +// L2ToL1OutputId is a free data retrieval call binding the contract method 0x72f2a8c7. +// +// Solidity: function l2ToL1OutputId() view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1OutputId() ([32]byte, error) { + return _ERC20Outbox.Contract.L2ToL1OutputId(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1Sender() (common.Address, error) { + return _ERC20Outbox.Contract.L2ToL1Sender(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Sender is a free data retrieval call binding the contract method 0x80648b02. +// +// Solidity: function l2ToL1Sender() view returns(address) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1Sender() (common.Address, error) { + return _ERC20Outbox.Contract.L2ToL1Sender(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1Timestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1Timestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1Timestamp() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1Timestamp(&_ERC20Outbox.CallOpts) +} + +// L2ToL1Timestamp is a free data retrieval call binding the contract method 0xb0f30537. +// +// Solidity: function l2ToL1Timestamp() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1Timestamp() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1Timestamp(&_ERC20Outbox.CallOpts) +} + +// L2ToL1WithdrawalAmount is a free data retrieval call binding the contract method 0xcbf96f63. +// +// Solidity: function l2ToL1WithdrawalAmount() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCaller) L2ToL1WithdrawalAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "l2ToL1WithdrawalAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ToL1WithdrawalAmount is a free data retrieval call binding the contract method 0xcbf96f63. +// +// Solidity: function l2ToL1WithdrawalAmount() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxSession) L2ToL1WithdrawalAmount() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1WithdrawalAmount(&_ERC20Outbox.CallOpts) +} + +// L2ToL1WithdrawalAmount is a free data retrieval call binding the contract method 0xcbf96f63. +// +// Solidity: function l2ToL1WithdrawalAmount() view returns(uint256) +func (_ERC20Outbox *ERC20OutboxCallerSession) L2ToL1WithdrawalAmount() (*big.Int, error) { + return _ERC20Outbox.Contract.L2ToL1WithdrawalAmount(&_ERC20Outbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Outbox *ERC20OutboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Outbox *ERC20OutboxSession) Rollup() (common.Address, error) { + return _ERC20Outbox.Contract.Rollup(&_ERC20Outbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20Outbox *ERC20OutboxCallerSession) Rollup() (common.Address, error) { + return _ERC20Outbox.Contract.Rollup(&_ERC20Outbox.CallOpts) +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCaller) Roots(opts *bind.CallOpts, arg0 [32]byte) ([32]byte, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "roots", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxSession) Roots(arg0 [32]byte) ([32]byte, error) { + return _ERC20Outbox.Contract.Roots(&_ERC20Outbox.CallOpts, arg0) +} + +// Roots is a free data retrieval call binding the contract method 0xae6dead7. +// +// Solidity: function roots(bytes32 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCallerSession) Roots(arg0 [32]byte) ([32]byte, error) { + return _ERC20Outbox.Contract.Roots(&_ERC20Outbox.CallOpts, arg0) +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCaller) Spent(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _ERC20Outbox.contract.Call(opts, &out, "spent", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxSession) Spent(arg0 *big.Int) ([32]byte, error) { + return _ERC20Outbox.Contract.Spent(&_ERC20Outbox.CallOpts, arg0) +} + +// Spent is a free data retrieval call binding the contract method 0xd5b5cc23. +// +// Solidity: function spent(uint256 ) view returns(bytes32) +func (_ERC20Outbox *ERC20OutboxCallerSession) Spent(arg0 *big.Int) ([32]byte, error) { + return _ERC20Outbox.Contract.Spent(&_ERC20Outbox.CallOpts, arg0) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxTransactor) ExecuteTransaction(opts *bind.TransactOpts, proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "executeTransaction", proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxSession) ExecuteTransaction(proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ExecuteTransaction(&_ERC20Outbox.TransactOpts, proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0x08635a95. +// +// Solidity: function executeTransaction(bytes32[] proof, uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) ExecuteTransaction(proof [][32]byte, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ExecuteTransaction(&_ERC20Outbox.TransactOpts, proof, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxTransactor) ExecuteTransactionSimulation(opts *bind.TransactOpts, index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "executeTransactionSimulation", index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxSession) ExecuteTransactionSimulation(index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ExecuteTransactionSimulation(&_ERC20Outbox.TransactOpts, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// ExecuteTransactionSimulation is a paid mutator transaction binding the contract method 0x288e5b10. +// +// Solidity: function executeTransactionSimulation(uint256 index, address l2Sender, address to, uint256 l2Block, uint256 l1Block, uint256 l2Timestamp, uint256 value, bytes data) returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) ExecuteTransactionSimulation(index *big.Int, l2Sender common.Address, to common.Address, l2Block *big.Int, l1Block *big.Int, l2Timestamp *big.Int, value *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.ExecuteTransactionSimulation(&_ERC20Outbox.TransactOpts, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20Outbox *ERC20OutboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "initialize", _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20Outbox *ERC20OutboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _ERC20Outbox.Contract.Initialize(&_ERC20Outbox.TransactOpts, _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _ERC20Outbox.Contract.Initialize(&_ERC20Outbox.TransactOpts, _bridge) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_ERC20Outbox *ERC20OutboxTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_ERC20Outbox *ERC20OutboxSession) PostUpgradeInit() (*types.Transaction, error) { + return _ERC20Outbox.Contract.PostUpgradeInit(&_ERC20Outbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _ERC20Outbox.Contract.PostUpgradeInit(&_ERC20Outbox.TransactOpts) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_ERC20Outbox *ERC20OutboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "updateRollupAddress") +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_ERC20Outbox *ERC20OutboxSession) UpdateRollupAddress() (*types.Transaction, error) { + return _ERC20Outbox.Contract.UpdateRollupAddress(&_ERC20Outbox.TransactOpts) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { + return _ERC20Outbox.Contract.UpdateRollupAddress(&_ERC20Outbox.TransactOpts) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_ERC20Outbox *ERC20OutboxTransactor) UpdateSendRoot(opts *bind.TransactOpts, root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _ERC20Outbox.contract.Transact(opts, "updateSendRoot", root, l2BlockHash) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_ERC20Outbox *ERC20OutboxSession) UpdateSendRoot(root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.UpdateSendRoot(&_ERC20Outbox.TransactOpts, root, l2BlockHash) +} + +// UpdateSendRoot is a paid mutator transaction binding the contract method 0xa04cee60. +// +// Solidity: function updateSendRoot(bytes32 root, bytes32 l2BlockHash) returns() +func (_ERC20Outbox *ERC20OutboxTransactorSession) UpdateSendRoot(root [32]byte, l2BlockHash [32]byte) (*types.Transaction, error) { + return _ERC20Outbox.Contract.UpdateSendRoot(&_ERC20Outbox.TransactOpts, root, l2BlockHash) +} + +// ERC20OutboxOutBoxTransactionExecutedIterator is returned from FilterOutBoxTransactionExecuted and is used to iterate over the raw logs and unpacked data for OutBoxTransactionExecuted events raised by the ERC20Outbox contract. +type ERC20OutboxOutBoxTransactionExecutedIterator struct { + Event *ERC20OutboxOutBoxTransactionExecuted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20OutboxOutBoxTransactionExecutedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20OutboxOutBoxTransactionExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20OutboxOutBoxTransactionExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20OutboxOutBoxTransactionExecutedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20OutboxOutBoxTransactionExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20OutboxOutBoxTransactionExecuted represents a OutBoxTransactionExecuted event raised by the ERC20Outbox contract. +type ERC20OutboxOutBoxTransactionExecuted struct { + To common.Address + L2Sender common.Address + Zero *big.Int + TransactionIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutBoxTransactionExecuted is a free log retrieval operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_ERC20Outbox *ERC20OutboxFilterer) FilterOutBoxTransactionExecuted(opts *bind.FilterOpts, to []common.Address, l2Sender []common.Address, zero []*big.Int) (*ERC20OutboxOutBoxTransactionExecutedIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var l2SenderRule []interface{} + for _, l2SenderItem := range l2Sender { + l2SenderRule = append(l2SenderRule, l2SenderItem) + } + var zeroRule []interface{} + for _, zeroItem := range zero { + zeroRule = append(zeroRule, zeroItem) + } + + logs, sub, err := _ERC20Outbox.contract.FilterLogs(opts, "OutBoxTransactionExecuted", toRule, l2SenderRule, zeroRule) + if err != nil { + return nil, err + } + return &ERC20OutboxOutBoxTransactionExecutedIterator{contract: _ERC20Outbox.contract, event: "OutBoxTransactionExecuted", logs: logs, sub: sub}, nil +} + +// WatchOutBoxTransactionExecuted is a free log subscription operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_ERC20Outbox *ERC20OutboxFilterer) WatchOutBoxTransactionExecuted(opts *bind.WatchOpts, sink chan<- *ERC20OutboxOutBoxTransactionExecuted, to []common.Address, l2Sender []common.Address, zero []*big.Int) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var l2SenderRule []interface{} + for _, l2SenderItem := range l2Sender { + l2SenderRule = append(l2SenderRule, l2SenderItem) + } + var zeroRule []interface{} + for _, zeroItem := range zero { + zeroRule = append(zeroRule, zeroItem) + } + + logs, sub, err := _ERC20Outbox.contract.WatchLogs(opts, "OutBoxTransactionExecuted", toRule, l2SenderRule, zeroRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20OutboxOutBoxTransactionExecuted) + if err := _ERC20Outbox.contract.UnpackLog(event, "OutBoxTransactionExecuted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutBoxTransactionExecuted is a log parse operation binding the contract event 0x20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964. +// +// Solidity: event OutBoxTransactionExecuted(address indexed to, address indexed l2Sender, uint256 indexed zero, uint256 transactionIndex) +func (_ERC20Outbox *ERC20OutboxFilterer) ParseOutBoxTransactionExecuted(log types.Log) (*ERC20OutboxOutBoxTransactionExecuted, error) { + event := new(ERC20OutboxOutBoxTransactionExecuted) + if err := _ERC20Outbox.contract.UnpackLog(event, "OutBoxTransactionExecuted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20OutboxSendRootUpdatedIterator is returned from FilterSendRootUpdated and is used to iterate over the raw logs and unpacked data for SendRootUpdated events raised by the ERC20Outbox contract. +type ERC20OutboxSendRootUpdatedIterator struct { + Event *ERC20OutboxSendRootUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20OutboxSendRootUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20OutboxSendRootUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20OutboxSendRootUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20OutboxSendRootUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20OutboxSendRootUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20OutboxSendRootUpdated represents a SendRootUpdated event raised by the ERC20Outbox contract. +type ERC20OutboxSendRootUpdated struct { + OutputRoot [32]byte + L2BlockHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSendRootUpdated is a free log retrieval operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_ERC20Outbox *ERC20OutboxFilterer) FilterSendRootUpdated(opts *bind.FilterOpts, outputRoot [][32]byte, l2BlockHash [][32]byte) (*ERC20OutboxSendRootUpdatedIterator, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2BlockHashRule []interface{} + for _, l2BlockHashItem := range l2BlockHash { + l2BlockHashRule = append(l2BlockHashRule, l2BlockHashItem) + } + + logs, sub, err := _ERC20Outbox.contract.FilterLogs(opts, "SendRootUpdated", outputRootRule, l2BlockHashRule) + if err != nil { + return nil, err + } + return &ERC20OutboxSendRootUpdatedIterator{contract: _ERC20Outbox.contract, event: "SendRootUpdated", logs: logs, sub: sub}, nil +} + +// WatchSendRootUpdated is a free log subscription operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_ERC20Outbox *ERC20OutboxFilterer) WatchSendRootUpdated(opts *bind.WatchOpts, sink chan<- *ERC20OutboxSendRootUpdated, outputRoot [][32]byte, l2BlockHash [][32]byte) (event.Subscription, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2BlockHashRule []interface{} + for _, l2BlockHashItem := range l2BlockHash { + l2BlockHashRule = append(l2BlockHashRule, l2BlockHashItem) + } + + logs, sub, err := _ERC20Outbox.contract.WatchLogs(opts, "SendRootUpdated", outputRootRule, l2BlockHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20OutboxSendRootUpdated) + if err := _ERC20Outbox.contract.UnpackLog(event, "SendRootUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSendRootUpdated is a log parse operation binding the contract event 0xb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748. +// +// Solidity: event SendRootUpdated(bytes32 indexed outputRoot, bytes32 indexed l2BlockHash) +func (_ERC20Outbox *ERC20OutboxFilterer) ParseSendRootUpdated(log types.Log) (*ERC20OutboxSendRootUpdated, error) { + event := new(ERC20OutboxSendRootUpdated) + if err := _ERC20Outbox.contract.UnpackLog(event, "SendRootUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderMetaData contains all meta data concerning the GasRefunder contract. +var GasRefunderMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGasRefunder.CommonParameterKey\",\"name\":\"parameter\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"CommonParameterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"ContractAllowedSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"DisallowerSet\",\"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\":\"refundee\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enumGasRefunder.RefundDenyReason\",\"name\":\"reason\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"}],\"name\":\"RefundGasCostsDenied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"refundee\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountPaid\",\"type\":\"uint256\"}],\"name\":\"RefundedGasCosts\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"RefundeeAllowedSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"allowContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"allowRefundees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedContracts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRefundees\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commonParams\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"maxRefundeeBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"extraGasMargin\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"calldataCost\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"maxGasTip\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxGasCost\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxSingleGasUsage\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"disallowContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"disallowRefundees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disallower\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"refundee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"calldataSize\",\"type\":\"uint256\"}],\"name\":\"onGasSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newValue\",\"type\":\"uint8\"}],\"name\":\"setCalldataCost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setDisallower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newValue\",\"type\":\"uint32\"}],\"name\":\"setExtraGasMargin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValue\",\"type\":\"uint64\"}],\"name\":\"setMaxGasCost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValue\",\"type\":\"uint64\"}],\"name\":\"setMaxGasTip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newValue\",\"type\":\"uint128\"}],\"name\":\"setMaxRefundeeBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"newValue\",\"type\":\"uint32\"}],\"name\":\"setMaxSingleGasUsage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a336100a5565b6040805160c08101825260008152610fa06020820152600c9181019190915263773594006060820152641bf08eb0006080820152621e848060a090910152600480546001600160e81b03191678773594000c00000fa000000000000000000000000000000000179055600580546001600160601b0319166a1e84800000001bf08eb0001790556100f5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112b9806101046000396000f3fe6080604052600436106101635760003560e01c8063ca101295116100c0578063efe12b0111610074578063f2fde38b11610059578063f2fde38b146104db578063f3fef3a3146104fb578063f52128eb1461051b57600080fd5b8063efe12b011461049b578063f1e845ca146104bb57600080fd5b8063d5138948116100a5578063d513894814610365578063e3db8a491461045b578063e52074531461047b57600080fd5b8063ca10129514610325578063cd499da31461034557600080fd5b80637edddf45116101175780638da5cb5b116100fc5780638da5cb5b146102a3578063a89d2173146102d5578063bffe17801461030557600080fd5b80637edddf451461026357806386b988951461028357600080fd5b8063500de43111610148578063500de431146101e957806351e0e26b14610209578063715018a61461024e57600080fd5b806325416bc9146101a75780632ccb03f2146101c957600080fd5b366101a257604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1005b600080fd5b3480156101b357600080fd5b506101c76101c2366004610ffd565b61053b565b005b3480156101d557600080fd5b506101c76101e4366004611072565b610553565b3480156101f557600080fd5b506101c761020436600461109c565b6105d3565b34801561021557600080fd5b506102396102243660046110d7565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561025a57600080fd5b506101c761064d565b34801561026f57600080fd5b506101c761027e36600461109c565b610661565b34801561028f57600080fd5b506101c761029e366004611072565b6106b3565b3480156102af57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610245565b3480156102e157600080fd5b506102396102f03660046110d7565b60026020526000908152604090205460ff1681565b34801561031157600080fd5b506101c76103203660046110f4565b61070e565b34801561033157600080fd5b506101c7610340366004610ffd565b61078f565b34801561035157600080fd5b506101c7610360366004610ffd565b6107a3565b34801561037157600080fd5b50600454600554610403916fffffffffffffffffffffffffffffffff81169163ffffffff700100000000000000000000000000000000830481169260ff740100000000000000000000000000000000000000008204169267ffffffffffffffff750100000000000000000000000000000000000000000090920482169291811691680100000000000000009091041686565b604080516fffffffffffffffffffffffffffffffff909716875263ffffffff958616602088015260ff9094169386019390935267ffffffffffffffff91821660608601521660808401521660a082015260c001610245565b34801561046757600080fd5b50610239610476366004611117565b610823565b34801561048757600080fd5b506101c7610496366004610ffd565b610b0d565b3480156104a757600080fd5b506003546102bd906001600160a01b031681565b3480156104c757600080fd5b506101c76104d63660046110d7565b610b88565b3480156104e757600080fd5b506101c76104f63660046110d7565b610bf2565b34801561050757600080fd5b506101c761051636600461114c565b610c82565b34801561052757600080fd5b506101c7610536366004611178565b610d7b565b610543610e03565b61054f82826001610e5d565b5050565b61055b610e03565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831617905560045b60405167ffffffffffffffff831681527fda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b906020015b60405180910390a250565b6105db610e03565b600580547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000063ffffffff8416021781555b60405163ffffffff831681527fda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b906020016105c8565b610655610e03565b61065f6000610efc565b565b610669610e03565b600480547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000063ffffffff8416021790556001610617565b6106bb610e03565b600480547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000067ffffffffffffffff8416021790556003610592565b610716610e03565b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff841602179055600260405160ff831681527fda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b906020016105c8565b610797610e03565b61054f82826001610f64565b6000546001600160a01b03163314806107c657506003546001600160a01b031633145b6108175760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b61054f82826000610e5d565b6000805a90504760008190036108815760035b60405186815233906001600160a01b038916907f2b8ae00e22d9eaf5a92820a22b947c007aee773fa36502ad7a1c9a464ab4932b9060200160405180910390a4600092505050610b06565b3360009081526001602052604090205460ff1661089f576000610836565b6001600160a01b03861660009081526002602052604090205460ff166108c6576001610836565b6004546000906108f9907501000000000000000000000000000000000000000000900467ffffffffffffffff16486111d9565b9050803a101561090657503a5b60055467ffffffffffffffff161580159061092c575060055467ffffffffffffffff1681115b15610940575060055467ffffffffffffffff165b6004546005546001600160a01b03891631916fffffffffffffffffffffffffffffffff81169168010000000000000000900463ffffffff169061099e9074010000000000000000000000000000000000000000900460ff16896111f2565b6004546109c590700100000000000000000000000000000000900463ffffffff16886111d9565b6109cf91906111d9565b6109d9908a6111d9565b98505a6109e6908a611209565b985080158015906109f657508089115b156109ff578098505b6000610a0b8a866111f2565b90508215801590610a24575082610a2282866111d9565b115b15610a4e5782841115610a41576000975050505050505050610b06565b610a4b8484611209565b90505b85811115610a595750845b6040516001600160a01b038c16908290600081818185875af1925050503d8060008114610aa2576040519150601f19603f3d011682016040523d82523d6000602084013e610aa7565b606091505b5050604080518c8152602081018890529081018390529098508815159033906001600160a01b038e16907fd0224505f828ccfcbc56ca0590d97442e239a7aa770f712948fd6388356b20de9060600160405180910390a4505050505050505b9392505050565b6000546001600160a01b0316331480610b3057506003546001600160a01b031633145b610b7c5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161080e565b61054f82826000610f64565b610b90610e03565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fc388cec0895ad7ee4635898ec92207ca48d42256d4355f7042efef62c368a97990600090a250565b610bfa610e03565b6001600160a01b038116610c765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161080e565b610c7f81610efc565b50565b610c8a610e03565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610cd7576040519150601f19603f3d011682016040523d82523d6000602084013e610cdc565b606091505b5050905080610d2d5760405162461bcd60e51b815260206004820152600f60248201527f57495448445241575f4641494c45440000000000000000000000000000000000604482015260640161080e565b604080513381526001600160a01b03851660208201529081018390527fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060600160405180910390a1505050565b610d83610e03565b600480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff831617905560006040516fffffffffffffffffffffffffffffffff831681527fda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b906020016105c8565b6000546001600160a01b0316331461065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080e565b60005b82811015610ef6576000848483818110610e7c57610e7c61121c565b9050602002016020810190610e9191906110d7565b6001600160a01b038116600081815260016020526040808220805460ff19168815159081179091559051939450927fb0918cd965657b8d231f8adba328fa810b6d61d800de9c795d40eb3623498c019190a35080610eee8161124b565b915050610e60565b50505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b82811015610ef6576000848483818110610f8357610f8361121c565b9050602002016020810190610f9891906110d7565b6001600160a01b038116600081815260026020526040808220805460ff19168815159081179091559051939450927ff544cca9d5484bfd447775bd759d12d53f1aa7c5f770be82c55070798ff9c63e9190a35080610ff58161124b565b915050610f67565b6000806020838503121561101057600080fd5b823567ffffffffffffffff8082111561102857600080fd5b818501915085601f83011261103c57600080fd5b81358181111561104b57600080fd5b8660208260051b850101111561106057600080fd5b60209290920196919550909350505050565b60006020828403121561108457600080fd5b813567ffffffffffffffff81168114610b0657600080fd5b6000602082840312156110ae57600080fd5b813563ffffffff81168114610b0657600080fd5b6001600160a01b0381168114610c7f57600080fd5b6000602082840312156110e957600080fd5b8135610b06816110c2565b60006020828403121561110657600080fd5b813560ff81168114610b0657600080fd5b60008060006060848603121561112c57600080fd5b8335611137816110c2565b95602085013595506040909401359392505050565b6000806040838503121561115f57600080fd5b823561116a816110c2565b946020939093013593505050565b60006020828403121561118a57600080fd5b81356fffffffffffffffffffffffffffffffff81168114610b0657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156111ec576111ec6111aa565b92915050565b80820281158282048414176111ec576111ec6111aa565b818103818111156111ec576111ec6111aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361127c5761127c6111aa565b506001019056fea2646970667358221220abb49a09721d037c90145de99c8cee80cc8cb9c22d8ec5b4587147b34e300f6064736f6c63430008110033", +} + +// GasRefunderABI is the input ABI used to generate the binding from. +// Deprecated: Use GasRefunderMetaData.ABI instead. +var GasRefunderABI = GasRefunderMetaData.ABI + +// GasRefunderBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GasRefunderMetaData.Bin instead. +var GasRefunderBin = GasRefunderMetaData.Bin + +// DeployGasRefunder deploys a new Ethereum contract, binding an instance of GasRefunder to it. +func DeployGasRefunder(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GasRefunder, error) { + parsed, err := GasRefunderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(GasRefunderBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GasRefunder{GasRefunderCaller: GasRefunderCaller{contract: contract}, GasRefunderTransactor: GasRefunderTransactor{contract: contract}, GasRefunderFilterer: GasRefunderFilterer{contract: contract}}, nil +} + +// GasRefunder is an auto generated Go binding around an Ethereum contract. +type GasRefunder struct { + GasRefunderCaller // Read-only binding to the contract + GasRefunderTransactor // Write-only binding to the contract + GasRefunderFilterer // Log filterer for contract events +} + +// GasRefunderCaller is an auto generated read-only Go binding around an Ethereum contract. +type GasRefunderCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasRefunderTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GasRefunderTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasRefunderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GasRefunderFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasRefunderSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GasRefunderSession struct { + Contract *GasRefunder // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GasRefunderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GasRefunderCallerSession struct { + Contract *GasRefunderCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GasRefunderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GasRefunderTransactorSession struct { + Contract *GasRefunderTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GasRefunderRaw is an auto generated low-level Go binding around an Ethereum contract. +type GasRefunderRaw struct { + Contract *GasRefunder // Generic contract binding to access the raw methods on +} + +// GasRefunderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GasRefunderCallerRaw struct { + Contract *GasRefunderCaller // Generic read-only contract binding to access the raw methods on +} + +// GasRefunderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GasRefunderTransactorRaw struct { + Contract *GasRefunderTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGasRefunder creates a new instance of GasRefunder, bound to a specific deployed contract. +func NewGasRefunder(address common.Address, backend bind.ContractBackend) (*GasRefunder, error) { + contract, err := bindGasRefunder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GasRefunder{GasRefunderCaller: GasRefunderCaller{contract: contract}, GasRefunderTransactor: GasRefunderTransactor{contract: contract}, GasRefunderFilterer: GasRefunderFilterer{contract: contract}}, nil +} + +// NewGasRefunderCaller creates a new read-only instance of GasRefunder, bound to a specific deployed contract. +func NewGasRefunderCaller(address common.Address, caller bind.ContractCaller) (*GasRefunderCaller, error) { + contract, err := bindGasRefunder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GasRefunderCaller{contract: contract}, nil +} + +// NewGasRefunderTransactor creates a new write-only instance of GasRefunder, bound to a specific deployed contract. +func NewGasRefunderTransactor(address common.Address, transactor bind.ContractTransactor) (*GasRefunderTransactor, error) { + contract, err := bindGasRefunder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GasRefunderTransactor{contract: contract}, nil +} + +// NewGasRefunderFilterer creates a new log filterer instance of GasRefunder, bound to a specific deployed contract. +func NewGasRefunderFilterer(address common.Address, filterer bind.ContractFilterer) (*GasRefunderFilterer, error) { + contract, err := bindGasRefunder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GasRefunderFilterer{contract: contract}, nil +} + +// bindGasRefunder binds a generic wrapper to an already deployed contract. +func bindGasRefunder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := GasRefunderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GasRefunder *GasRefunderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GasRefunder.Contract.GasRefunderCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GasRefunder *GasRefunderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasRefunder.Contract.GasRefunderTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GasRefunder *GasRefunderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GasRefunder.Contract.GasRefunderTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GasRefunder *GasRefunderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GasRefunder.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GasRefunder *GasRefunderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasRefunder.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GasRefunder *GasRefunderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GasRefunder.Contract.contract.Transact(opts, method, params...) +} + +// AllowedContracts is a free data retrieval call binding the contract method 0x51e0e26b. +// +// Solidity: function allowedContracts(address ) view returns(bool) +func (_GasRefunder *GasRefunderCaller) AllowedContracts(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _GasRefunder.contract.Call(opts, &out, "allowedContracts", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedContracts is a free data retrieval call binding the contract method 0x51e0e26b. +// +// Solidity: function allowedContracts(address ) view returns(bool) +func (_GasRefunder *GasRefunderSession) AllowedContracts(arg0 common.Address) (bool, error) { + return _GasRefunder.Contract.AllowedContracts(&_GasRefunder.CallOpts, arg0) +} + +// AllowedContracts is a free data retrieval call binding the contract method 0x51e0e26b. +// +// Solidity: function allowedContracts(address ) view returns(bool) +func (_GasRefunder *GasRefunderCallerSession) AllowedContracts(arg0 common.Address) (bool, error) { + return _GasRefunder.Contract.AllowedContracts(&_GasRefunder.CallOpts, arg0) +} + +// AllowedRefundees is a free data retrieval call binding the contract method 0xa89d2173. +// +// Solidity: function allowedRefundees(address ) view returns(bool) +func (_GasRefunder *GasRefunderCaller) AllowedRefundees(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _GasRefunder.contract.Call(opts, &out, "allowedRefundees", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedRefundees is a free data retrieval call binding the contract method 0xa89d2173. +// +// Solidity: function allowedRefundees(address ) view returns(bool) +func (_GasRefunder *GasRefunderSession) AllowedRefundees(arg0 common.Address) (bool, error) { + return _GasRefunder.Contract.AllowedRefundees(&_GasRefunder.CallOpts, arg0) +} + +// AllowedRefundees is a free data retrieval call binding the contract method 0xa89d2173. +// +// Solidity: function allowedRefundees(address ) view returns(bool) +func (_GasRefunder *GasRefunderCallerSession) AllowedRefundees(arg0 common.Address) (bool, error) { + return _GasRefunder.Contract.AllowedRefundees(&_GasRefunder.CallOpts, arg0) +} + +// CommonParams is a free data retrieval call binding the contract method 0xd5138948. +// +// Solidity: function commonParams() view returns(uint128 maxRefundeeBalance, uint32 extraGasMargin, uint8 calldataCost, uint64 maxGasTip, uint64 maxGasCost, uint32 maxSingleGasUsage) +func (_GasRefunder *GasRefunderCaller) CommonParams(opts *bind.CallOpts) (struct { + MaxRefundeeBalance *big.Int + ExtraGasMargin uint32 + CalldataCost uint8 + MaxGasTip uint64 + MaxGasCost uint64 + MaxSingleGasUsage uint32 +}, error) { + var out []interface{} + err := _GasRefunder.contract.Call(opts, &out, "commonParams") + + outstruct := new(struct { + MaxRefundeeBalance *big.Int + ExtraGasMargin uint32 + CalldataCost uint8 + MaxGasTip uint64 + MaxGasCost uint64 + MaxSingleGasUsage uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.MaxRefundeeBalance = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.ExtraGasMargin = *abi.ConvertType(out[1], new(uint32)).(*uint32) + outstruct.CalldataCost = *abi.ConvertType(out[2], new(uint8)).(*uint8) + outstruct.MaxGasTip = *abi.ConvertType(out[3], new(uint64)).(*uint64) + outstruct.MaxGasCost = *abi.ConvertType(out[4], new(uint64)).(*uint64) + outstruct.MaxSingleGasUsage = *abi.ConvertType(out[5], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// CommonParams is a free data retrieval call binding the contract method 0xd5138948. +// +// Solidity: function commonParams() view returns(uint128 maxRefundeeBalance, uint32 extraGasMargin, uint8 calldataCost, uint64 maxGasTip, uint64 maxGasCost, uint32 maxSingleGasUsage) +func (_GasRefunder *GasRefunderSession) CommonParams() (struct { + MaxRefundeeBalance *big.Int + ExtraGasMargin uint32 + CalldataCost uint8 + MaxGasTip uint64 + MaxGasCost uint64 + MaxSingleGasUsage uint32 +}, error) { + return _GasRefunder.Contract.CommonParams(&_GasRefunder.CallOpts) +} + +// CommonParams is a free data retrieval call binding the contract method 0xd5138948. +// +// Solidity: function commonParams() view returns(uint128 maxRefundeeBalance, uint32 extraGasMargin, uint8 calldataCost, uint64 maxGasTip, uint64 maxGasCost, uint32 maxSingleGasUsage) +func (_GasRefunder *GasRefunderCallerSession) CommonParams() (struct { + MaxRefundeeBalance *big.Int + ExtraGasMargin uint32 + CalldataCost uint8 + MaxGasTip uint64 + MaxGasCost uint64 + MaxSingleGasUsage uint32 +}, error) { + return _GasRefunder.Contract.CommonParams(&_GasRefunder.CallOpts) +} + +// Disallower is a free data retrieval call binding the contract method 0xefe12b01. +// +// Solidity: function disallower() view returns(address) +func (_GasRefunder *GasRefunderCaller) Disallower(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GasRefunder.contract.Call(opts, &out, "disallower") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Disallower is a free data retrieval call binding the contract method 0xefe12b01. +// +// Solidity: function disallower() view returns(address) +func (_GasRefunder *GasRefunderSession) Disallower() (common.Address, error) { + return _GasRefunder.Contract.Disallower(&_GasRefunder.CallOpts) +} + +// Disallower is a free data retrieval call binding the contract method 0xefe12b01. +// +// Solidity: function disallower() view returns(address) +func (_GasRefunder *GasRefunderCallerSession) Disallower() (common.Address, error) { + return _GasRefunder.Contract.Disallower(&_GasRefunder.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GasRefunder *GasRefunderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GasRefunder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GasRefunder *GasRefunderSession) Owner() (common.Address, error) { + return _GasRefunder.Contract.Owner(&_GasRefunder.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GasRefunder *GasRefunderCallerSession) Owner() (common.Address, error) { + return _GasRefunder.Contract.Owner(&_GasRefunder.CallOpts) +} + +// AllowContracts is a paid mutator transaction binding the contract method 0x25416bc9. +// +// Solidity: function allowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactor) AllowContracts(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "allowContracts", addresses) +} + +// AllowContracts is a paid mutator transaction binding the contract method 0x25416bc9. +// +// Solidity: function allowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderSession) AllowContracts(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.AllowContracts(&_GasRefunder.TransactOpts, addresses) +} + +// AllowContracts is a paid mutator transaction binding the contract method 0x25416bc9. +// +// Solidity: function allowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactorSession) AllowContracts(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.AllowContracts(&_GasRefunder.TransactOpts, addresses) +} + +// AllowRefundees is a paid mutator transaction binding the contract method 0xca101295. +// +// Solidity: function allowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactor) AllowRefundees(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "allowRefundees", addresses) +} + +// AllowRefundees is a paid mutator transaction binding the contract method 0xca101295. +// +// Solidity: function allowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderSession) AllowRefundees(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.AllowRefundees(&_GasRefunder.TransactOpts, addresses) +} + +// AllowRefundees is a paid mutator transaction binding the contract method 0xca101295. +// +// Solidity: function allowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactorSession) AllowRefundees(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.AllowRefundees(&_GasRefunder.TransactOpts, addresses) +} + +// DisallowContracts is a paid mutator transaction binding the contract method 0xcd499da3. +// +// Solidity: function disallowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactor) DisallowContracts(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "disallowContracts", addresses) +} + +// DisallowContracts is a paid mutator transaction binding the contract method 0xcd499da3. +// +// Solidity: function disallowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderSession) DisallowContracts(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.DisallowContracts(&_GasRefunder.TransactOpts, addresses) +} + +// DisallowContracts is a paid mutator transaction binding the contract method 0xcd499da3. +// +// Solidity: function disallowContracts(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactorSession) DisallowContracts(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.DisallowContracts(&_GasRefunder.TransactOpts, addresses) +} + +// DisallowRefundees is a paid mutator transaction binding the contract method 0xe5207453. +// +// Solidity: function disallowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactor) DisallowRefundees(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "disallowRefundees", addresses) +} + +// DisallowRefundees is a paid mutator transaction binding the contract method 0xe5207453. +// +// Solidity: function disallowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderSession) DisallowRefundees(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.DisallowRefundees(&_GasRefunder.TransactOpts, addresses) +} + +// DisallowRefundees is a paid mutator transaction binding the contract method 0xe5207453. +// +// Solidity: function disallowRefundees(address[] addresses) returns() +func (_GasRefunder *GasRefunderTransactorSession) DisallowRefundees(addresses []common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.DisallowRefundees(&_GasRefunder.TransactOpts, addresses) +} + +// OnGasSpent is a paid mutator transaction binding the contract method 0xe3db8a49. +// +// Solidity: function onGasSpent(address refundee, uint256 gasUsed, uint256 calldataSize) returns(bool success) +func (_GasRefunder *GasRefunderTransactor) OnGasSpent(opts *bind.TransactOpts, refundee common.Address, gasUsed *big.Int, calldataSize *big.Int) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "onGasSpent", refundee, gasUsed, calldataSize) +} + +// OnGasSpent is a paid mutator transaction binding the contract method 0xe3db8a49. +// +// Solidity: function onGasSpent(address refundee, uint256 gasUsed, uint256 calldataSize) returns(bool success) +func (_GasRefunder *GasRefunderSession) OnGasSpent(refundee common.Address, gasUsed *big.Int, calldataSize *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.OnGasSpent(&_GasRefunder.TransactOpts, refundee, gasUsed, calldataSize) +} + +// OnGasSpent is a paid mutator transaction binding the contract method 0xe3db8a49. +// +// Solidity: function onGasSpent(address refundee, uint256 gasUsed, uint256 calldataSize) returns(bool success) +func (_GasRefunder *GasRefunderTransactorSession) OnGasSpent(refundee common.Address, gasUsed *big.Int, calldataSize *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.OnGasSpent(&_GasRefunder.TransactOpts, refundee, gasUsed, calldataSize) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GasRefunder *GasRefunderTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GasRefunder *GasRefunderSession) RenounceOwnership() (*types.Transaction, error) { + return _GasRefunder.Contract.RenounceOwnership(&_GasRefunder.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GasRefunder *GasRefunderTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _GasRefunder.Contract.RenounceOwnership(&_GasRefunder.TransactOpts) +} + +// SetCalldataCost is a paid mutator transaction binding the contract method 0xbffe1780. +// +// Solidity: function setCalldataCost(uint8 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetCalldataCost(opts *bind.TransactOpts, newValue uint8) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setCalldataCost", newValue) +} + +// SetCalldataCost is a paid mutator transaction binding the contract method 0xbffe1780. +// +// Solidity: function setCalldataCost(uint8 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetCalldataCost(newValue uint8) (*types.Transaction, error) { + return _GasRefunder.Contract.SetCalldataCost(&_GasRefunder.TransactOpts, newValue) +} + +// SetCalldataCost is a paid mutator transaction binding the contract method 0xbffe1780. +// +// Solidity: function setCalldataCost(uint8 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetCalldataCost(newValue uint8) (*types.Transaction, error) { + return _GasRefunder.Contract.SetCalldataCost(&_GasRefunder.TransactOpts, newValue) +} + +// SetDisallower is a paid mutator transaction binding the contract method 0xf1e845ca. +// +// Solidity: function setDisallower(address addr) returns() +func (_GasRefunder *GasRefunderTransactor) SetDisallower(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setDisallower", addr) +} + +// SetDisallower is a paid mutator transaction binding the contract method 0xf1e845ca. +// +// Solidity: function setDisallower(address addr) returns() +func (_GasRefunder *GasRefunderSession) SetDisallower(addr common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.SetDisallower(&_GasRefunder.TransactOpts, addr) +} + +// SetDisallower is a paid mutator transaction binding the contract method 0xf1e845ca. +// +// Solidity: function setDisallower(address addr) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetDisallower(addr common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.SetDisallower(&_GasRefunder.TransactOpts, addr) +} + +// SetExtraGasMargin is a paid mutator transaction binding the contract method 0x7edddf45. +// +// Solidity: function setExtraGasMargin(uint32 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetExtraGasMargin(opts *bind.TransactOpts, newValue uint32) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setExtraGasMargin", newValue) +} + +// SetExtraGasMargin is a paid mutator transaction binding the contract method 0x7edddf45. +// +// Solidity: function setExtraGasMargin(uint32 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetExtraGasMargin(newValue uint32) (*types.Transaction, error) { + return _GasRefunder.Contract.SetExtraGasMargin(&_GasRefunder.TransactOpts, newValue) +} + +// SetExtraGasMargin is a paid mutator transaction binding the contract method 0x7edddf45. +// +// Solidity: function setExtraGasMargin(uint32 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetExtraGasMargin(newValue uint32) (*types.Transaction, error) { + return _GasRefunder.Contract.SetExtraGasMargin(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxGasCost is a paid mutator transaction binding the contract method 0x2ccb03f2. +// +// Solidity: function setMaxGasCost(uint64 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetMaxGasCost(opts *bind.TransactOpts, newValue uint64) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setMaxGasCost", newValue) +} + +// SetMaxGasCost is a paid mutator transaction binding the contract method 0x2ccb03f2. +// +// Solidity: function setMaxGasCost(uint64 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetMaxGasCost(newValue uint64) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxGasCost(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxGasCost is a paid mutator transaction binding the contract method 0x2ccb03f2. +// +// Solidity: function setMaxGasCost(uint64 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetMaxGasCost(newValue uint64) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxGasCost(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxGasTip is a paid mutator transaction binding the contract method 0x86b98895. +// +// Solidity: function setMaxGasTip(uint64 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetMaxGasTip(opts *bind.TransactOpts, newValue uint64) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setMaxGasTip", newValue) +} + +// SetMaxGasTip is a paid mutator transaction binding the contract method 0x86b98895. +// +// Solidity: function setMaxGasTip(uint64 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetMaxGasTip(newValue uint64) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxGasTip(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxGasTip is a paid mutator transaction binding the contract method 0x86b98895. +// +// Solidity: function setMaxGasTip(uint64 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetMaxGasTip(newValue uint64) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxGasTip(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxRefundeeBalance is a paid mutator transaction binding the contract method 0xf52128eb. +// +// Solidity: function setMaxRefundeeBalance(uint128 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetMaxRefundeeBalance(opts *bind.TransactOpts, newValue *big.Int) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setMaxRefundeeBalance", newValue) +} + +// SetMaxRefundeeBalance is a paid mutator transaction binding the contract method 0xf52128eb. +// +// Solidity: function setMaxRefundeeBalance(uint128 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetMaxRefundeeBalance(newValue *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxRefundeeBalance(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxRefundeeBalance is a paid mutator transaction binding the contract method 0xf52128eb. +// +// Solidity: function setMaxRefundeeBalance(uint128 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetMaxRefundeeBalance(newValue *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxRefundeeBalance(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxSingleGasUsage is a paid mutator transaction binding the contract method 0x500de431. +// +// Solidity: function setMaxSingleGasUsage(uint32 newValue) returns() +func (_GasRefunder *GasRefunderTransactor) SetMaxSingleGasUsage(opts *bind.TransactOpts, newValue uint32) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "setMaxSingleGasUsage", newValue) +} + +// SetMaxSingleGasUsage is a paid mutator transaction binding the contract method 0x500de431. +// +// Solidity: function setMaxSingleGasUsage(uint32 newValue) returns() +func (_GasRefunder *GasRefunderSession) SetMaxSingleGasUsage(newValue uint32) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxSingleGasUsage(&_GasRefunder.TransactOpts, newValue) +} + +// SetMaxSingleGasUsage is a paid mutator transaction binding the contract method 0x500de431. +// +// Solidity: function setMaxSingleGasUsage(uint32 newValue) returns() +func (_GasRefunder *GasRefunderTransactorSession) SetMaxSingleGasUsage(newValue uint32) (*types.Transaction, error) { + return _GasRefunder.Contract.SetMaxSingleGasUsage(&_GasRefunder.TransactOpts, newValue) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GasRefunder *GasRefunderTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GasRefunder *GasRefunderSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.TransferOwnership(&_GasRefunder.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GasRefunder *GasRefunderTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GasRefunder.Contract.TransferOwnership(&_GasRefunder.TransactOpts, newOwner) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xf3fef3a3. +// +// Solidity: function withdraw(address destination, uint256 amount) returns() +func (_GasRefunder *GasRefunderTransactor) Withdraw(opts *bind.TransactOpts, destination common.Address, amount *big.Int) (*types.Transaction, error) { + return _GasRefunder.contract.Transact(opts, "withdraw", destination, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xf3fef3a3. +// +// Solidity: function withdraw(address destination, uint256 amount) returns() +func (_GasRefunder *GasRefunderSession) Withdraw(destination common.Address, amount *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.Withdraw(&_GasRefunder.TransactOpts, destination, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0xf3fef3a3. +// +// Solidity: function withdraw(address destination, uint256 amount) returns() +func (_GasRefunder *GasRefunderTransactorSession) Withdraw(destination common.Address, amount *big.Int) (*types.Transaction, error) { + return _GasRefunder.Contract.Withdraw(&_GasRefunder.TransactOpts, destination, amount) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GasRefunder *GasRefunderTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasRefunder.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GasRefunder *GasRefunderSession) Receive() (*types.Transaction, error) { + return _GasRefunder.Contract.Receive(&_GasRefunder.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GasRefunder *GasRefunderTransactorSession) Receive() (*types.Transaction, error) { + return _GasRefunder.Contract.Receive(&_GasRefunder.TransactOpts) +} + +// GasRefunderCommonParameterSetIterator is returned from FilterCommonParameterSet and is used to iterate over the raw logs and unpacked data for CommonParameterSet events raised by the GasRefunder contract. +type GasRefunderCommonParameterSetIterator struct { + Event *GasRefunderCommonParameterSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderCommonParameterSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderCommonParameterSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderCommonParameterSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderCommonParameterSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderCommonParameterSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderCommonParameterSet represents a CommonParameterSet event raised by the GasRefunder contract. +type GasRefunderCommonParameterSet struct { + Parameter uint8 + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCommonParameterSet is a free log retrieval operation binding the contract event 0xda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b. +// +// Solidity: event CommonParameterSet(uint8 indexed parameter, uint256 value) +func (_GasRefunder *GasRefunderFilterer) FilterCommonParameterSet(opts *bind.FilterOpts, parameter []uint8) (*GasRefunderCommonParameterSetIterator, error) { + + var parameterRule []interface{} + for _, parameterItem := range parameter { + parameterRule = append(parameterRule, parameterItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "CommonParameterSet", parameterRule) + if err != nil { + return nil, err + } + return &GasRefunderCommonParameterSetIterator{contract: _GasRefunder.contract, event: "CommonParameterSet", logs: logs, sub: sub}, nil +} + +// WatchCommonParameterSet is a free log subscription operation binding the contract event 0xda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b. +// +// Solidity: event CommonParameterSet(uint8 indexed parameter, uint256 value) +func (_GasRefunder *GasRefunderFilterer) WatchCommonParameterSet(opts *bind.WatchOpts, sink chan<- *GasRefunderCommonParameterSet, parameter []uint8) (event.Subscription, error) { + + var parameterRule []interface{} + for _, parameterItem := range parameter { + parameterRule = append(parameterRule, parameterItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "CommonParameterSet", parameterRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderCommonParameterSet) + if err := _GasRefunder.contract.UnpackLog(event, "CommonParameterSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCommonParameterSet is a log parse operation binding the contract event 0xda79b6b81f905f788560507c685a42d5a8ab209ee26538cbcf3ce3caed601f9b. +// +// Solidity: event CommonParameterSet(uint8 indexed parameter, uint256 value) +func (_GasRefunder *GasRefunderFilterer) ParseCommonParameterSet(log types.Log) (*GasRefunderCommonParameterSet, error) { + event := new(GasRefunderCommonParameterSet) + if err := _GasRefunder.contract.UnpackLog(event, "CommonParameterSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderContractAllowedSetIterator is returned from FilterContractAllowedSet and is used to iterate over the raw logs and unpacked data for ContractAllowedSet events raised by the GasRefunder contract. +type GasRefunderContractAllowedSetIterator struct { + Event *GasRefunderContractAllowedSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderContractAllowedSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderContractAllowedSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderContractAllowedSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderContractAllowedSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderContractAllowedSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderContractAllowedSet represents a ContractAllowedSet event raised by the GasRefunder contract. +type GasRefunderContractAllowedSet struct { + Addr common.Address + Allowed bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterContractAllowedSet is a free log retrieval operation binding the contract event 0xb0918cd965657b8d231f8adba328fa810b6d61d800de9c795d40eb3623498c01. +// +// Solidity: event ContractAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) FilterContractAllowedSet(opts *bind.FilterOpts, addr []common.Address, allowed []bool) (*GasRefunderContractAllowedSetIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + var allowedRule []interface{} + for _, allowedItem := range allowed { + allowedRule = append(allowedRule, allowedItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "ContractAllowedSet", addrRule, allowedRule) + if err != nil { + return nil, err + } + return &GasRefunderContractAllowedSetIterator{contract: _GasRefunder.contract, event: "ContractAllowedSet", logs: logs, sub: sub}, nil +} + +// WatchContractAllowedSet is a free log subscription operation binding the contract event 0xb0918cd965657b8d231f8adba328fa810b6d61d800de9c795d40eb3623498c01. +// +// Solidity: event ContractAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) WatchContractAllowedSet(opts *bind.WatchOpts, sink chan<- *GasRefunderContractAllowedSet, addr []common.Address, allowed []bool) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + var allowedRule []interface{} + for _, allowedItem := range allowed { + allowedRule = append(allowedRule, allowedItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "ContractAllowedSet", addrRule, allowedRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderContractAllowedSet) + if err := _GasRefunder.contract.UnpackLog(event, "ContractAllowedSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseContractAllowedSet is a log parse operation binding the contract event 0xb0918cd965657b8d231f8adba328fa810b6d61d800de9c795d40eb3623498c01. +// +// Solidity: event ContractAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) ParseContractAllowedSet(log types.Log) (*GasRefunderContractAllowedSet, error) { + event := new(GasRefunderContractAllowedSet) + if err := _GasRefunder.contract.UnpackLog(event, "ContractAllowedSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderDepositedIterator is returned from FilterDeposited and is used to iterate over the raw logs and unpacked data for Deposited events raised by the GasRefunder contract. +type GasRefunderDepositedIterator struct { + Event *GasRefunderDeposited // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderDepositedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderDeposited represents a Deposited event raised by the GasRefunder contract. +type GasRefunderDeposited struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposited is a free log retrieval operation binding the contract event 0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4. +// +// Solidity: event Deposited(address sender, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) FilterDeposited(opts *bind.FilterOpts) (*GasRefunderDepositedIterator, error) { + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "Deposited") + if err != nil { + return nil, err + } + return &GasRefunderDepositedIterator{contract: _GasRefunder.contract, event: "Deposited", logs: logs, sub: sub}, nil +} + +// WatchDeposited is a free log subscription operation binding the contract event 0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4. +// +// Solidity: event Deposited(address sender, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) WatchDeposited(opts *bind.WatchOpts, sink chan<- *GasRefunderDeposited) (event.Subscription, error) { + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "Deposited") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderDeposited) + if err := _GasRefunder.contract.UnpackLog(event, "Deposited", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeposited is a log parse operation binding the contract event 0x2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4. +// +// Solidity: event Deposited(address sender, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) ParseDeposited(log types.Log) (*GasRefunderDeposited, error) { + event := new(GasRefunderDeposited) + if err := _GasRefunder.contract.UnpackLog(event, "Deposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderDisallowerSetIterator is returned from FilterDisallowerSet and is used to iterate over the raw logs and unpacked data for DisallowerSet events raised by the GasRefunder contract. +type GasRefunderDisallowerSetIterator struct { + Event *GasRefunderDisallowerSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderDisallowerSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderDisallowerSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderDisallowerSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderDisallowerSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderDisallowerSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderDisallowerSet represents a DisallowerSet event raised by the GasRefunder contract. +type GasRefunderDisallowerSet struct { + Addr common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDisallowerSet is a free log retrieval operation binding the contract event 0xc388cec0895ad7ee4635898ec92207ca48d42256d4355f7042efef62c368a979. +// +// Solidity: event DisallowerSet(address indexed addr) +func (_GasRefunder *GasRefunderFilterer) FilterDisallowerSet(opts *bind.FilterOpts, addr []common.Address) (*GasRefunderDisallowerSetIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "DisallowerSet", addrRule) + if err != nil { + return nil, err + } + return &GasRefunderDisallowerSetIterator{contract: _GasRefunder.contract, event: "DisallowerSet", logs: logs, sub: sub}, nil +} + +// WatchDisallowerSet is a free log subscription operation binding the contract event 0xc388cec0895ad7ee4635898ec92207ca48d42256d4355f7042efef62c368a979. +// +// Solidity: event DisallowerSet(address indexed addr) +func (_GasRefunder *GasRefunderFilterer) WatchDisallowerSet(opts *bind.WatchOpts, sink chan<- *GasRefunderDisallowerSet, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "DisallowerSet", addrRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderDisallowerSet) + if err := _GasRefunder.contract.UnpackLog(event, "DisallowerSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDisallowerSet is a log parse operation binding the contract event 0xc388cec0895ad7ee4635898ec92207ca48d42256d4355f7042efef62c368a979. +// +// Solidity: event DisallowerSet(address indexed addr) +func (_GasRefunder *GasRefunderFilterer) ParseDisallowerSet(log types.Log) (*GasRefunderDisallowerSet, error) { + event := new(GasRefunderDisallowerSet) + if err := _GasRefunder.contract.UnpackLog(event, "DisallowerSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the GasRefunder contract. +type GasRefunderOwnershipTransferredIterator struct { + Event *GasRefunderOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderOwnershipTransferred represents a OwnershipTransferred event raised by the GasRefunder contract. +type GasRefunderOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GasRefunder *GasRefunderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*GasRefunderOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &GasRefunderOwnershipTransferredIterator{contract: _GasRefunder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GasRefunder *GasRefunderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *GasRefunderOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderOwnershipTransferred) + if err := _GasRefunder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GasRefunder *GasRefunderFilterer) ParseOwnershipTransferred(log types.Log) (*GasRefunderOwnershipTransferred, error) { + event := new(GasRefunderOwnershipTransferred) + if err := _GasRefunder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderRefundGasCostsDeniedIterator is returned from FilterRefundGasCostsDenied and is used to iterate over the raw logs and unpacked data for RefundGasCostsDenied events raised by the GasRefunder contract. +type GasRefunderRefundGasCostsDeniedIterator struct { + Event *GasRefunderRefundGasCostsDenied // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderRefundGasCostsDeniedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundGasCostsDenied) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundGasCostsDenied) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderRefundGasCostsDeniedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderRefundGasCostsDeniedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderRefundGasCostsDenied represents a RefundGasCostsDenied event raised by the GasRefunder contract. +type GasRefunderRefundGasCostsDenied struct { + Refundee common.Address + ContractAddress common.Address + Reason uint8 + Gas *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRefundGasCostsDenied is a free log retrieval operation binding the contract event 0x2b8ae00e22d9eaf5a92820a22b947c007aee773fa36502ad7a1c9a464ab4932b. +// +// Solidity: event RefundGasCostsDenied(address indexed refundee, address indexed contractAddress, uint8 indexed reason, uint256 gas) +func (_GasRefunder *GasRefunderFilterer) FilterRefundGasCostsDenied(opts *bind.FilterOpts, refundee []common.Address, contractAddress []common.Address, reason []uint8) (*GasRefunderRefundGasCostsDeniedIterator, error) { + + var refundeeRule []interface{} + for _, refundeeItem := range refundee { + refundeeRule = append(refundeeRule, refundeeItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + var reasonRule []interface{} + for _, reasonItem := range reason { + reasonRule = append(reasonRule, reasonItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "RefundGasCostsDenied", refundeeRule, contractAddressRule, reasonRule) + if err != nil { + return nil, err + } + return &GasRefunderRefundGasCostsDeniedIterator{contract: _GasRefunder.contract, event: "RefundGasCostsDenied", logs: logs, sub: sub}, nil +} + +// WatchRefundGasCostsDenied is a free log subscription operation binding the contract event 0x2b8ae00e22d9eaf5a92820a22b947c007aee773fa36502ad7a1c9a464ab4932b. +// +// Solidity: event RefundGasCostsDenied(address indexed refundee, address indexed contractAddress, uint8 indexed reason, uint256 gas) +func (_GasRefunder *GasRefunderFilterer) WatchRefundGasCostsDenied(opts *bind.WatchOpts, sink chan<- *GasRefunderRefundGasCostsDenied, refundee []common.Address, contractAddress []common.Address, reason []uint8) (event.Subscription, error) { + + var refundeeRule []interface{} + for _, refundeeItem := range refundee { + refundeeRule = append(refundeeRule, refundeeItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + var reasonRule []interface{} + for _, reasonItem := range reason { + reasonRule = append(reasonRule, reasonItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "RefundGasCostsDenied", refundeeRule, contractAddressRule, reasonRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderRefundGasCostsDenied) + if err := _GasRefunder.contract.UnpackLog(event, "RefundGasCostsDenied", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRefundGasCostsDenied is a log parse operation binding the contract event 0x2b8ae00e22d9eaf5a92820a22b947c007aee773fa36502ad7a1c9a464ab4932b. +// +// Solidity: event RefundGasCostsDenied(address indexed refundee, address indexed contractAddress, uint8 indexed reason, uint256 gas) +func (_GasRefunder *GasRefunderFilterer) ParseRefundGasCostsDenied(log types.Log) (*GasRefunderRefundGasCostsDenied, error) { + event := new(GasRefunderRefundGasCostsDenied) + if err := _GasRefunder.contract.UnpackLog(event, "RefundGasCostsDenied", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderRefundedGasCostsIterator is returned from FilterRefundedGasCosts and is used to iterate over the raw logs and unpacked data for RefundedGasCosts events raised by the GasRefunder contract. +type GasRefunderRefundedGasCostsIterator struct { + Event *GasRefunderRefundedGasCosts // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderRefundedGasCostsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundedGasCosts) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundedGasCosts) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderRefundedGasCostsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderRefundedGasCostsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderRefundedGasCosts represents a RefundedGasCosts event raised by the GasRefunder contract. +type GasRefunderRefundedGasCosts struct { + Refundee common.Address + ContractAddress common.Address + Success bool + Gas *big.Int + GasPrice *big.Int + AmountPaid *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRefundedGasCosts is a free log retrieval operation binding the contract event 0xd0224505f828ccfcbc56ca0590d97442e239a7aa770f712948fd6388356b20de. +// +// Solidity: event RefundedGasCosts(address indexed refundee, address indexed contractAddress, bool indexed success, uint256 gas, uint256 gasPrice, uint256 amountPaid) +func (_GasRefunder *GasRefunderFilterer) FilterRefundedGasCosts(opts *bind.FilterOpts, refundee []common.Address, contractAddress []common.Address, success []bool) (*GasRefunderRefundedGasCostsIterator, error) { + + var refundeeRule []interface{} + for _, refundeeItem := range refundee { + refundeeRule = append(refundeeRule, refundeeItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + var successRule []interface{} + for _, successItem := range success { + successRule = append(successRule, successItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "RefundedGasCosts", refundeeRule, contractAddressRule, successRule) + if err != nil { + return nil, err + } + return &GasRefunderRefundedGasCostsIterator{contract: _GasRefunder.contract, event: "RefundedGasCosts", logs: logs, sub: sub}, nil +} + +// WatchRefundedGasCosts is a free log subscription operation binding the contract event 0xd0224505f828ccfcbc56ca0590d97442e239a7aa770f712948fd6388356b20de. +// +// Solidity: event RefundedGasCosts(address indexed refundee, address indexed contractAddress, bool indexed success, uint256 gas, uint256 gasPrice, uint256 amountPaid) +func (_GasRefunder *GasRefunderFilterer) WatchRefundedGasCosts(opts *bind.WatchOpts, sink chan<- *GasRefunderRefundedGasCosts, refundee []common.Address, contractAddress []common.Address, success []bool) (event.Subscription, error) { + + var refundeeRule []interface{} + for _, refundeeItem := range refundee { + refundeeRule = append(refundeeRule, refundeeItem) + } + var contractAddressRule []interface{} + for _, contractAddressItem := range contractAddress { + contractAddressRule = append(contractAddressRule, contractAddressItem) + } + var successRule []interface{} + for _, successItem := range success { + successRule = append(successRule, successItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "RefundedGasCosts", refundeeRule, contractAddressRule, successRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderRefundedGasCosts) + if err := _GasRefunder.contract.UnpackLog(event, "RefundedGasCosts", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRefundedGasCosts is a log parse operation binding the contract event 0xd0224505f828ccfcbc56ca0590d97442e239a7aa770f712948fd6388356b20de. +// +// Solidity: event RefundedGasCosts(address indexed refundee, address indexed contractAddress, bool indexed success, uint256 gas, uint256 gasPrice, uint256 amountPaid) +func (_GasRefunder *GasRefunderFilterer) ParseRefundedGasCosts(log types.Log) (*GasRefunderRefundedGasCosts, error) { + event := new(GasRefunderRefundedGasCosts) + if err := _GasRefunder.contract.UnpackLog(event, "RefundedGasCosts", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderRefundeeAllowedSetIterator is returned from FilterRefundeeAllowedSet and is used to iterate over the raw logs and unpacked data for RefundeeAllowedSet events raised by the GasRefunder contract. +type GasRefunderRefundeeAllowedSetIterator struct { + Event *GasRefunderRefundeeAllowedSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderRefundeeAllowedSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundeeAllowedSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderRefundeeAllowedSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderRefundeeAllowedSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderRefundeeAllowedSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderRefundeeAllowedSet represents a RefundeeAllowedSet event raised by the GasRefunder contract. +type GasRefunderRefundeeAllowedSet struct { + Addr common.Address + Allowed bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRefundeeAllowedSet is a free log retrieval operation binding the contract event 0xf544cca9d5484bfd447775bd759d12d53f1aa7c5f770be82c55070798ff9c63e. +// +// Solidity: event RefundeeAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) FilterRefundeeAllowedSet(opts *bind.FilterOpts, addr []common.Address, allowed []bool) (*GasRefunderRefundeeAllowedSetIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + var allowedRule []interface{} + for _, allowedItem := range allowed { + allowedRule = append(allowedRule, allowedItem) + } + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "RefundeeAllowedSet", addrRule, allowedRule) + if err != nil { + return nil, err + } + return &GasRefunderRefundeeAllowedSetIterator{contract: _GasRefunder.contract, event: "RefundeeAllowedSet", logs: logs, sub: sub}, nil +} + +// WatchRefundeeAllowedSet is a free log subscription operation binding the contract event 0xf544cca9d5484bfd447775bd759d12d53f1aa7c5f770be82c55070798ff9c63e. +// +// Solidity: event RefundeeAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) WatchRefundeeAllowedSet(opts *bind.WatchOpts, sink chan<- *GasRefunderRefundeeAllowedSet, addr []common.Address, allowed []bool) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + var allowedRule []interface{} + for _, allowedItem := range allowed { + allowedRule = append(allowedRule, allowedItem) + } + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "RefundeeAllowedSet", addrRule, allowedRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderRefundeeAllowedSet) + if err := _GasRefunder.contract.UnpackLog(event, "RefundeeAllowedSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRefundeeAllowedSet is a log parse operation binding the contract event 0xf544cca9d5484bfd447775bd759d12d53f1aa7c5f770be82c55070798ff9c63e. +// +// Solidity: event RefundeeAllowedSet(address indexed addr, bool indexed allowed) +func (_GasRefunder *GasRefunderFilterer) ParseRefundeeAllowedSet(log types.Log) (*GasRefunderRefundeeAllowedSet, error) { + event := new(GasRefunderRefundeeAllowedSet) + if err := _GasRefunder.contract.UnpackLog(event, "RefundeeAllowedSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GasRefunderWithdrawnIterator is returned from FilterWithdrawn and is used to iterate over the raw logs and unpacked data for Withdrawn events raised by the GasRefunder contract. +type GasRefunderWithdrawnIterator struct { + Event *GasRefunderWithdrawn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GasRefunderWithdrawnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GasRefunderWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GasRefunderWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GasRefunderWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GasRefunderWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GasRefunderWithdrawn represents a Withdrawn event raised by the GasRefunder contract. +type GasRefunderWithdrawn struct { + Initiator common.Address + Destination common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawn is a free log retrieval operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address initiator, address destination, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) FilterWithdrawn(opts *bind.FilterOpts) (*GasRefunderWithdrawnIterator, error) { + + logs, sub, err := _GasRefunder.contract.FilterLogs(opts, "Withdrawn") + if err != nil { + return nil, err + } + return &GasRefunderWithdrawnIterator{contract: _GasRefunder.contract, event: "Withdrawn", logs: logs, sub: sub}, nil +} + +// WatchWithdrawn is a free log subscription operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address initiator, address destination, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) WatchWithdrawn(opts *bind.WatchOpts, sink chan<- *GasRefunderWithdrawn) (event.Subscription, error) { + + logs, sub, err := _GasRefunder.contract.WatchLogs(opts, "Withdrawn") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GasRefunderWithdrawn) + if err := _GasRefunder.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawn is a log parse operation binding the contract event 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb. +// +// Solidity: event Withdrawn(address initiator, address destination, uint256 amount) +func (_GasRefunder *GasRefunderFilterer) ParseWithdrawn(log types.Log) (*GasRefunderWithdrawn, error) { + event := new(GasRefunderWithdrawn) + if err := _GasRefunder.contract.UnpackLog(event, "Withdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeMetaData contains all meta data concerning the IBridge contract. +var IBridgeMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgNum\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use IBridgeMetaData.ABI instead. +var IBridgeABI = IBridgeMetaData.ABI + +// IBridge is an auto generated Go binding around an Ethereum contract. +type IBridge struct { + IBridgeCaller // Read-only binding to the contract + IBridgeTransactor // Write-only binding to the contract + IBridgeFilterer // Log filterer for contract events +} + +// IBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBridgeSession struct { + Contract *IBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBridgeCallerSession struct { + Contract *IBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBridgeTransactorSession struct { + Contract *IBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBridgeRaw struct { + Contract *IBridge // Generic contract binding to access the raw methods on +} + +// IBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBridgeCallerRaw struct { + Contract *IBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// IBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBridgeTransactorRaw struct { + Contract *IBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBridge creates a new instance of IBridge, bound to a specific deployed contract. +func NewIBridge(address common.Address, backend bind.ContractBackend) (*IBridge, error) { + contract, err := bindIBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBridge{IBridgeCaller: IBridgeCaller{contract: contract}, IBridgeTransactor: IBridgeTransactor{contract: contract}, IBridgeFilterer: IBridgeFilterer{contract: contract}}, nil +} + +// NewIBridgeCaller creates a new read-only instance of IBridge, bound to a specific deployed contract. +func NewIBridgeCaller(address common.Address, caller bind.ContractCaller) (*IBridgeCaller, error) { + contract, err := bindIBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBridgeCaller{contract: contract}, nil +} + +// NewIBridgeTransactor creates a new write-only instance of IBridge, bound to a specific deployed contract. +func NewIBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*IBridgeTransactor, error) { + contract, err := bindIBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBridgeTransactor{contract: contract}, nil +} + +// NewIBridgeFilterer creates a new log filterer instance of IBridge, bound to a specific deployed contract. +func NewIBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*IBridgeFilterer, error) { + contract, err := bindIBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBridgeFilterer{contract: contract}, nil +} + +// bindIBridge binds a generic wrapper to an already deployed contract. +func bindIBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBridge *IBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBridge.Contract.IBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBridge *IBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBridge.Contract.IBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBridge *IBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBridge.Contract.IBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBridge *IBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBridge *IBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBridge *IBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBridge.Contract.contract.Transact(opts, method, params...) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IBridge *IBridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "activeOutbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IBridge *IBridgeSession) ActiveOutbox() (common.Address, error) { + return _IBridge.Contract.ActiveOutbox(&_IBridge.CallOpts) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IBridge *IBridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _IBridge.Contract.ActiveOutbox(&_IBridge.CallOpts) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IBridge *IBridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IBridge *IBridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IBridge.Contract.AllowedDelayedInboxes(&_IBridge.CallOpts, inbox) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IBridge *IBridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IBridge.Contract.AllowedDelayedInboxes(&_IBridge.CallOpts, inbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IBridge *IBridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IBridge *IBridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IBridge.Contract.AllowedOutboxes(&_IBridge.CallOpts, outbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IBridge *IBridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IBridge.Contract.AllowedOutboxes(&_IBridge.CallOpts, outbox) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IBridge.Contract.DelayedInboxAccs(&_IBridge.CallOpts, arg0) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IBridge.Contract.DelayedInboxAccs(&_IBridge.CallOpts, arg0) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IBridge *IBridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "delayedMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IBridge *IBridgeSession) DelayedMessageCount() (*big.Int, error) { + return _IBridge.Contract.DelayedMessageCount(&_IBridge.CallOpts) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IBridge *IBridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _IBridge.Contract.DelayedMessageCount(&_IBridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IBridge *IBridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IBridge *IBridgeSession) Rollup() (common.Address, error) { + return _IBridge.Contract.Rollup(&_IBridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IBridge *IBridgeCallerSession) Rollup() (common.Address, error) { + return _IBridge.Contract.Rollup(&_IBridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IBridge *IBridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IBridge *IBridgeSession) SequencerInbox() (common.Address, error) { + return _IBridge.Contract.SequencerInbox(&_IBridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IBridge *IBridgeCallerSession) SequencerInbox() (common.Address, error) { + return _IBridge.Contract.SequencerInbox(&_IBridge.CallOpts) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IBridge.Contract.SequencerInboxAccs(&_IBridge.CallOpts, arg0) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IBridge *IBridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IBridge.Contract.SequencerInboxAccs(&_IBridge.CallOpts, arg0) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IBridge *IBridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "sequencerMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IBridge *IBridgeSession) SequencerMessageCount() (*big.Int, error) { + return _IBridge.Contract.SequencerMessageCount(&_IBridge.CallOpts) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IBridge *IBridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _IBridge.Contract.SequencerMessageCount(&_IBridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IBridge *IBridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IBridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IBridge *IBridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IBridge.Contract.SequencerReportedSubMessageCount(&_IBridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IBridge *IBridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IBridge.Contract.SequencerReportedSubMessageCount(&_IBridge.CallOpts) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IBridge *IBridgeTransactor) AllowedDelayedInboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "allowedDelayedInboxList", arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IBridge *IBridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.AllowedDelayedInboxList(&_IBridge.TransactOpts, arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IBridge *IBridgeTransactorSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.AllowedDelayedInboxList(&_IBridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IBridge *IBridgeTransactor) AllowedOutboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "allowedOutboxList", arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IBridge *IBridgeSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.AllowedOutboxList(&_IBridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IBridge *IBridgeTransactorSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.AllowedOutboxList(&_IBridge.TransactOpts, arg0) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IBridge *IBridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IBridge *IBridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.EnqueueSequencerMessage(&_IBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IBridge *IBridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IBridge.Contract.EnqueueSequencerMessage(&_IBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IBridge *IBridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "executeCall", to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IBridge *IBridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IBridge.Contract.ExecuteCall(&_IBridge.TransactOpts, to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IBridge *IBridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IBridge.Contract.ExecuteCall(&_IBridge.TransactOpts, to, value, data) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.Contract.SetDelayedInbox(&_IBridge.TransactOpts, inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.Contract.SetDelayedInbox(&_IBridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeTransactor) SetOutbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "setOutbox", inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.Contract.SetOutbox(&_IBridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IBridge *IBridgeTransactorSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IBridge.Contract.SetOutbox(&_IBridge.TransactOpts, inbox, enabled) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IBridge *IBridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IBridge *IBridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IBridge.Contract.SetSequencerInbox(&_IBridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IBridge *IBridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IBridge.Contract.SetSequencerInbox(&_IBridge.TransactOpts, _sequencerInbox) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IBridge *IBridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "submitBatchSpendingReport", batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IBridge *IBridgeSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IBridge.Contract.SubmitBatchSpendingReport(&_IBridge.TransactOpts, batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IBridge *IBridgeTransactorSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IBridge.Contract.SubmitBatchSpendingReport(&_IBridge.TransactOpts, batchPoster, dataHash) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IBridge *IBridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _IBridge.contract.Transact(opts, "updateRollupAddress", _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IBridge *IBridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IBridge.Contract.UpdateRollupAddress(&_IBridge.TransactOpts, _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IBridge *IBridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IBridge.Contract.UpdateRollupAddress(&_IBridge.TransactOpts, _rollup) +} + +// IBridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the IBridge contract. +type IBridgeBridgeCallTriggeredIterator struct { + Event *IBridgeBridgeCallTriggered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeBridgeCallTriggeredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeBridgeCallTriggeredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeBridgeCallTriggeredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the IBridge contract. +type IBridgeBridgeCallTriggered struct { + Outbox common.Address + To common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IBridge *IBridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*IBridgeBridgeCallTriggeredIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return &IBridgeBridgeCallTriggeredIterator{contract: _IBridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil +} + +// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IBridge *IBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *IBridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeBridgeCallTriggered) + if err := _IBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IBridge *IBridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*IBridgeBridgeCallTriggered, error) { + event := new(IBridgeBridgeCallTriggered) + if err := _IBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the IBridge contract. +type IBridgeInboxToggleIterator struct { + Event *IBridgeInboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeInboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeInboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeInboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeInboxToggle represents a InboxToggle event raised by the IBridge contract. +type IBridgeInboxToggle struct { + Inbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IBridge *IBridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*IBridgeInboxToggleIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return &IBridgeInboxToggleIterator{contract: _IBridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil +} + +// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IBridge *IBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *IBridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeInboxToggle) + if err := _IBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IBridge *IBridgeFilterer) ParseInboxToggle(log types.Log) (*IBridgeInboxToggle, error) { + event := new(IBridgeInboxToggle) + if err := _IBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the IBridge contract. +type IBridgeMessageDeliveredIterator struct { + Event *IBridgeMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeMessageDelivered represents a MessageDelivered event raised by the IBridge contract. +type IBridgeMessageDelivered struct { + MessageIndex *big.Int + BeforeInboxAcc [32]byte + Inbox common.Address + Kind uint8 + Sender common.Address + MessageDataHash [32]byte + BaseFeeL1 *big.Int + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IBridge *IBridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*IBridgeMessageDeliveredIterator, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return &IBridgeMessageDeliveredIterator{contract: _IBridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IBridge *IBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *IBridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeMessageDelivered) + if err := _IBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IBridge *IBridgeFilterer) ParseMessageDelivered(log types.Log) (*IBridgeMessageDelivered, error) { + event := new(IBridgeMessageDelivered) + if err := _IBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the IBridge contract. +type IBridgeOutboxToggleIterator struct { + Event *IBridgeOutboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeOutboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeOutboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeOutboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeOutboxToggle represents a OutboxToggle event raised by the IBridge contract. +type IBridgeOutboxToggle struct { + Outbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IBridge *IBridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*IBridgeOutboxToggleIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return &IBridgeOutboxToggleIterator{contract: _IBridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil +} + +// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IBridge *IBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *IBridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeOutboxToggle) + if err := _IBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IBridge *IBridgeFilterer) ParseOutboxToggle(log types.Log) (*IBridgeOutboxToggle, error) { + event := new(IBridgeOutboxToggle) + if err := _IBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the IBridge contract. +type IBridgeRollupUpdatedIterator struct { + Event *IBridgeRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeRollupUpdated represents a RollupUpdated event raised by the IBridge contract. +type IBridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IBridge *IBridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*IBridgeRollupUpdatedIterator, error) { + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &IBridgeRollupUpdatedIterator{contract: _IBridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IBridge *IBridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *IBridgeRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeRollupUpdated) + if err := _IBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IBridge *IBridgeFilterer) ParseRollupUpdated(log types.Log) (*IBridgeRollupUpdated, error) { + event := new(IBridgeRollupUpdated) + if err := _IBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the IBridge contract. +type IBridgeSequencerInboxUpdatedIterator struct { + Event *IBridgeSequencerInboxUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the IBridge contract. +type IBridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IBridge *IBridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*IBridgeSequencerInboxUpdatedIterator, error) { + + logs, sub, err := _IBridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return &IBridgeSequencerInboxUpdatedIterator{contract: _IBridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil +} + +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IBridge *IBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *IBridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _IBridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBridgeSequencerInboxUpdated) + if err := _IBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IBridge *IBridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*IBridgeSequencerInboxUpdated, error) { + event := new(IBridgeSequencerInboxUpdated) + if err := _IBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelayedMessageProviderMetaData contains all meta data concerning the IDelayedMessageProvider contract. +var IDelayedMessageProviderMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"}]", +} + +// IDelayedMessageProviderABI is the input ABI used to generate the binding from. +// Deprecated: Use IDelayedMessageProviderMetaData.ABI instead. +var IDelayedMessageProviderABI = IDelayedMessageProviderMetaData.ABI + +// IDelayedMessageProvider is an auto generated Go binding around an Ethereum contract. +type IDelayedMessageProvider struct { + IDelayedMessageProviderCaller // Read-only binding to the contract + IDelayedMessageProviderTransactor // Write-only binding to the contract + IDelayedMessageProviderFilterer // Log filterer for contract events +} + +// IDelayedMessageProviderCaller is an auto generated read-only Go binding around an Ethereum contract. +type IDelayedMessageProviderCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedMessageProviderTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IDelayedMessageProviderTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedMessageProviderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IDelayedMessageProviderFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IDelayedMessageProviderSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IDelayedMessageProviderSession struct { + Contract *IDelayedMessageProvider // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IDelayedMessageProviderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IDelayedMessageProviderCallerSession struct { + Contract *IDelayedMessageProviderCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IDelayedMessageProviderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IDelayedMessageProviderTransactorSession struct { + Contract *IDelayedMessageProviderTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IDelayedMessageProviderRaw is an auto generated low-level Go binding around an Ethereum contract. +type IDelayedMessageProviderRaw struct { + Contract *IDelayedMessageProvider // Generic contract binding to access the raw methods on +} + +// IDelayedMessageProviderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IDelayedMessageProviderCallerRaw struct { + Contract *IDelayedMessageProviderCaller // Generic read-only contract binding to access the raw methods on +} + +// IDelayedMessageProviderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IDelayedMessageProviderTransactorRaw struct { + Contract *IDelayedMessageProviderTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIDelayedMessageProvider creates a new instance of IDelayedMessageProvider, bound to a specific deployed contract. +func NewIDelayedMessageProvider(address common.Address, backend bind.ContractBackend) (*IDelayedMessageProvider, error) { + contract, err := bindIDelayedMessageProvider(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IDelayedMessageProvider{IDelayedMessageProviderCaller: IDelayedMessageProviderCaller{contract: contract}, IDelayedMessageProviderTransactor: IDelayedMessageProviderTransactor{contract: contract}, IDelayedMessageProviderFilterer: IDelayedMessageProviderFilterer{contract: contract}}, nil +} + +// NewIDelayedMessageProviderCaller creates a new read-only instance of IDelayedMessageProvider, bound to a specific deployed contract. +func NewIDelayedMessageProviderCaller(address common.Address, caller bind.ContractCaller) (*IDelayedMessageProviderCaller, error) { + contract, err := bindIDelayedMessageProvider(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IDelayedMessageProviderCaller{contract: contract}, nil +} + +// NewIDelayedMessageProviderTransactor creates a new write-only instance of IDelayedMessageProvider, bound to a specific deployed contract. +func NewIDelayedMessageProviderTransactor(address common.Address, transactor bind.ContractTransactor) (*IDelayedMessageProviderTransactor, error) { + contract, err := bindIDelayedMessageProvider(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IDelayedMessageProviderTransactor{contract: contract}, nil +} + +// NewIDelayedMessageProviderFilterer creates a new log filterer instance of IDelayedMessageProvider, bound to a specific deployed contract. +func NewIDelayedMessageProviderFilterer(address common.Address, filterer bind.ContractFilterer) (*IDelayedMessageProviderFilterer, error) { + contract, err := bindIDelayedMessageProvider(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IDelayedMessageProviderFilterer{contract: contract}, nil +} + +// bindIDelayedMessageProvider binds a generic wrapper to an already deployed contract. +func bindIDelayedMessageProvider(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IDelayedMessageProviderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelayedMessageProvider.Contract.IDelayedMessageProviderCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelayedMessageProvider.Contract.IDelayedMessageProviderTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelayedMessageProvider *IDelayedMessageProviderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelayedMessageProvider.Contract.IDelayedMessageProviderTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IDelayedMessageProvider *IDelayedMessageProviderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IDelayedMessageProvider.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IDelayedMessageProvider *IDelayedMessageProviderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IDelayedMessageProvider.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IDelayedMessageProvider *IDelayedMessageProviderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IDelayedMessageProvider.Contract.contract.Transact(opts, method, params...) +} + +// IDelayedMessageProviderInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IDelayedMessageProvider contract. +type IDelayedMessageProviderInboxMessageDeliveredIterator struct { + Event *IDelayedMessageProviderInboxMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IDelayedMessageProviderInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IDelayedMessageProviderInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelayedMessageProviderInboxMessageDelivered represents a InboxMessageDelivered event raised by the IDelayedMessageProvider contract. +type IDelayedMessageProviderInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IDelayedMessageProviderInboxMessageDeliveredIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IDelayedMessageProvider.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return &IDelayedMessageProviderInboxMessageDeliveredIterator{contract: _IDelayedMessageProvider.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IDelayedMessageProviderInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IDelayedMessageProvider.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IDelayedMessageProviderInboxMessageDelivered) + if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) ParseInboxMessageDelivered(log types.Log) (*IDelayedMessageProviderInboxMessageDelivered, error) { + event := new(IDelayedMessageProviderInboxMessageDelivered) + if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IDelayedMessageProvider contract. +type IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator struct { + Event *IDelayedMessageProviderInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelayedMessageProviderInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IDelayedMessageProvider contract. +type IDelayedMessageProviderInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IDelayedMessageProvider.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return &IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator{contract: _IDelayedMessageProvider.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IDelayedMessageProviderInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IDelayedMessageProvider.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IDelayedMessageProviderInboxMessageDeliveredFromOrigin, error) { + event := new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeMetaData contains all meta data concerning the IERC20Bridge contract. +var IERC20BridgeMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenFeeAmount\",\"type\":\"uint256\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeToken_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgNum\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IERC20BridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use IERC20BridgeMetaData.ABI instead. +var IERC20BridgeABI = IERC20BridgeMetaData.ABI + +// IERC20Bridge is an auto generated Go binding around an Ethereum contract. +type IERC20Bridge struct { + IERC20BridgeCaller // Read-only binding to the contract + IERC20BridgeTransactor // Write-only binding to the contract + IERC20BridgeFilterer // Log filterer for contract events +} + +// IERC20BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type IERC20BridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IERC20BridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IERC20BridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20BridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IERC20BridgeSession struct { + Contract *IERC20Bridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IERC20BridgeCallerSession struct { + Contract *IERC20BridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IERC20BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IERC20BridgeTransactorSession struct { + Contract *IERC20BridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type IERC20BridgeRaw struct { + Contract *IERC20Bridge // Generic contract binding to access the raw methods on +} + +// IERC20BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IERC20BridgeCallerRaw struct { + Contract *IERC20BridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// IERC20BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IERC20BridgeTransactorRaw struct { + Contract *IERC20BridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIERC20Bridge creates a new instance of IERC20Bridge, bound to a specific deployed contract. +func NewIERC20Bridge(address common.Address, backend bind.ContractBackend) (*IERC20Bridge, error) { + contract, err := bindIERC20Bridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IERC20Bridge{IERC20BridgeCaller: IERC20BridgeCaller{contract: contract}, IERC20BridgeTransactor: IERC20BridgeTransactor{contract: contract}, IERC20BridgeFilterer: IERC20BridgeFilterer{contract: contract}}, nil +} + +// NewIERC20BridgeCaller creates a new read-only instance of IERC20Bridge, bound to a specific deployed contract. +func NewIERC20BridgeCaller(address common.Address, caller bind.ContractCaller) (*IERC20BridgeCaller, error) { + contract, err := bindIERC20Bridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IERC20BridgeCaller{contract: contract}, nil +} + +// NewIERC20BridgeTransactor creates a new write-only instance of IERC20Bridge, bound to a specific deployed contract. +func NewIERC20BridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20BridgeTransactor, error) { + contract, err := bindIERC20Bridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IERC20BridgeTransactor{contract: contract}, nil +} + +// NewIERC20BridgeFilterer creates a new log filterer instance of IERC20Bridge, bound to a specific deployed contract. +func NewIERC20BridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20BridgeFilterer, error) { + contract, err := bindIERC20Bridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IERC20BridgeFilterer{contract: contract}, nil +} + +// bindIERC20Bridge binds a generic wrapper to an already deployed contract. +func bindIERC20Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IERC20BridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Bridge *IERC20BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Bridge.Contract.IERC20BridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Bridge *IERC20BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Bridge.Contract.IERC20BridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Bridge *IERC20BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Bridge.Contract.IERC20BridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Bridge *IERC20BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Bridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Bridge *IERC20BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Bridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Bridge *IERC20BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Bridge.Contract.contract.Transact(opts, method, params...) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "activeOutbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeSession) ActiveOutbox() (common.Address, error) { + return _IERC20Bridge.Contract.ActiveOutbox(&_IERC20Bridge.CallOpts) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _IERC20Bridge.Contract.ActiveOutbox(&_IERC20Bridge.CallOpts) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IERC20Bridge.Contract.AllowedDelayedInboxes(&_IERC20Bridge.CallOpts, inbox) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IERC20Bridge.Contract.AllowedDelayedInboxes(&_IERC20Bridge.CallOpts, inbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IERC20Bridge.Contract.AllowedOutboxes(&_IERC20Bridge.CallOpts, outbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IERC20Bridge *IERC20BridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IERC20Bridge.Contract.AllowedOutboxes(&_IERC20Bridge.CallOpts, outbox) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IERC20Bridge.Contract.DelayedInboxAccs(&_IERC20Bridge.CallOpts, arg0) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IERC20Bridge.Contract.DelayedInboxAccs(&_IERC20Bridge.CallOpts, arg0) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "delayedMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeSession) DelayedMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.DelayedMessageCount(&_IERC20Bridge.CallOpts) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.DelayedMessageCount(&_IERC20Bridge.CallOpts) +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_IERC20Bridge *IERC20BridgeCaller) NativeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "nativeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_IERC20Bridge *IERC20BridgeSession) NativeToken() (common.Address, error) { + return _IERC20Bridge.Contract.NativeToken(&_IERC20Bridge.CallOpts) +} + +// NativeToken is a free data retrieval call binding the contract method 0xe1758bd8. +// +// Solidity: function nativeToken() view returns(address) +func (_IERC20Bridge *IERC20BridgeCallerSession) NativeToken() (common.Address, error) { + return _IERC20Bridge.Contract.NativeToken(&_IERC20Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IERC20Bridge *IERC20BridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IERC20Bridge *IERC20BridgeSession) Rollup() (common.Address, error) { + return _IERC20Bridge.Contract.Rollup(&_IERC20Bridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IERC20Bridge *IERC20BridgeCallerSession) Rollup() (common.Address, error) { + return _IERC20Bridge.Contract.Rollup(&_IERC20Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeSession) SequencerInbox() (common.Address, error) { + return _IERC20Bridge.Contract.SequencerInbox(&_IERC20Bridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Bridge *IERC20BridgeCallerSession) SequencerInbox() (common.Address, error) { + return _IERC20Bridge.Contract.SequencerInbox(&_IERC20Bridge.CallOpts) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IERC20Bridge.Contract.SequencerInboxAccs(&_IERC20Bridge.CallOpts, arg0) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IERC20Bridge *IERC20BridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IERC20Bridge.Contract.SequencerInboxAccs(&_IERC20Bridge.CallOpts, arg0) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "sequencerMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeSession) SequencerMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.SequencerMessageCount(&_IERC20Bridge.CallOpts) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.SequencerMessageCount(&_IERC20Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IERC20Bridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.SequencerReportedSubMessageCount(&_IERC20Bridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IERC20Bridge *IERC20BridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IERC20Bridge.Contract.SequencerReportedSubMessageCount(&_IERC20Bridge.CallOpts) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeTransactor) AllowedDelayedInboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "allowedDelayedInboxList", arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.AllowedDelayedInboxList(&_IERC20Bridge.TransactOpts, arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeTransactorSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.AllowedDelayedInboxList(&_IERC20Bridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeTransactor) AllowedOutboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "allowedOutboxList", arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.AllowedOutboxList(&_IERC20Bridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IERC20Bridge *IERC20BridgeTransactorSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.AllowedOutboxList(&_IERC20Bridge.TransactOpts, arg0) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_IERC20Bridge *IERC20BridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_IERC20Bridge *IERC20BridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.EnqueueDelayedMessage(&_IERC20Bridge.TransactOpts, kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x75d81e25. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash, uint256 tokenFeeAmount) returns(uint256) +func (_IERC20Bridge *IERC20BridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte, tokenFeeAmount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.EnqueueDelayedMessage(&_IERC20Bridge.TransactOpts, kind, sender, messageDataHash, tokenFeeAmount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IERC20Bridge *IERC20BridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IERC20Bridge *IERC20BridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.EnqueueSequencerMessage(&_IERC20Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IERC20Bridge *IERC20BridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IERC20Bridge.Contract.EnqueueSequencerMessage(&_IERC20Bridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IERC20Bridge *IERC20BridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "executeCall", to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IERC20Bridge *IERC20BridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Bridge.Contract.ExecuteCall(&_IERC20Bridge.TransactOpts, to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IERC20Bridge *IERC20BridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Bridge.Contract.ExecuteCall(&_IERC20Bridge.TransactOpts, to, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_IERC20Bridge *IERC20BridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "initialize", rollup_, nativeToken_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_IERC20Bridge *IERC20BridgeSession) Initialize(rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.Initialize(&_IERC20Bridge.TransactOpts, rollup_, nativeToken_) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address rollup_, address nativeToken_) returns() +func (_IERC20Bridge *IERC20BridgeTransactorSession) Initialize(rollup_ common.Address, nativeToken_ common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.Initialize(&_IERC20Bridge.TransactOpts, rollup_, nativeToken_) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetDelayedInbox(&_IERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetDelayedInbox(&_IERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeTransactor) SetOutbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "setOutbox", inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetOutbox(&_IERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IERC20Bridge *IERC20BridgeTransactorSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetOutbox(&_IERC20Bridge.TransactOpts, inbox, enabled) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IERC20Bridge *IERC20BridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IERC20Bridge *IERC20BridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetSequencerInbox(&_IERC20Bridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IERC20Bridge *IERC20BridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SetSequencerInbox(&_IERC20Bridge.TransactOpts, _sequencerInbox) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IERC20Bridge *IERC20BridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "submitBatchSpendingReport", batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IERC20Bridge *IERC20BridgeSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SubmitBatchSpendingReport(&_IERC20Bridge.TransactOpts, batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IERC20Bridge *IERC20BridgeTransactorSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IERC20Bridge.Contract.SubmitBatchSpendingReport(&_IERC20Bridge.TransactOpts, batchPoster, dataHash) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IERC20Bridge *IERC20BridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _IERC20Bridge.contract.Transact(opts, "updateRollupAddress", _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IERC20Bridge *IERC20BridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.UpdateRollupAddress(&_IERC20Bridge.TransactOpts, _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IERC20Bridge *IERC20BridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IERC20Bridge.Contract.UpdateRollupAddress(&_IERC20Bridge.TransactOpts, _rollup) +} + +// IERC20BridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the IERC20Bridge contract. +type IERC20BridgeBridgeCallTriggeredIterator struct { + Event *IERC20BridgeBridgeCallTriggered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeBridgeCallTriggeredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeBridgeCallTriggeredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeBridgeCallTriggeredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the IERC20Bridge contract. +type IERC20BridgeBridgeCallTriggered struct { + Outbox common.Address + To common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*IERC20BridgeBridgeCallTriggeredIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return &IERC20BridgeBridgeCallTriggeredIterator{contract: _IERC20Bridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil +} + +// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *IERC20BridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeBridgeCallTriggered) + if err := _IERC20Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*IERC20BridgeBridgeCallTriggered, error) { + event := new(IERC20BridgeBridgeCallTriggered) + if err := _IERC20Bridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the IERC20Bridge contract. +type IERC20BridgeInboxToggleIterator struct { + Event *IERC20BridgeInboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeInboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeInboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeInboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeInboxToggle represents a InboxToggle event raised by the IERC20Bridge contract. +type IERC20BridgeInboxToggle struct { + Inbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*IERC20BridgeInboxToggleIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return &IERC20BridgeInboxToggleIterator{contract: _IERC20Bridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil +} + +// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *IERC20BridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeInboxToggle) + if err := _IERC20Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseInboxToggle(log types.Log) (*IERC20BridgeInboxToggle, error) { + event := new(IERC20BridgeInboxToggle) + if err := _IERC20Bridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the IERC20Bridge contract. +type IERC20BridgeMessageDeliveredIterator struct { + Event *IERC20BridgeMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeMessageDelivered represents a MessageDelivered event raised by the IERC20Bridge contract. +type IERC20BridgeMessageDelivered struct { + MessageIndex *big.Int + BeforeInboxAcc [32]byte + Inbox common.Address + Kind uint8 + Sender common.Address + MessageDataHash [32]byte + BaseFeeL1 *big.Int + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*IERC20BridgeMessageDeliveredIterator, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return &IERC20BridgeMessageDeliveredIterator{contract: _IERC20Bridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *IERC20BridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeMessageDelivered) + if err := _IERC20Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseMessageDelivered(log types.Log) (*IERC20BridgeMessageDelivered, error) { + event := new(IERC20BridgeMessageDelivered) + if err := _IERC20Bridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the IERC20Bridge contract. +type IERC20BridgeOutboxToggleIterator struct { + Event *IERC20BridgeOutboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeOutboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeOutboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeOutboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeOutboxToggle represents a OutboxToggle event raised by the IERC20Bridge contract. +type IERC20BridgeOutboxToggle struct { + Outbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*IERC20BridgeOutboxToggleIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return &IERC20BridgeOutboxToggleIterator{contract: _IERC20Bridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil +} + +// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *IERC20BridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeOutboxToggle) + if err := _IERC20Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseOutboxToggle(log types.Log) (*IERC20BridgeOutboxToggle, error) { + event := new(IERC20BridgeOutboxToggle) + if err := _IERC20Bridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the IERC20Bridge contract. +type IERC20BridgeRollupUpdatedIterator struct { + Event *IERC20BridgeRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeRollupUpdated represents a RollupUpdated event raised by the IERC20Bridge contract. +type IERC20BridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*IERC20BridgeRollupUpdatedIterator, error) { + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &IERC20BridgeRollupUpdatedIterator{contract: _IERC20Bridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *IERC20BridgeRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeRollupUpdated) + if err := _IERC20Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseRollupUpdated(log types.Log) (*IERC20BridgeRollupUpdated, error) { + event := new(IERC20BridgeRollupUpdated) + if err := _IERC20Bridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20BridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the IERC20Bridge contract. +type IERC20BridgeSequencerInboxUpdatedIterator struct { + Event *IERC20BridgeSequencerInboxUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20BridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20BridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20BridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20BridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20BridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the IERC20Bridge contract. +type IERC20BridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IERC20Bridge *IERC20BridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*IERC20BridgeSequencerInboxUpdatedIterator, error) { + + logs, sub, err := _IERC20Bridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return &IERC20BridgeSequencerInboxUpdatedIterator{contract: _IERC20Bridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil +} + +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IERC20Bridge *IERC20BridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *IERC20BridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _IERC20Bridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20BridgeSequencerInboxUpdated) + if err := _IERC20Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IERC20Bridge *IERC20BridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*IERC20BridgeSequencerInboxUpdated, error) { + event := new(IERC20BridgeSequencerInboxUpdated) + if err := _IERC20Bridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20InboxMetaData contains all meta data concerning the IERC20Inbox contract. +var IERC20InboxMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenTotalFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositERC20\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenTotalFeeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IERC20InboxABI is the input ABI used to generate the binding from. +// Deprecated: Use IERC20InboxMetaData.ABI instead. +var IERC20InboxABI = IERC20InboxMetaData.ABI + +// IERC20Inbox is an auto generated Go binding around an Ethereum contract. +type IERC20Inbox struct { + IERC20InboxCaller // Read-only binding to the contract + IERC20InboxTransactor // Write-only binding to the contract + IERC20InboxFilterer // Log filterer for contract events +} + +// IERC20InboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type IERC20InboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20InboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IERC20InboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20InboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IERC20InboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20InboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IERC20InboxSession struct { + Contract *IERC20Inbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20InboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IERC20InboxCallerSession struct { + Contract *IERC20InboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IERC20InboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IERC20InboxTransactorSession struct { + Contract *IERC20InboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20InboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type IERC20InboxRaw struct { + Contract *IERC20Inbox // Generic contract binding to access the raw methods on +} + +// IERC20InboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IERC20InboxCallerRaw struct { + Contract *IERC20InboxCaller // Generic read-only contract binding to access the raw methods on +} + +// IERC20InboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IERC20InboxTransactorRaw struct { + Contract *IERC20InboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIERC20Inbox creates a new instance of IERC20Inbox, bound to a specific deployed contract. +func NewIERC20Inbox(address common.Address, backend bind.ContractBackend) (*IERC20Inbox, error) { + contract, err := bindIERC20Inbox(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IERC20Inbox{IERC20InboxCaller: IERC20InboxCaller{contract: contract}, IERC20InboxTransactor: IERC20InboxTransactor{contract: contract}, IERC20InboxFilterer: IERC20InboxFilterer{contract: contract}}, nil +} + +// NewIERC20InboxCaller creates a new read-only instance of IERC20Inbox, bound to a specific deployed contract. +func NewIERC20InboxCaller(address common.Address, caller bind.ContractCaller) (*IERC20InboxCaller, error) { + contract, err := bindIERC20Inbox(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IERC20InboxCaller{contract: contract}, nil +} + +// NewIERC20InboxTransactor creates a new write-only instance of IERC20Inbox, bound to a specific deployed contract. +func NewIERC20InboxTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20InboxTransactor, error) { + contract, err := bindIERC20Inbox(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IERC20InboxTransactor{contract: contract}, nil +} + +// NewIERC20InboxFilterer creates a new log filterer instance of IERC20Inbox, bound to a specific deployed contract. +func NewIERC20InboxFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20InboxFilterer, error) { + contract, err := bindIERC20Inbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IERC20InboxFilterer{contract: contract}, nil +} + +// bindIERC20Inbox binds a generic wrapper to an already deployed contract. +func bindIERC20Inbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IERC20InboxMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Inbox *IERC20InboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Inbox.Contract.IERC20InboxCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Inbox *IERC20InboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Inbox.Contract.IERC20InboxTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Inbox *IERC20InboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Inbox.Contract.IERC20InboxTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20Inbox *IERC20InboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20Inbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20Inbox *IERC20InboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Inbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20Inbox *IERC20InboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20Inbox.Contract.contract.Transact(opts, method, params...) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IERC20Inbox *IERC20InboxCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "allowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IERC20Inbox *IERC20InboxSession) AllowListEnabled() (bool, error) { + return _IERC20Inbox.Contract.AllowListEnabled(&_IERC20Inbox.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IERC20Inbox *IERC20InboxCallerSession) AllowListEnabled() (bool, error) { + return _IERC20Inbox.Contract.AllowListEnabled(&_IERC20Inbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IERC20Inbox *IERC20InboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IERC20Inbox *IERC20InboxSession) Bridge() (common.Address, error) { + return _IERC20Inbox.Contract.Bridge(&_IERC20Inbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IERC20Inbox *IERC20InboxCallerSession) Bridge() (common.Address, error) { + return _IERC20Inbox.Contract.Bridge(&_IERC20Inbox.CallOpts) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IERC20Inbox *IERC20InboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IERC20Inbox.Contract.CalculateRetryableSubmissionFee(&_IERC20Inbox.CallOpts, dataLength, baseFee) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IERC20Inbox *IERC20InboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IERC20Inbox.Contract.CalculateRetryableSubmissionFee(&_IERC20Inbox.CallOpts, dataLength, baseFee) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IERC20Inbox *IERC20InboxCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "getProxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IERC20Inbox *IERC20InboxSession) GetProxyAdmin() (common.Address, error) { + return _IERC20Inbox.Contract.GetProxyAdmin(&_IERC20Inbox.CallOpts) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IERC20Inbox *IERC20InboxCallerSession) GetProxyAdmin() (common.Address, error) { + return _IERC20Inbox.Contract.GetProxyAdmin(&_IERC20Inbox.CallOpts) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IERC20Inbox *IERC20InboxCaller) IsAllowed(opts *bind.CallOpts, user common.Address) (bool, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "isAllowed", user) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IERC20Inbox *IERC20InboxSession) IsAllowed(user common.Address) (bool, error) { + return _IERC20Inbox.Contract.IsAllowed(&_IERC20Inbox.CallOpts, user) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IERC20Inbox *IERC20InboxCallerSession) IsAllowed(user common.Address) (bool, error) { + return _IERC20Inbox.Contract.IsAllowed(&_IERC20Inbox.CallOpts, user) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IERC20Inbox *IERC20InboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "maxDataSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) MaxDataSize() (*big.Int, error) { + return _IERC20Inbox.Contract.MaxDataSize(&_IERC20Inbox.CallOpts) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IERC20Inbox *IERC20InboxCallerSession) MaxDataSize() (*big.Int, error) { + return _IERC20Inbox.Contract.MaxDataSize(&_IERC20Inbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Inbox *IERC20InboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IERC20Inbox.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Inbox *IERC20InboxSession) SequencerInbox() (common.Address, error) { + return _IERC20Inbox.Contract.SequencerInbox(&_IERC20Inbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IERC20Inbox *IERC20InboxCallerSession) SequencerInbox() (common.Address, error) { + return _IERC20Inbox.Contract.SequencerInbox(&_IERC20Inbox.CallOpts) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) CreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "createRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.CreateRetryableTicket(&_IERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x549e8426. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.CreateRetryableTicket(&_IERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) DepositERC20(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "depositERC20", amount) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) DepositERC20(amount *big.Int) (*types.Transaction, error) { + return _IERC20Inbox.Contract.DepositERC20(&_IERC20Inbox.TransactOpts, amount) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0xb79092fd. +// +// Solidity: function depositERC20(uint256 amount) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) DepositERC20(amount *big.Int) (*types.Transaction, error) { + return _IERC20Inbox.Contract.DepositERC20(&_IERC20Inbox.TransactOpts, amount) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IERC20Inbox *IERC20InboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IERC20Inbox *IERC20InboxSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Inbox.Contract.Initialize(&_IERC20Inbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IERC20Inbox *IERC20InboxTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IERC20Inbox.Contract.Initialize(&_IERC20Inbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IERC20Inbox *IERC20InboxTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IERC20Inbox *IERC20InboxSession) Pause() (*types.Transaction, error) { + return _IERC20Inbox.Contract.Pause(&_IERC20Inbox.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IERC20Inbox *IERC20InboxTransactorSession) Pause() (*types.Transaction, error) { + return _IERC20Inbox.Contract.Pause(&_IERC20Inbox.TransactOpts) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendContractTransaction(&_IERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendContractTransaction(&_IERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "sendL2Message", messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendL2Message(&_IERC20Inbox.TransactOpts, messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendL2Message(&_IERC20Inbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendL2MessageFromOrigin(&_IERC20Inbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendL2MessageFromOrigin(&_IERC20Inbox.TransactOpts, messageData) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendUnsignedTransaction(&_IERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SendUnsignedTransaction(&_IERC20Inbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IERC20Inbox *IERC20InboxTransactor) SetAllowList(opts *bind.TransactOpts, user []common.Address, val []bool) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "setAllowList", user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IERC20Inbox *IERC20InboxSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SetAllowList(&_IERC20Inbox.TransactOpts, user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IERC20Inbox *IERC20InboxTransactorSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SetAllowList(&_IERC20Inbox.TransactOpts, user, val) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IERC20Inbox *IERC20InboxTransactor) SetAllowListEnabled(opts *bind.TransactOpts, _allowListEnabled bool) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "setAllowListEnabled", _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IERC20Inbox *IERC20InboxSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SetAllowListEnabled(&_IERC20Inbox.TransactOpts, _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IERC20Inbox *IERC20InboxTransactorSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IERC20Inbox.Contract.SetAllowListEnabled(&_IERC20Inbox.TransactOpts, _allowListEnabled) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IERC20Inbox *IERC20InboxTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IERC20Inbox *IERC20InboxSession) Unpause() (*types.Transaction, error) { + return _IERC20Inbox.Contract.Unpause(&_IERC20Inbox.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IERC20Inbox *IERC20InboxTransactorSession) Unpause() (*types.Transaction, error) { + return _IERC20Inbox.Contract.Unpause(&_IERC20Inbox.TransactOpts) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactor) UnsafeCreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.contract.Transact(opts, "unsafeCreateRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.UnsafeCreateRetryableTicket(&_IERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0xb9b9a688. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, uint256 tokenTotalFeeAmount, bytes data) returns(uint256) +func (_IERC20Inbox *IERC20InboxTransactorSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, tokenTotalFeeAmount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Inbox.Contract.UnsafeCreateRetryableTicket(&_IERC20Inbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, tokenTotalFeeAmount, data) +} + +// IERC20InboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IERC20Inbox contract. +type IERC20InboxInboxMessageDeliveredIterator struct { + Event *IERC20InboxInboxMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20InboxInboxMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20InboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20InboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20InboxInboxMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20InboxInboxMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20InboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the IERC20Inbox contract. +type IERC20InboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IERC20Inbox *IERC20InboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IERC20InboxInboxMessageDeliveredIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IERC20Inbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return &IERC20InboxInboxMessageDeliveredIterator{contract: _IERC20Inbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IERC20Inbox *IERC20InboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IERC20InboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IERC20Inbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20InboxInboxMessageDelivered) + if err := _IERC20Inbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_IERC20Inbox *IERC20InboxFilterer) ParseInboxMessageDelivered(log types.Log) (*IERC20InboxInboxMessageDelivered, error) { + event := new(IERC20InboxInboxMessageDelivered) + if err := _IERC20Inbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20InboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IERC20Inbox contract. +type IERC20InboxInboxMessageDeliveredFromOriginIterator struct { + Event *IERC20InboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20InboxInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20InboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20InboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20InboxInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20InboxInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20InboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IERC20Inbox contract. +type IERC20InboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IERC20Inbox *IERC20InboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IERC20InboxInboxMessageDeliveredFromOriginIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IERC20Inbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return &IERC20InboxInboxMessageDeliveredFromOriginIterator{contract: _IERC20Inbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IERC20Inbox *IERC20InboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IERC20InboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _IERC20Inbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20InboxInboxMessageDeliveredFromOrigin) + if err := _IERC20Inbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_IERC20Inbox *IERC20InboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IERC20InboxInboxMessageDeliveredFromOrigin, error) { + event := new(IERC20InboxInboxMessageDeliveredFromOrigin) + if err := _IERC20Inbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeMetaData contains all meta data concerning the IEthBridge contract. +var IEthBridgeMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgNum\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IEthBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use IEthBridgeMetaData.ABI instead. +var IEthBridgeABI = IEthBridgeMetaData.ABI + +// IEthBridge is an auto generated Go binding around an Ethereum contract. +type IEthBridge struct { + IEthBridgeCaller // Read-only binding to the contract + IEthBridgeTransactor // Write-only binding to the contract + IEthBridgeFilterer // Log filterer for contract events +} + +// IEthBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type IEthBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEthBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IEthBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEthBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IEthBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IEthBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IEthBridgeSession struct { + Contract *IEthBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IEthBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IEthBridgeCallerSession struct { + Contract *IEthBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IEthBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IEthBridgeTransactorSession struct { + Contract *IEthBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IEthBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type IEthBridgeRaw struct { + Contract *IEthBridge // Generic contract binding to access the raw methods on +} + +// IEthBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IEthBridgeCallerRaw struct { + Contract *IEthBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// IEthBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IEthBridgeTransactorRaw struct { + Contract *IEthBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIEthBridge creates a new instance of IEthBridge, bound to a specific deployed contract. +func NewIEthBridge(address common.Address, backend bind.ContractBackend) (*IEthBridge, error) { + contract, err := bindIEthBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IEthBridge{IEthBridgeCaller: IEthBridgeCaller{contract: contract}, IEthBridgeTransactor: IEthBridgeTransactor{contract: contract}, IEthBridgeFilterer: IEthBridgeFilterer{contract: contract}}, nil +} + +// NewIEthBridgeCaller creates a new read-only instance of IEthBridge, bound to a specific deployed contract. +func NewIEthBridgeCaller(address common.Address, caller bind.ContractCaller) (*IEthBridgeCaller, error) { + contract, err := bindIEthBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IEthBridgeCaller{contract: contract}, nil +} + +// NewIEthBridgeTransactor creates a new write-only instance of IEthBridge, bound to a specific deployed contract. +func NewIEthBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*IEthBridgeTransactor, error) { + contract, err := bindIEthBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IEthBridgeTransactor{contract: contract}, nil +} + +// NewIEthBridgeFilterer creates a new log filterer instance of IEthBridge, bound to a specific deployed contract. +func NewIEthBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*IEthBridgeFilterer, error) { + contract, err := bindIEthBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IEthBridgeFilterer{contract: contract}, nil +} + +// bindIEthBridge binds a generic wrapper to an already deployed contract. +func bindIEthBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IEthBridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IEthBridge *IEthBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEthBridge.Contract.IEthBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IEthBridge *IEthBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEthBridge.Contract.IEthBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEthBridge *IEthBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEthBridge.Contract.IEthBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IEthBridge *IEthBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IEthBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IEthBridge *IEthBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IEthBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IEthBridge *IEthBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IEthBridge.Contract.contract.Transact(opts, method, params...) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IEthBridge *IEthBridgeCaller) ActiveOutbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "activeOutbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IEthBridge *IEthBridgeSession) ActiveOutbox() (common.Address, error) { + return _IEthBridge.Contract.ActiveOutbox(&_IEthBridge.CallOpts) +} + +// ActiveOutbox is a free data retrieval call binding the contract method 0xab5d8943. +// +// Solidity: function activeOutbox() view returns(address) +func (_IEthBridge *IEthBridgeCallerSession) ActiveOutbox() (common.Address, error) { + return _IEthBridge.Contract.ActiveOutbox(&_IEthBridge.CallOpts) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IEthBridge *IEthBridgeCaller) AllowedDelayedInboxes(opts *bind.CallOpts, inbox common.Address) (bool, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "allowedDelayedInboxes", inbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IEthBridge *IEthBridgeSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IEthBridge.Contract.AllowedDelayedInboxes(&_IEthBridge.CallOpts, inbox) +} + +// AllowedDelayedInboxes is a free data retrieval call binding the contract method 0xae60bd13. +// +// Solidity: function allowedDelayedInboxes(address inbox) view returns(bool) +func (_IEthBridge *IEthBridgeCallerSession) AllowedDelayedInboxes(inbox common.Address) (bool, error) { + return _IEthBridge.Contract.AllowedDelayedInboxes(&_IEthBridge.CallOpts, inbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IEthBridge *IEthBridgeCaller) AllowedOutboxes(opts *bind.CallOpts, outbox common.Address) (bool, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "allowedOutboxes", outbox) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IEthBridge *IEthBridgeSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IEthBridge.Contract.AllowedOutboxes(&_IEthBridge.CallOpts, outbox) +} + +// AllowedOutboxes is a free data retrieval call binding the contract method 0x413b35bd. +// +// Solidity: function allowedOutboxes(address outbox) view returns(bool) +func (_IEthBridge *IEthBridgeCallerSession) AllowedOutboxes(outbox common.Address) (bool, error) { + return _IEthBridge.Contract.AllowedOutboxes(&_IEthBridge.CallOpts, outbox) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeCaller) DelayedInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "delayedInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IEthBridge.Contract.DelayedInboxAccs(&_IEthBridge.CallOpts, arg0) +} + +// DelayedInboxAccs is a free data retrieval call binding the contract method 0xd5719dc2. +// +// Solidity: function delayedInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeCallerSession) DelayedInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IEthBridge.Contract.DelayedInboxAccs(&_IEthBridge.CallOpts, arg0) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCaller) DelayedMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "delayedMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeSession) DelayedMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.DelayedMessageCount(&_IEthBridge.CallOpts) +} + +// DelayedMessageCount is a free data retrieval call binding the contract method 0xeca067ad. +// +// Solidity: function delayedMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCallerSession) DelayedMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.DelayedMessageCount(&_IEthBridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IEthBridge *IEthBridgeCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IEthBridge *IEthBridgeSession) Rollup() (common.Address, error) { + return _IEthBridge.Contract.Rollup(&_IEthBridge.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_IEthBridge *IEthBridgeCallerSession) Rollup() (common.Address, error) { + return _IEthBridge.Contract.Rollup(&_IEthBridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IEthBridge *IEthBridgeCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IEthBridge *IEthBridgeSession) SequencerInbox() (common.Address, error) { + return _IEthBridge.Contract.SequencerInbox(&_IEthBridge.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IEthBridge *IEthBridgeCallerSession) SequencerInbox() (common.Address, error) { + return _IEthBridge.Contract.SequencerInbox(&_IEthBridge.CallOpts) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeCaller) SequencerInboxAccs(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "sequencerInboxAccs", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IEthBridge.Contract.SequencerInboxAccs(&_IEthBridge.CallOpts, arg0) +} + +// SequencerInboxAccs is a free data retrieval call binding the contract method 0x16bf5579. +// +// Solidity: function sequencerInboxAccs(uint256 ) view returns(bytes32) +func (_IEthBridge *IEthBridgeCallerSession) SequencerInboxAccs(arg0 *big.Int) ([32]byte, error) { + return _IEthBridge.Contract.SequencerInboxAccs(&_IEthBridge.CallOpts, arg0) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCaller) SequencerMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "sequencerMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeSession) SequencerMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.SequencerMessageCount(&_IEthBridge.CallOpts) +} + +// SequencerMessageCount is a free data retrieval call binding the contract method 0x0084120c. +// +// Solidity: function sequencerMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCallerSession) SequencerMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.SequencerMessageCount(&_IEthBridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCaller) SequencerReportedSubMessageCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IEthBridge.contract.Call(opts, &out, "sequencerReportedSubMessageCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.SequencerReportedSubMessageCount(&_IEthBridge.CallOpts) +} + +// SequencerReportedSubMessageCount is a free data retrieval call binding the contract method 0x5fca4a16. +// +// Solidity: function sequencerReportedSubMessageCount() view returns(uint256) +func (_IEthBridge *IEthBridgeCallerSession) SequencerReportedSubMessageCount() (*big.Int, error) { + return _IEthBridge.Contract.SequencerReportedSubMessageCount(&_IEthBridge.CallOpts) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeTransactor) AllowedDelayedInboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "allowedDelayedInboxList", arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.AllowedDelayedInboxList(&_IEthBridge.TransactOpts, arg0) +} + +// AllowedDelayedInboxList is a paid mutator transaction binding the contract method 0xe76f5c8d. +// +// Solidity: function allowedDelayedInboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeTransactorSession) AllowedDelayedInboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.AllowedDelayedInboxList(&_IEthBridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeTransactor) AllowedOutboxList(opts *bind.TransactOpts, arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "allowedOutboxList", arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.AllowedOutboxList(&_IEthBridge.TransactOpts, arg0) +} + +// AllowedOutboxList is a paid mutator transaction binding the contract method 0x945e1147. +// +// Solidity: function allowedOutboxList(uint256 ) returns(address) +func (_IEthBridge *IEthBridgeTransactorSession) AllowedOutboxList(arg0 *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.AllowedOutboxList(&_IEthBridge.TransactOpts, arg0) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_IEthBridge *IEthBridgeTransactor) EnqueueDelayedMessage(opts *bind.TransactOpts, kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "enqueueDelayedMessage", kind, sender, messageDataHash) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_IEthBridge *IEthBridgeSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.Contract.EnqueueDelayedMessage(&_IEthBridge.TransactOpts, kind, sender, messageDataHash) +} + +// EnqueueDelayedMessage is a paid mutator transaction binding the contract method 0x8db5993b. +// +// Solidity: function enqueueDelayedMessage(uint8 kind, address sender, bytes32 messageDataHash) payable returns(uint256) +func (_IEthBridge *IEthBridgeTransactorSession) EnqueueDelayedMessage(kind uint8, sender common.Address, messageDataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.Contract.EnqueueDelayedMessage(&_IEthBridge.TransactOpts, kind, sender, messageDataHash) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IEthBridge *IEthBridgeTransactor) EnqueueSequencerMessage(opts *bind.TransactOpts, dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "enqueueSequencerMessage", dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IEthBridge *IEthBridgeSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.EnqueueSequencerMessage(&_IEthBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// EnqueueSequencerMessage is a paid mutator transaction binding the contract method 0x86598a56. +// +// Solidity: function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead, uint256 prevMessageCount, uint256 newMessageCount) returns(uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) +func (_IEthBridge *IEthBridgeTransactorSession) EnqueueSequencerMessage(dataHash [32]byte, afterDelayedMessagesRead *big.Int, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _IEthBridge.Contract.EnqueueSequencerMessage(&_IEthBridge.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IEthBridge *IEthBridgeTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "executeCall", to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IEthBridge *IEthBridgeSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IEthBridge.Contract.ExecuteCall(&_IEthBridge.TransactOpts, to, value, data) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. +// +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_IEthBridge *IEthBridgeTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IEthBridge.Contract.ExecuteCall(&_IEthBridge.TransactOpts, to, value, data) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_IEthBridge *IEthBridgeTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "initialize", rollup_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_IEthBridge *IEthBridgeSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.Initialize(&_IEthBridge.TransactOpts, rollup_) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address rollup_) returns() +func (_IEthBridge *IEthBridgeTransactorSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.Initialize(&_IEthBridge.TransactOpts, rollup_) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeTransactor) SetDelayedInbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "setDelayedInbox", inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.Contract.SetDelayedInbox(&_IEthBridge.TransactOpts, inbox, enabled) +} + +// SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. +// +// Solidity: function setDelayedInbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeTransactorSession) SetDelayedInbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.Contract.SetDelayedInbox(&_IEthBridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeTransactor) SetOutbox(opts *bind.TransactOpts, inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "setOutbox", inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.Contract.SetOutbox(&_IEthBridge.TransactOpts, inbox, enabled) +} + +// SetOutbox is a paid mutator transaction binding the contract method 0xcee3d728. +// +// Solidity: function setOutbox(address inbox, bool enabled) returns() +func (_IEthBridge *IEthBridgeTransactorSession) SetOutbox(inbox common.Address, enabled bool) (*types.Transaction, error) { + return _IEthBridge.Contract.SetOutbox(&_IEthBridge.TransactOpts, inbox, enabled) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IEthBridge *IEthBridgeTransactor) SetSequencerInbox(opts *bind.TransactOpts, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "setSequencerInbox", _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IEthBridge *IEthBridgeSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.SetSequencerInbox(&_IEthBridge.TransactOpts, _sequencerInbox) +} + +// SetSequencerInbox is a paid mutator transaction binding the contract method 0x4f61f850. +// +// Solidity: function setSequencerInbox(address _sequencerInbox) returns() +func (_IEthBridge *IEthBridgeTransactorSession) SetSequencerInbox(_sequencerInbox common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.SetSequencerInbox(&_IEthBridge.TransactOpts, _sequencerInbox) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IEthBridge *IEthBridgeTransactor) SubmitBatchSpendingReport(opts *bind.TransactOpts, batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "submitBatchSpendingReport", batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IEthBridge *IEthBridgeSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.Contract.SubmitBatchSpendingReport(&_IEthBridge.TransactOpts, batchPoster, dataHash) +} + +// SubmitBatchSpendingReport is a paid mutator transaction binding the contract method 0x7a88b107. +// +// Solidity: function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) returns(uint256 msgNum) +func (_IEthBridge *IEthBridgeTransactorSession) SubmitBatchSpendingReport(batchPoster common.Address, dataHash [32]byte) (*types.Transaction, error) { + return _IEthBridge.Contract.SubmitBatchSpendingReport(&_IEthBridge.TransactOpts, batchPoster, dataHash) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IEthBridge *IEthBridgeTransactor) UpdateRollupAddress(opts *bind.TransactOpts, _rollup common.Address) (*types.Transaction, error) { + return _IEthBridge.contract.Transact(opts, "updateRollupAddress", _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IEthBridge *IEthBridgeSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.UpdateRollupAddress(&_IEthBridge.TransactOpts, _rollup) +} + +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x919cc706. +// +// Solidity: function updateRollupAddress(address _rollup) returns() +func (_IEthBridge *IEthBridgeTransactorSession) UpdateRollupAddress(_rollup common.Address) (*types.Transaction, error) { + return _IEthBridge.Contract.UpdateRollupAddress(&_IEthBridge.TransactOpts, _rollup) +} + +// IEthBridgeBridgeCallTriggeredIterator is returned from FilterBridgeCallTriggered and is used to iterate over the raw logs and unpacked data for BridgeCallTriggered events raised by the IEthBridge contract. +type IEthBridgeBridgeCallTriggeredIterator struct { + Event *IEthBridgeBridgeCallTriggered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeBridgeCallTriggeredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeBridgeCallTriggered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeBridgeCallTriggeredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeBridgeCallTriggeredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeBridgeCallTriggered represents a BridgeCallTriggered event raised by the IEthBridge contract. +type IEthBridgeBridgeCallTriggered struct { + Outbox common.Address + To common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBridgeCallTriggered is a free log retrieval operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IEthBridge *IEthBridgeFilterer) FilterBridgeCallTriggered(opts *bind.FilterOpts, outbox []common.Address, to []common.Address) (*IEthBridgeBridgeCallTriggeredIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return &IEthBridgeBridgeCallTriggeredIterator{contract: _IEthBridge.contract, event: "BridgeCallTriggered", logs: logs, sub: sub}, nil +} + +// WatchBridgeCallTriggered is a free log subscription operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IEthBridge *IEthBridgeFilterer) WatchBridgeCallTriggered(opts *bind.WatchOpts, sink chan<- *IEthBridgeBridgeCallTriggered, outbox []common.Address, to []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "BridgeCallTriggered", outboxRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeBridgeCallTriggered) + if err := _IEthBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseBridgeCallTriggered is a log parse operation binding the contract event 0x2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466. +// +// Solidity: event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data) +func (_IEthBridge *IEthBridgeFilterer) ParseBridgeCallTriggered(log types.Log) (*IEthBridgeBridgeCallTriggered, error) { + event := new(IEthBridgeBridgeCallTriggered) + if err := _IEthBridge.contract.UnpackLog(event, "BridgeCallTriggered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeInboxToggleIterator is returned from FilterInboxToggle and is used to iterate over the raw logs and unpacked data for InboxToggle events raised by the IEthBridge contract. +type IEthBridgeInboxToggleIterator struct { + Event *IEthBridgeInboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeInboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeInboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeInboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeInboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeInboxToggle represents a InboxToggle event raised by the IEthBridge contract. +type IEthBridgeInboxToggle struct { + Inbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxToggle is a free log retrieval operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) FilterInboxToggle(opts *bind.FilterOpts, inbox []common.Address) (*IEthBridgeInboxToggleIterator, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return &IEthBridgeInboxToggleIterator{contract: _IEthBridge.contract, event: "InboxToggle", logs: logs, sub: sub}, nil +} + +// WatchInboxToggle is a free log subscription operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) WatchInboxToggle(opts *bind.WatchOpts, sink chan<- *IEthBridgeInboxToggle, inbox []common.Address) (event.Subscription, error) { + + var inboxRule []interface{} + for _, inboxItem := range inbox { + inboxRule = append(inboxRule, inboxItem) + } + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "InboxToggle", inboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeInboxToggle) + if err := _IEthBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxToggle is a log parse operation binding the contract event 0x6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521. +// +// Solidity: event InboxToggle(address indexed inbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) ParseInboxToggle(log types.Log) (*IEthBridgeInboxToggle, error) { + event := new(IEthBridgeInboxToggle) + if err := _IEthBridge.contract.UnpackLog(event, "InboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeMessageDeliveredIterator is returned from FilterMessageDelivered and is used to iterate over the raw logs and unpacked data for MessageDelivered events raised by the IEthBridge contract. +type IEthBridgeMessageDeliveredIterator struct { + Event *IEthBridgeMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeMessageDelivered represents a MessageDelivered event raised by the IEthBridge contract. +type IEthBridgeMessageDelivered struct { + MessageIndex *big.Int + BeforeInboxAcc [32]byte + Inbox common.Address + Kind uint8 + Sender common.Address + MessageDataHash [32]byte + BaseFeeL1 *big.Int + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessageDelivered is a free log retrieval operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IEthBridge *IEthBridgeFilterer) FilterMessageDelivered(opts *bind.FilterOpts, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (*IEthBridgeMessageDeliveredIterator, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return &IEthBridgeMessageDeliveredIterator{contract: _IEthBridge.contract, event: "MessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchMessageDelivered is a free log subscription operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IEthBridge *IEthBridgeFilterer) WatchMessageDelivered(opts *bind.WatchOpts, sink chan<- *IEthBridgeMessageDelivered, messageIndex []*big.Int, beforeInboxAcc [][32]byte) (event.Subscription, error) { + + var messageIndexRule []interface{} + for _, messageIndexItem := range messageIndex { + messageIndexRule = append(messageIndexRule, messageIndexItem) + } + var beforeInboxAccRule []interface{} + for _, beforeInboxAccItem := range beforeInboxAcc { + beforeInboxAccRule = append(beforeInboxAccRule, beforeInboxAccItem) + } + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "MessageDelivered", messageIndexRule, beforeInboxAccRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeMessageDelivered) + if err := _IEthBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMessageDelivered is a log parse operation binding the contract event 0x5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1. +// +// Solidity: event MessageDelivered(uint256 indexed messageIndex, bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp) +func (_IEthBridge *IEthBridgeFilterer) ParseMessageDelivered(log types.Log) (*IEthBridgeMessageDelivered, error) { + event := new(IEthBridgeMessageDelivered) + if err := _IEthBridge.contract.UnpackLog(event, "MessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeOutboxToggleIterator is returned from FilterOutboxToggle and is used to iterate over the raw logs and unpacked data for OutboxToggle events raised by the IEthBridge contract. +type IEthBridgeOutboxToggleIterator struct { + Event *IEthBridgeOutboxToggle // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeOutboxToggleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeOutboxToggle) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeOutboxToggleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeOutboxToggleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeOutboxToggle represents a OutboxToggle event raised by the IEthBridge contract. +type IEthBridgeOutboxToggle struct { + Outbox common.Address + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutboxToggle is a free log retrieval operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) FilterOutboxToggle(opts *bind.FilterOpts, outbox []common.Address) (*IEthBridgeOutboxToggleIterator, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return &IEthBridgeOutboxToggleIterator{contract: _IEthBridge.contract, event: "OutboxToggle", logs: logs, sub: sub}, nil +} + +// WatchOutboxToggle is a free log subscription operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) WatchOutboxToggle(opts *bind.WatchOpts, sink chan<- *IEthBridgeOutboxToggle, outbox []common.Address) (event.Subscription, error) { + + var outboxRule []interface{} + for _, outboxItem := range outbox { + outboxRule = append(outboxRule, outboxItem) + } + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "OutboxToggle", outboxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeOutboxToggle) + if err := _IEthBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOutboxToggle is a log parse operation binding the contract event 0x49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa. +// +// Solidity: event OutboxToggle(address indexed outbox, bool enabled) +func (_IEthBridge *IEthBridgeFilterer) ParseOutboxToggle(log types.Log) (*IEthBridgeOutboxToggle, error) { + event := new(IEthBridgeOutboxToggle) + if err := _IEthBridge.contract.UnpackLog(event, "OutboxToggle", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the IEthBridge contract. +type IEthBridgeRollupUpdatedIterator struct { + Event *IEthBridgeRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeRollupUpdated represents a RollupUpdated event raised by the IEthBridge contract. +type IEthBridgeRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IEthBridge *IEthBridgeFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*IEthBridgeRollupUpdatedIterator, error) { + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &IEthBridgeRollupUpdatedIterator{contract: _IEthBridge.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IEthBridge *IEthBridgeFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *IEthBridgeRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeRollupUpdated) + if err := _IEthBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_IEthBridge *IEthBridgeFilterer) ParseRollupUpdated(log types.Log) (*IEthBridgeRollupUpdated, error) { + event := new(IEthBridgeRollupUpdated) + if err := _IEthBridge.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IEthBridgeSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the IEthBridge contract. +type IEthBridgeSequencerInboxUpdatedIterator struct { + Event *IEthBridgeSequencerInboxUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IEthBridgeSequencerInboxUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IEthBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IEthBridgeSequencerInboxUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IEthBridgeSequencerInboxUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IEthBridgeSequencerInboxUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IEthBridgeSequencerInboxUpdated represents a SequencerInboxUpdated event raised by the IEthBridge contract. +type IEthBridgeSequencerInboxUpdated struct { + NewSequencerInbox common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSequencerInboxUpdated is a free log retrieval operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IEthBridge *IEthBridgeFilterer) FilterSequencerInboxUpdated(opts *bind.FilterOpts) (*IEthBridgeSequencerInboxUpdatedIterator, error) { + + logs, sub, err := _IEthBridge.contract.FilterLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return &IEthBridgeSequencerInboxUpdatedIterator{contract: _IEthBridge.contract, event: "SequencerInboxUpdated", logs: logs, sub: sub}, nil +} + +// WatchSequencerInboxUpdated is a free log subscription operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IEthBridge *IEthBridgeFilterer) WatchSequencerInboxUpdated(opts *bind.WatchOpts, sink chan<- *IEthBridgeSequencerInboxUpdated) (event.Subscription, error) { + + logs, sub, err := _IEthBridge.contract.WatchLogs(opts, "SequencerInboxUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IEthBridgeSequencerInboxUpdated) + if err := _IEthBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSequencerInboxUpdated is a log parse operation binding the contract event 0x8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a. +// +// Solidity: event SequencerInboxUpdated(address newSequencerInbox) +func (_IEthBridge *IEthBridgeFilterer) ParseSequencerInboxUpdated(log types.Log) (*IEthBridgeSequencerInboxUpdated, error) { + event := new(IEthBridgeSequencerInboxUpdated) + if err := _IEthBridge.contract.UnpackLog(event, "SequencerInboxUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IInboxMetaData contains all meta data concerning the IInbox contract. +var IInboxMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"withdrawTo\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", +} + +// IInboxABI is the input ABI used to generate the binding from. +// Deprecated: Use IInboxMetaData.ABI instead. +var IInboxABI = IInboxMetaData.ABI + +// IInbox is an auto generated Go binding around an Ethereum contract. +type IInbox struct { + IInboxCaller // Read-only binding to the contract + IInboxTransactor // Write-only binding to the contract + IInboxFilterer // Log filterer for contract events +} + +// IInboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type IInboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IInboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IInboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IInboxSession struct { + Contract *IInbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IInboxCallerSession struct { + Contract *IInboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IInboxTransactorSession struct { + Contract *IInboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IInboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type IInboxRaw struct { + Contract *IInbox // Generic contract binding to access the raw methods on +} + +// IInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IInboxCallerRaw struct { + Contract *IInboxCaller // Generic read-only contract binding to access the raw methods on +} + +// IInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IInboxTransactorRaw struct { + Contract *IInboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIInbox creates a new instance of IInbox, bound to a specific deployed contract. +func NewIInbox(address common.Address, backend bind.ContractBackend) (*IInbox, error) { + contract, err := bindIInbox(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IInbox{IInboxCaller: IInboxCaller{contract: contract}, IInboxTransactor: IInboxTransactor{contract: contract}, IInboxFilterer: IInboxFilterer{contract: contract}}, nil +} + +// NewIInboxCaller creates a new read-only instance of IInbox, bound to a specific deployed contract. +func NewIInboxCaller(address common.Address, caller bind.ContractCaller) (*IInboxCaller, error) { + contract, err := bindIInbox(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IInboxCaller{contract: contract}, nil +} + +// NewIInboxTransactor creates a new write-only instance of IInbox, bound to a specific deployed contract. +func NewIInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*IInboxTransactor, error) { + contract, err := bindIInbox(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IInboxTransactor{contract: contract}, nil +} + +// NewIInboxFilterer creates a new log filterer instance of IInbox, bound to a specific deployed contract. +func NewIInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*IInboxFilterer, error) { + contract, err := bindIInbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IInboxFilterer{contract: contract}, nil +} + +// bindIInbox binds a generic wrapper to an already deployed contract. +func bindIInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IInboxMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IInbox *IInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInbox.Contract.IInboxCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IInbox *IInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInbox.Contract.IInboxTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IInbox *IInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInbox.Contract.IInboxTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IInbox *IInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IInbox *IInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IInbox *IInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInbox.Contract.contract.Transact(opts, method, params...) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInbox *IInboxCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "allowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInbox *IInboxSession) AllowListEnabled() (bool, error) { + return _IInbox.Contract.AllowListEnabled(&_IInbox.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInbox *IInboxCallerSession) AllowListEnabled() (bool, error) { + return _IInbox.Contract.AllowListEnabled(&_IInbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IInbox *IInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IInbox *IInboxSession) Bridge() (common.Address, error) { + return _IInbox.Contract.Bridge(&_IInbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_IInbox *IInboxCallerSession) Bridge() (common.Address, error) { + return _IInbox.Contract.Bridge(&_IInbox.CallOpts) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IInbox *IInboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IInbox *IInboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IInbox.Contract.CalculateRetryableSubmissionFee(&_IInbox.CallOpts, dataLength, baseFee) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_IInbox *IInboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IInbox.Contract.CalculateRetryableSubmissionFee(&_IInbox.CallOpts, dataLength, baseFee) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInbox *IInboxCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "getProxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInbox *IInboxSession) GetProxyAdmin() (common.Address, error) { + return _IInbox.Contract.GetProxyAdmin(&_IInbox.CallOpts) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInbox *IInboxCallerSession) GetProxyAdmin() (common.Address, error) { + return _IInbox.Contract.GetProxyAdmin(&_IInbox.CallOpts) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInbox *IInboxCaller) IsAllowed(opts *bind.CallOpts, user common.Address) (bool, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "isAllowed", user) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInbox *IInboxSession) IsAllowed(user common.Address) (bool, error) { + return _IInbox.Contract.IsAllowed(&_IInbox.CallOpts, user) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInbox *IInboxCallerSession) IsAllowed(user common.Address) (bool, error) { + return _IInbox.Contract.IsAllowed(&_IInbox.CallOpts, user) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IInbox *IInboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "maxDataSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IInbox *IInboxSession) MaxDataSize() (*big.Int, error) { + return _IInbox.Contract.MaxDataSize(&_IInbox.CallOpts) +} + +// MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. +// +// Solidity: function maxDataSize() view returns(uint256) +func (_IInbox *IInboxCallerSession) MaxDataSize() (*big.Int, error) { + return _IInbox.Contract.MaxDataSize(&_IInbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IInbox *IInboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IInbox.contract.Call(opts, &out, "sequencerInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IInbox *IInboxSession) SequencerInbox() (common.Address, error) { + return _IInbox.Contract.SequencerInbox(&_IInbox.CallOpts) +} + +// SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. +// +// Solidity: function sequencerInbox() view returns(address) +func (_IInbox *IInboxCallerSession) SequencerInbox() (common.Address, error) { + return _IInbox.Contract.SequencerInbox(&_IInbox.CallOpts) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactor) CreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "createRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.CreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) +} + +// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. +// +// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactorSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.CreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) +} + +// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. +// +// Solidity: function depositEth() payable returns(uint256) +func (_IInbox *IInboxTransactor) DepositEth(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "depositEth") +} + +// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. +// +// Solidity: function depositEth() payable returns(uint256) +func (_IInbox *IInboxSession) DepositEth() (*types.Transaction, error) { + return _IInbox.Contract.DepositEth(&_IInbox.TransactOpts) +} + +// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. +// +// Solidity: function depositEth() payable returns(uint256) +func (_IInbox *IInboxTransactorSession) DepositEth() (*types.Transaction, error) { + return _IInbox.Contract.DepositEth(&_IInbox.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IInbox *IInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IInbox *IInboxSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInbox.Contract.Initialize(&_IInbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _bridge, address _sequencerInbox) returns() +func (_IInbox *IInboxTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInbox.Contract.Initialize(&_IInbox.TransactOpts, _bridge, _sequencerInbox) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IInbox *IInboxTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IInbox *IInboxSession) Pause() (*types.Transaction, error) { + return _IInbox.Contract.Pause(&_IInbox.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_IInbox *IInboxTransactorSession) Pause() (*types.Transaction, error) { + return _IInbox.Contract.Pause(&_IInbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. +// +// Solidity: function postUpgradeInit(address _bridge) returns() +func (_IInbox *IInboxTransactor) PostUpgradeInit(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "postUpgradeInit", _bridge) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. +// +// Solidity: function postUpgradeInit(address _bridge) returns() +func (_IInbox *IInboxSession) PostUpgradeInit(_bridge common.Address) (*types.Transaction, error) { + return _IInbox.Contract.PostUpgradeInit(&_IInbox.TransactOpts, _bridge) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. +// +// Solidity: function postUpgradeInit(address _bridge) returns() +func (_IInbox *IInboxTransactorSession) PostUpgradeInit(_bridge common.Address) (*types.Transaction, error) { + return _IInbox.Contract.PostUpgradeInit(&_IInbox.TransactOpts, _bridge) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. +// +// Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +} + +// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. +// +// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactor) SendL1FundedContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendL1FundedContractTransaction", gasLimit, maxFeePerGas, to, data) +} + +// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. +// +// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxSession) SendL1FundedContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, data) +} + +// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. +// +// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactorSession) SendL1FundedContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, data) +} + +// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. +// +// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactor) SendL1FundedUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendL1FundedUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. +// +// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxSession) SendL1FundedUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. +// +// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactorSession) SendL1FundedUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. +// +// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactor) SendL1FundedUnsignedTransactionToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendL1FundedUnsignedTransactionToFork", gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. +// +// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxSession) SendL1FundedUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. +// +// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactorSession) SendL1FundedUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL1FundedUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IInbox *IInboxTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendL2Message", messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IInbox *IInboxSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL2Message(&_IInbox.TransactOpts, messageData) +} + +// SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. +// +// Solidity: function sendL2Message(bytes messageData) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL2Message(&_IInbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IInbox *IInboxTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IInbox *IInboxSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL2MessageFromOrigin(&_IInbox.TransactOpts, messageData) +} + +// SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. +// +// Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendL2MessageFromOrigin(&_IInbox.TransactOpts, messageData) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. +// +// Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactor) SendUnsignedTransactionToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendUnsignedTransactionToFork", gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxSession) SendUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.SendUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +} + +// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) +func (_IInbox *IInboxTransactor) SendWithdrawEthToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "sendWithdrawEthToFork", gasLimit, maxFeePerGas, nonce, value, withdrawTo) +} + +// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) +func (_IInbox *IInboxSession) SendWithdrawEthToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { + return _IInbox.Contract.SendWithdrawEthToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, value, withdrawTo) +} + +// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) +func (_IInbox *IInboxTransactorSession) SendWithdrawEthToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { + return _IInbox.Contract.SendWithdrawEthToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, value, withdrawTo) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInbox *IInboxTransactor) SetAllowList(opts *bind.TransactOpts, user []common.Address, val []bool) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "setAllowList", user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInbox *IInboxSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IInbox.Contract.SetAllowList(&_IInbox.TransactOpts, user, val) +} + +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInbox *IInboxTransactorSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IInbox.Contract.SetAllowList(&_IInbox.TransactOpts, user, val) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInbox *IInboxTransactor) SetAllowListEnabled(opts *bind.TransactOpts, _allowListEnabled bool) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "setAllowListEnabled", _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInbox *IInboxSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IInbox.Contract.SetAllowListEnabled(&_IInbox.TransactOpts, _allowListEnabled) +} + +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInbox *IInboxTransactorSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IInbox.Contract.SetAllowListEnabled(&_IInbox.TransactOpts, _allowListEnabled) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IInbox *IInboxTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IInbox *IInboxSession) Unpause() (*types.Transaction, error) { + return _IInbox.Contract.Unpause(&_IInbox.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_IInbox *IInboxTransactorSession) Unpause() (*types.Transaction, error) { + return _IInbox.Contract.Unpause(&_IInbox.TransactOpts) } -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_IDelayedMessageProvider *IDelayedMessageProviderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IDelayedMessageProvider.Contract.contract.Transfer(opts) +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactor) UnsafeCreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.contract.Transact(opts, "unsafeCreateRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) } -// Transact invokes the (paid) contract method with params as input values. -func (_IDelayedMessageProvider *IDelayedMessageProviderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IDelayedMessageProvider.Contract.contract.Transact(opts, method, params...) +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.UnsafeCreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) } -// IDelayedMessageProviderInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IDelayedMessageProvider contract. -type IDelayedMessageProviderInboxMessageDeliveredIterator struct { - Event *IDelayedMessageProviderInboxMessageDelivered // Event containing the contract specifics and raw log +// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. +// +// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) +func (_IInbox *IInboxTransactorSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { + return _IInbox.Contract.UnsafeCreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) +} + +// IInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IInbox contract. +type IInboxInboxMessageDeliveredIterator struct { + Event *IInboxInboxMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3290,7 +19503,7 @@ type IDelayedMessageProviderInboxMessageDeliveredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Next() bool { +func (it *IInboxInboxMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3299,7 +19512,7 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IDelayedMessageProviderInboxMessageDelivered) + it.Event = new(IInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3314,7 +19527,7 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IDelayedMessageProviderInboxMessageDelivered) + it.Event = new(IInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3330,19 +19543,19 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Error() error { +func (it *IInboxInboxMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IDelayedMessageProviderInboxMessageDeliveredIterator) Close() error { +func (it *IInboxInboxMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// IDelayedMessageProviderInboxMessageDelivered represents a InboxMessageDelivered event raised by the IDelayedMessageProvider contract. -type IDelayedMessageProviderInboxMessageDelivered struct { +// IInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the IInbox contract. +type IInboxInboxMessageDelivered struct { MessageNum *big.Int Data []byte Raw types.Log // Blockchain specific contextual infos @@ -3351,31 +19564,31 @@ type IDelayedMessageProviderInboxMessageDelivered struct { // FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IDelayedMessageProviderInboxMessageDeliveredIterator, error) { +func (_IInbox *IInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxInboxMessageDeliveredIterator, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IDelayedMessageProvider.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _IInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } - return &IDelayedMessageProviderInboxMessageDeliveredIterator{contract: _IDelayedMessageProvider.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil + return &IInboxInboxMessageDeliveredIterator{contract: _IInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil } // WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IDelayedMessageProviderInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { +func (_IInbox *IInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IDelayedMessageProvider.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _IInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } @@ -3385,8 +19598,8 @@ func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IDelayedMessageProviderInboxMessageDelivered) - if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + event := new(IInboxInboxMessageDelivered) + if err := _IInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return err } event.Raw = log @@ -3410,18 +19623,18 @@ func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessa // ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) ParseInboxMessageDelivered(log types.Log) (*IDelayedMessageProviderInboxMessageDelivered, error) { - event := new(IDelayedMessageProviderInboxMessageDelivered) - if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { +func (_IInbox *IInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*IInboxInboxMessageDelivered, error) { + event := new(IInboxInboxMessageDelivered) + if err := _IInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IDelayedMessageProvider contract. -type IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator struct { - Event *IDelayedMessageProviderInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log +// IInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IInbox contract. +type IInboxInboxMessageDeliveredFromOriginIterator struct { + Event *IInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3435,7 +19648,7 @@ type IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Next() bool { +func (it *IInboxInboxMessageDeliveredFromOriginIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3444,7 +19657,7 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Next() if it.done { select { case log := <-it.logs: - it.Event = new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + it.Event = new(IInboxInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3459,7 +19672,7 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Next() // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) + it.Event = new(IInboxInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3475,19 +19688,19 @@ func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Next() } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Error() error { +func (it *IInboxInboxMessageDeliveredFromOriginIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator) Close() error { +func (it *IInboxInboxMessageDeliveredFromOriginIterator) Close() error { it.sub.Unsubscribe() return nil } -// IDelayedMessageProviderInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IDelayedMessageProvider contract. -type IDelayedMessageProviderInboxMessageDeliveredFromOrigin struct { +// IInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IInbox contract. +type IInboxInboxMessageDeliveredFromOrigin struct { MessageNum *big.Int Raw types.Log // Blockchain specific contextual infos } @@ -3495,31 +19708,31 @@ type IDelayedMessageProviderInboxMessageDeliveredFromOrigin struct { // FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator, error) { +func (_IInbox *IInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxInboxMessageDeliveredFromOriginIterator, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IDelayedMessageProvider.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + logs, sub, err := _IInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } - return &IDelayedMessageProviderInboxMessageDeliveredFromOriginIterator{contract: _IDelayedMessageProvider.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil + return &IInboxInboxMessageDeliveredFromOriginIterator{contract: _IInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil } // WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IDelayedMessageProviderInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { +func (_IInbox *IInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IDelayedMessageProvider.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + logs, sub, err := _IInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } @@ -3529,8 +19742,8 @@ func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) - if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + event := new(IInboxInboxMessageDeliveredFromOrigin) + if err := _IInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return err } event.Raw = log @@ -3554,122 +19767,122 @@ func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) WatchInboxMessa // ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IDelayedMessageProvider *IDelayedMessageProviderFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IDelayedMessageProviderInboxMessageDeliveredFromOrigin, error) { - event := new(IDelayedMessageProviderInboxMessageDeliveredFromOrigin) - if err := _IDelayedMessageProvider.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { +func (_IInbox *IInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IInboxInboxMessageDeliveredFromOrigin, error) { + event := new(IInboxInboxMessageDeliveredFromOrigin) + if err := _IInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IInboxMetaData contains all meta data concerning the IInbox contract. -var IInboxMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"withdrawTo\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", +// IInboxBaseMetaData contains all meta data concerning the IInboxBase contract. +var IInboxBaseMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } -// IInboxABI is the input ABI used to generate the binding from. -// Deprecated: Use IInboxMetaData.ABI instead. -var IInboxABI = IInboxMetaData.ABI +// IInboxBaseABI is the input ABI used to generate the binding from. +// Deprecated: Use IInboxBaseMetaData.ABI instead. +var IInboxBaseABI = IInboxBaseMetaData.ABI -// IInbox is an auto generated Go binding around an Ethereum contract. -type IInbox struct { - IInboxCaller // Read-only binding to the contract - IInboxTransactor // Write-only binding to the contract - IInboxFilterer // Log filterer for contract events +// IInboxBase is an auto generated Go binding around an Ethereum contract. +type IInboxBase struct { + IInboxBaseCaller // Read-only binding to the contract + IInboxBaseTransactor // Write-only binding to the contract + IInboxBaseFilterer // Log filterer for contract events } -// IInboxCaller is an auto generated read-only Go binding around an Ethereum contract. -type IInboxCaller struct { +// IInboxBaseCaller is an auto generated read-only Go binding around an Ethereum contract. +type IInboxBaseCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. -type IInboxTransactor struct { +// IInboxBaseTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IInboxBaseTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type IInboxFilterer struct { +// IInboxBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IInboxBaseFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// IInboxSession is an auto generated Go binding around an Ethereum contract, +// IInboxBaseSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type IInboxSession struct { - Contract *IInbox // Generic contract binding to set the session for +type IInboxBaseSession struct { + Contract *IInboxBase // Generic contract binding to set the session for CallOpts bind.CallOpts // Call options to use throughout this session TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// IInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// IInboxBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type IInboxCallerSession struct { - Contract *IInboxCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type IInboxBaseCallerSession struct { + Contract *IInboxBaseCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// IInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// IInboxBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type IInboxTransactorSession struct { - Contract *IInboxTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type IInboxBaseTransactorSession struct { + Contract *IInboxBaseTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// IInboxRaw is an auto generated low-level Go binding around an Ethereum contract. -type IInboxRaw struct { - Contract *IInbox // Generic contract binding to access the raw methods on +// IInboxBaseRaw is an auto generated low-level Go binding around an Ethereum contract. +type IInboxBaseRaw struct { + Contract *IInboxBase // Generic contract binding to access the raw methods on } -// IInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type IInboxCallerRaw struct { - Contract *IInboxCaller // Generic read-only contract binding to access the raw methods on +// IInboxBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IInboxBaseCallerRaw struct { + Contract *IInboxBaseCaller // Generic read-only contract binding to access the raw methods on } -// IInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type IInboxTransactorRaw struct { - Contract *IInboxTransactor // Generic write-only contract binding to access the raw methods on +// IInboxBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IInboxBaseTransactorRaw struct { + Contract *IInboxBaseTransactor // Generic write-only contract binding to access the raw methods on } -// NewIInbox creates a new instance of IInbox, bound to a specific deployed contract. -func NewIInbox(address common.Address, backend bind.ContractBackend) (*IInbox, error) { - contract, err := bindIInbox(address, backend, backend, backend) +// NewIInboxBase creates a new instance of IInboxBase, bound to a specific deployed contract. +func NewIInboxBase(address common.Address, backend bind.ContractBackend) (*IInboxBase, error) { + contract, err := bindIInboxBase(address, backend, backend, backend) if err != nil { return nil, err } - return &IInbox{IInboxCaller: IInboxCaller{contract: contract}, IInboxTransactor: IInboxTransactor{contract: contract}, IInboxFilterer: IInboxFilterer{contract: contract}}, nil + return &IInboxBase{IInboxBaseCaller: IInboxBaseCaller{contract: contract}, IInboxBaseTransactor: IInboxBaseTransactor{contract: contract}, IInboxBaseFilterer: IInboxBaseFilterer{contract: contract}}, nil } -// NewIInboxCaller creates a new read-only instance of IInbox, bound to a specific deployed contract. -func NewIInboxCaller(address common.Address, caller bind.ContractCaller) (*IInboxCaller, error) { - contract, err := bindIInbox(address, caller, nil, nil) +// NewIInboxBaseCaller creates a new read-only instance of IInboxBase, bound to a specific deployed contract. +func NewIInboxBaseCaller(address common.Address, caller bind.ContractCaller) (*IInboxBaseCaller, error) { + contract, err := bindIInboxBase(address, caller, nil, nil) if err != nil { return nil, err } - return &IInboxCaller{contract: contract}, nil + return &IInboxBaseCaller{contract: contract}, nil } -// NewIInboxTransactor creates a new write-only instance of IInbox, bound to a specific deployed contract. -func NewIInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*IInboxTransactor, error) { - contract, err := bindIInbox(address, nil, transactor, nil) +// NewIInboxBaseTransactor creates a new write-only instance of IInboxBase, bound to a specific deployed contract. +func NewIInboxBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*IInboxBaseTransactor, error) { + contract, err := bindIInboxBase(address, nil, transactor, nil) if err != nil { return nil, err } - return &IInboxTransactor{contract: contract}, nil + return &IInboxBaseTransactor{contract: contract}, nil } -// NewIInboxFilterer creates a new log filterer instance of IInbox, bound to a specific deployed contract. -func NewIInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*IInboxFilterer, error) { - contract, err := bindIInbox(address, nil, nil, filterer) +// NewIInboxBaseFilterer creates a new log filterer instance of IInboxBase, bound to a specific deployed contract. +func NewIInboxBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*IInboxBaseFilterer, error) { + contract, err := bindIInboxBase(address, nil, nil, filterer) if err != nil { return nil, err } - return &IInboxFilterer{contract: contract}, nil + return &IInboxBaseFilterer{contract: contract}, nil } -// bindIInbox binds a generic wrapper to an already deployed contract. -func bindIInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := IInboxMetaData.GetAbi() +// bindIInboxBase binds a generic wrapper to an already deployed contract. +func bindIInboxBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IInboxBaseMetaData.GetAbi() if err != nil { return nil, err } @@ -3680,46 +19893,77 @@ func bindIInbox(address common.Address, caller bind.ContractCaller, transactor b // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IInbox *IInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IInbox.Contract.IInboxCaller.contract.Call(opts, result, method, params...) +func (_IInboxBase *IInboxBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInboxBase.Contract.IInboxBaseCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_IInbox *IInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IInbox.Contract.IInboxTransactor.contract.Transfer(opts) +func (_IInboxBase *IInboxBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInboxBase.Contract.IInboxBaseTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_IInbox *IInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IInbox.Contract.IInboxTransactor.contract.Transact(opts, method, params...) +func (_IInboxBase *IInboxBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInboxBase.Contract.IInboxBaseTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_IInbox *IInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _IInbox.Contract.contract.Call(opts, result, method, params...) +func (_IInboxBase *IInboxBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInboxBase.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_IInbox *IInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IInbox.Contract.contract.Transfer(opts) +func (_IInboxBase *IInboxBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInboxBase.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_IInbox *IInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _IInbox.Contract.contract.Transact(opts, method, params...) +func (_IInboxBase *IInboxBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInboxBase.Contract.contract.Transact(opts, method, params...) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInboxBase *IInboxBaseCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _IInboxBase.contract.Call(opts, &out, "allowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInboxBase *IInboxBaseSession) AllowListEnabled() (bool, error) { + return _IInboxBase.Contract.AllowListEnabled(&_IInboxBase.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() view returns(bool) +func (_IInboxBase *IInboxBaseCallerSession) AllowListEnabled() (bool, error) { + return _IInboxBase.Contract.AllowListEnabled(&_IInboxBase.CallOpts) } // Bridge is a free data retrieval call binding the contract method 0xe78cea92. // // Solidity: function bridge() view returns(address) -func (_IInbox *IInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { +func (_IInboxBase *IInboxBaseCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _IInbox.contract.Call(opts, &out, "bridge") + err := _IInboxBase.contract.Call(opts, &out, "bridge") if err != nil { return *new(common.Address), err @@ -3734,23 +19978,23 @@ func (_IInbox *IInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) // Bridge is a free data retrieval call binding the contract method 0xe78cea92. // // Solidity: function bridge() view returns(address) -func (_IInbox *IInboxSession) Bridge() (common.Address, error) { - return _IInbox.Contract.Bridge(&_IInbox.CallOpts) +func (_IInboxBase *IInboxBaseSession) Bridge() (common.Address, error) { + return _IInboxBase.Contract.Bridge(&_IInboxBase.CallOpts) } // Bridge is a free data retrieval call binding the contract method 0xe78cea92. // // Solidity: function bridge() view returns(address) -func (_IInbox *IInboxCallerSession) Bridge() (common.Address, error) { - return _IInbox.Contract.Bridge(&_IInbox.CallOpts) +func (_IInboxBase *IInboxBaseCallerSession) Bridge() (common.Address, error) { + return _IInboxBase.Contract.Bridge(&_IInboxBase.CallOpts) } // CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // // Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_IInbox *IInboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { +func (_IInboxBase *IInboxBaseCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { var out []interface{} - err := _IInbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) + err := _IInboxBase.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) if err != nil { return *new(*big.Int), err @@ -3765,23 +20009,85 @@ func (_IInbox *IInboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts // CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // // Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_IInbox *IInboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { - return _IInbox.Contract.CalculateRetryableSubmissionFee(&_IInbox.CallOpts, dataLength, baseFee) +func (_IInboxBase *IInboxBaseSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IInboxBase.Contract.CalculateRetryableSubmissionFee(&_IInboxBase.CallOpts, dataLength, baseFee) } // CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. // // Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_IInbox *IInboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { - return _IInbox.Contract.CalculateRetryableSubmissionFee(&_IInbox.CallOpts, dataLength, baseFee) +func (_IInboxBase *IInboxBaseCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _IInboxBase.Contract.CalculateRetryableSubmissionFee(&_IInboxBase.CallOpts, dataLength, baseFee) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInboxBase *IInboxBaseCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IInboxBase.contract.Call(opts, &out, "getProxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInboxBase *IInboxBaseSession) GetProxyAdmin() (common.Address, error) { + return _IInboxBase.Contract.GetProxyAdmin(&_IInboxBase.CallOpts) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() view returns(address) +func (_IInboxBase *IInboxBaseCallerSession) GetProxyAdmin() (common.Address, error) { + return _IInboxBase.Contract.GetProxyAdmin(&_IInboxBase.CallOpts) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInboxBase *IInboxBaseCaller) IsAllowed(opts *bind.CallOpts, user common.Address) (bool, error) { + var out []interface{} + err := _IInboxBase.contract.Call(opts, &out, "isAllowed", user) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInboxBase *IInboxBaseSession) IsAllowed(user common.Address) (bool, error) { + return _IInboxBase.Contract.IsAllowed(&_IInboxBase.CallOpts, user) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address user) view returns(bool) +func (_IInboxBase *IInboxBaseCallerSession) IsAllowed(user common.Address) (bool, error) { + return _IInboxBase.Contract.IsAllowed(&_IInboxBase.CallOpts, user) } // MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // // Solidity: function maxDataSize() view returns(uint256) -func (_IInbox *IInboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { +func (_IInboxBase *IInboxBaseCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _IInbox.contract.Call(opts, &out, "maxDataSize") + err := _IInboxBase.contract.Call(opts, &out, "maxDataSize") if err != nil { return *new(*big.Int), err @@ -3796,23 +20102,23 @@ func (_IInbox *IInboxCaller) MaxDataSize(opts *bind.CallOpts) (*big.Int, error) // MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // // Solidity: function maxDataSize() view returns(uint256) -func (_IInbox *IInboxSession) MaxDataSize() (*big.Int, error) { - return _IInbox.Contract.MaxDataSize(&_IInbox.CallOpts) +func (_IInboxBase *IInboxBaseSession) MaxDataSize() (*big.Int, error) { + return _IInboxBase.Contract.MaxDataSize(&_IInboxBase.CallOpts) } // MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // -// Solidity: function maxDataSize() view returns(uint256) -func (_IInbox *IInboxCallerSession) MaxDataSize() (*big.Int, error) { - return _IInbox.Contract.MaxDataSize(&_IInbox.CallOpts) +// Solidity: function maxDataSize() view returns(uint256) +func (_IInboxBase *IInboxBaseCallerSession) MaxDataSize() (*big.Int, error) { + return _IInboxBase.Contract.MaxDataSize(&_IInboxBase.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IInbox *IInboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { +func (_IInboxBase *IInboxBaseCaller) SequencerInbox(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _IInbox.contract.Call(opts, &out, "sequencerInbox") + err := _IInboxBase.contract.Call(opts, &out, "sequencerInbox") if err != nil { return *new(common.Address), err @@ -3827,356 +20133,209 @@ func (_IInbox *IInboxCaller) SequencerInbox(opts *bind.CallOpts) (common.Address // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IInbox *IInboxSession) SequencerInbox() (common.Address, error) { - return _IInbox.Contract.SequencerInbox(&_IInbox.CallOpts) +func (_IInboxBase *IInboxBaseSession) SequencerInbox() (common.Address, error) { + return _IInboxBase.Contract.SequencerInbox(&_IInboxBase.CallOpts) } // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) -func (_IInbox *IInboxCallerSession) SequencerInbox() (common.Address, error) { - return _IInbox.Contract.SequencerInbox(&_IInbox.CallOpts) -} - -// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. -// -// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactor) CreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "createRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) -} - -// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. -// -// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.CreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) -} - -// CreateRetryableTicket is a paid mutator transaction binding the contract method 0x679b6ded. -// -// Solidity: function createRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactorSession) CreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.CreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) -} - -// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. -// -// Solidity: function depositEth() payable returns(uint256) -func (_IInbox *IInboxTransactor) DepositEth(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "depositEth") -} - -// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. -// -// Solidity: function depositEth() payable returns(uint256) -func (_IInbox *IInboxSession) DepositEth() (*types.Transaction, error) { - return _IInbox.Contract.DepositEth(&_IInbox.TransactOpts) -} - -// DepositEth is a paid mutator transaction binding the contract method 0x439370b1. -// -// Solidity: function depositEth() payable returns(uint256) -func (_IInbox *IInboxTransactorSession) DepositEth() (*types.Transaction, error) { - return _IInbox.Contract.DepositEth(&_IInbox.TransactOpts) +func (_IInboxBase *IInboxBaseCallerSession) SequencerInbox() (common.Address, error) { + return _IInboxBase.Contract.SequencerInbox(&_IInboxBase.CallOpts) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address _bridge, address _sequencerInbox) returns() -func (_IInbox *IInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) +func (_IInboxBase *IInboxBaseTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "initialize", _bridge, _sequencerInbox) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address _bridge, address _sequencerInbox) returns() -func (_IInbox *IInboxSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { - return _IInbox.Contract.Initialize(&_IInbox.TransactOpts, _bridge, _sequencerInbox) +func (_IInboxBase *IInboxBaseSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInboxBase.Contract.Initialize(&_IInboxBase.TransactOpts, _bridge, _sequencerInbox) } // Initialize is a paid mutator transaction binding the contract method 0x485cc955. // // Solidity: function initialize(address _bridge, address _sequencerInbox) returns() -func (_IInbox *IInboxTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { - return _IInbox.Contract.Initialize(&_IInbox.TransactOpts, _bridge, _sequencerInbox) +func (_IInboxBase *IInboxBaseTransactorSession) Initialize(_bridge common.Address, _sequencerInbox common.Address) (*types.Transaction, error) { + return _IInboxBase.Contract.Initialize(&_IInboxBase.TransactOpts, _bridge, _sequencerInbox) } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() -func (_IInbox *IInboxTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "pause") +func (_IInboxBase *IInboxBaseTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "pause") } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() -func (_IInbox *IInboxSession) Pause() (*types.Transaction, error) { - return _IInbox.Contract.Pause(&_IInbox.TransactOpts) +func (_IInboxBase *IInboxBaseSession) Pause() (*types.Transaction, error) { + return _IInboxBase.Contract.Pause(&_IInboxBase.TransactOpts) } // Pause is a paid mutator transaction binding the contract method 0x8456cb59. // // Solidity: function pause() returns() -func (_IInbox *IInboxTransactorSession) Pause() (*types.Transaction, error) { - return _IInbox.Contract.Pause(&_IInbox.TransactOpts) -} - -// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. -// -// Solidity: function postUpgradeInit(address _bridge) returns() -func (_IInbox *IInboxTransactor) PostUpgradeInit(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "postUpgradeInit", _bridge) -} - -// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. -// -// Solidity: function postUpgradeInit(address _bridge) returns() -func (_IInbox *IInboxSession) PostUpgradeInit(_bridge common.Address) (*types.Transaction, error) { - return _IInbox.Contract.PostUpgradeInit(&_IInbox.TransactOpts, _bridge) -} - -// PostUpgradeInit is a paid mutator transaction binding the contract method 0xc474d2c5. -// -// Solidity: function postUpgradeInit(address _bridge) returns() -func (_IInbox *IInboxTransactorSession) PostUpgradeInit(_bridge common.Address) (*types.Transaction, error) { - return _IInbox.Contract.PostUpgradeInit(&_IInbox.TransactOpts, _bridge) +func (_IInboxBase *IInboxBaseTransactorSession) Pause() (*types.Transaction, error) { + return _IInboxBase.Contract.Pause(&_IInboxBase.TransactOpts) } // SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // // Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) +func (_IInboxBase *IInboxBaseTransactor) SendContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "sendContractTransaction", gasLimit, maxFeePerGas, to, value, data) } // SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // // Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) +func (_IInboxBase *IInboxBaseSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendContractTransaction(&_IInboxBase.TransactOpts, gasLimit, maxFeePerGas, to, value, data) } // SendContractTransaction is a paid mutator transaction binding the contract method 0x8a631aa6. // // Solidity: function sendContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, value, data) -} - -// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. -// -// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactor) SendL1FundedContractTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendL1FundedContractTransaction", gasLimit, maxFeePerGas, to, data) -} - -// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. -// -// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxSession) SendL1FundedContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, data) -} - -// SendL1FundedContractTransaction is a paid mutator transaction binding the contract method 0x5e916758. -// -// Solidity: function sendL1FundedContractTransaction(uint256 gasLimit, uint256 maxFeePerGas, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactorSession) SendL1FundedContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedContractTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, to, data) -} - -// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. -// -// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactor) SendL1FundedUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendL1FundedUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, data) -} - -// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. -// -// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxSession) SendL1FundedUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) -} - -// SendL1FundedUnsignedTransaction is a paid mutator transaction binding the contract method 0x67ef3ab8. -// -// Solidity: function sendL1FundedUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactorSession) SendL1FundedUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) -} - -// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. -// -// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactor) SendL1FundedUnsignedTransactionToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendL1FundedUnsignedTransactionToFork", gasLimit, maxFeePerGas, nonce, to, data) -} - -// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. -// -// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxSession) SendL1FundedUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) -} - -// SendL1FundedUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0xe6bd12cf. -// -// Solidity: function sendL1FundedUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactorSession) SendL1FundedUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL1FundedUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, data) +func (_IInboxBase *IInboxBaseTransactorSession) SendContractTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendContractTransaction(&_IInboxBase.TransactOpts, gasLimit, maxFeePerGas, to, value, data) } // SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // // Solidity: function sendL2Message(bytes messageData) returns(uint256) -func (_IInbox *IInboxTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendL2Message", messageData) +func (_IInboxBase *IInboxBaseTransactor) SendL2Message(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "sendL2Message", messageData) } // SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // // Solidity: function sendL2Message(bytes messageData) returns(uint256) -func (_IInbox *IInboxSession) SendL2Message(messageData []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL2Message(&_IInbox.TransactOpts, messageData) +func (_IInboxBase *IInboxBaseSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendL2Message(&_IInboxBase.TransactOpts, messageData) } // SendL2Message is a paid mutator transaction binding the contract method 0xb75436bb. // // Solidity: function sendL2Message(bytes messageData) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL2Message(&_IInbox.TransactOpts, messageData) +func (_IInboxBase *IInboxBaseTransactorSession) SendL2Message(messageData []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendL2Message(&_IInboxBase.TransactOpts, messageData) } // SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // // Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) -func (_IInbox *IInboxTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) +func (_IInboxBase *IInboxBaseTransactor) SendL2MessageFromOrigin(opts *bind.TransactOpts, messageData []byte) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "sendL2MessageFromOrigin", messageData) } // SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // // Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) -func (_IInbox *IInboxSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL2MessageFromOrigin(&_IInbox.TransactOpts, messageData) +func (_IInboxBase *IInboxBaseSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendL2MessageFromOrigin(&_IInboxBase.TransactOpts, messageData) } // SendL2MessageFromOrigin is a paid mutator transaction binding the contract method 0x1fe927cf. // // Solidity: function sendL2MessageFromOrigin(bytes messageData) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendL2MessageFromOrigin(&_IInbox.TransactOpts, messageData) +func (_IInboxBase *IInboxBaseTransactorSession) SendL2MessageFromOrigin(messageData []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendL2MessageFromOrigin(&_IInboxBase.TransactOpts, messageData) } // SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // // Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) +func (_IInboxBase *IInboxBaseTransactor) SendUnsignedTransaction(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "sendUnsignedTransaction", gasLimit, maxFeePerGas, nonce, to, value, data) } // SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // // Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +func (_IInboxBase *IInboxBaseSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendUnsignedTransaction(&_IInboxBase.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) } // SendUnsignedTransaction is a paid mutator transaction binding the contract method 0x5075788b. // // Solidity: function sendUnsignedTransaction(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendUnsignedTransaction(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +func (_IInboxBase *IInboxBaseTransactorSession) SendUnsignedTransaction(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _IInboxBase.Contract.SendUnsignedTransaction(&_IInboxBase.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) } -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactor) SendUnsignedTransactionToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendUnsignedTransactionToFork", gasLimit, maxFeePerGas, nonce, to, value, data) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInboxBase *IInboxBaseTransactor) SetAllowList(opts *bind.TransactOpts, user []common.Address, val []bool) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "setAllowList", user, val) } -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxSession) SendUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInboxBase *IInboxBaseSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IInboxBase.Contract.SetAllowList(&_IInboxBase.TransactOpts, user, val) } -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. +// SetAllowList is a paid mutator transaction binding the contract method 0xe3de72a5. // -// Solidity: function sendUnsignedTransactionToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, address to, uint256 value, bytes data) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendUnsignedTransactionToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.SendUnsignedTransactionToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, to, value, data) +// Solidity: function setAllowList(address[] user, bool[] val) returns() +func (_IInboxBase *IInboxBaseTransactorSession) SetAllowList(user []common.Address, val []bool) (*types.Transaction, error) { + return _IInboxBase.Contract.SetAllowList(&_IInboxBase.TransactOpts, user, val) } -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) -func (_IInbox *IInboxTransactor) SendWithdrawEthToFork(opts *bind.TransactOpts, gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "sendWithdrawEthToFork", gasLimit, maxFeePerGas, nonce, value, withdrawTo) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInboxBase *IInboxBaseTransactor) SetAllowListEnabled(opts *bind.TransactOpts, _allowListEnabled bool) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "setAllowListEnabled", _allowListEnabled) } -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) -func (_IInbox *IInboxSession) SendWithdrawEthToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { - return _IInbox.Contract.SendWithdrawEthToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, value, withdrawTo) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInboxBase *IInboxBaseSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IInboxBase.Contract.SetAllowListEnabled(&_IInboxBase.TransactOpts, _allowListEnabled) } -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. +// SetAllowListEnabled is a paid mutator transaction binding the contract method 0xefeadb6d. // -// Solidity: function sendWithdrawEthToFork(uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, uint256 value, address withdrawTo) returns(uint256) -func (_IInbox *IInboxTransactorSession) SendWithdrawEthToFork(gasLimit *big.Int, maxFeePerGas *big.Int, nonce *big.Int, value *big.Int, withdrawTo common.Address) (*types.Transaction, error) { - return _IInbox.Contract.SendWithdrawEthToFork(&_IInbox.TransactOpts, gasLimit, maxFeePerGas, nonce, value, withdrawTo) +// Solidity: function setAllowListEnabled(bool _allowListEnabled) returns() +func (_IInboxBase *IInboxBaseTransactorSession) SetAllowListEnabled(_allowListEnabled bool) (*types.Transaction, error) { + return _IInboxBase.Contract.SetAllowListEnabled(&_IInboxBase.TransactOpts, _allowListEnabled) } // Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // // Solidity: function unpause() returns() -func (_IInbox *IInboxTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "unpause") +func (_IInboxBase *IInboxBaseTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInboxBase.contract.Transact(opts, "unpause") } // Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // // Solidity: function unpause() returns() -func (_IInbox *IInboxSession) Unpause() (*types.Transaction, error) { - return _IInbox.Contract.Unpause(&_IInbox.TransactOpts) +func (_IInboxBase *IInboxBaseSession) Unpause() (*types.Transaction, error) { + return _IInboxBase.Contract.Unpause(&_IInboxBase.TransactOpts) } // Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. // // Solidity: function unpause() returns() -func (_IInbox *IInboxTransactorSession) Unpause() (*types.Transaction, error) { - return _IInbox.Contract.Unpause(&_IInbox.TransactOpts) -} - -// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. -// -// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactor) UnsafeCreateRetryableTicket(opts *bind.TransactOpts, to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.contract.Transact(opts, "unsafeCreateRetryableTicket", to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) -} - -// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. -// -// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.UnsafeCreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) -} - -// UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. -// -// Solidity: function unsafeCreateRetryableTicket(address to, uint256 l2CallValue, uint256 maxSubmissionCost, address excessFeeRefundAddress, address callValueRefundAddress, uint256 gasLimit, uint256 maxFeePerGas, bytes data) payable returns(uint256) -func (_IInbox *IInboxTransactorSession) UnsafeCreateRetryableTicket(to common.Address, l2CallValue *big.Int, maxSubmissionCost *big.Int, excessFeeRefundAddress common.Address, callValueRefundAddress common.Address, gasLimit *big.Int, maxFeePerGas *big.Int, data []byte) (*types.Transaction, error) { - return _IInbox.Contract.UnsafeCreateRetryableTicket(&_IInbox.TransactOpts, to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data) +func (_IInboxBase *IInboxBaseTransactorSession) Unpause() (*types.Transaction, error) { + return _IInboxBase.Contract.Unpause(&_IInboxBase.TransactOpts) } -// IInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IInbox contract. -type IInboxInboxMessageDeliveredIterator struct { - Event *IInboxInboxMessageDelivered // Event containing the contract specifics and raw log +// IInboxBaseInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the IInboxBase contract. +type IInboxBaseInboxMessageDeliveredIterator struct { + Event *IInboxBaseInboxMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4190,7 +20349,7 @@ type IInboxInboxMessageDeliveredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IInboxInboxMessageDeliveredIterator) Next() bool { +func (it *IInboxBaseInboxMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4199,7 +20358,7 @@ func (it *IInboxInboxMessageDeliveredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IInboxInboxMessageDelivered) + it.Event = new(IInboxBaseInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4214,7 +20373,7 @@ func (it *IInboxInboxMessageDeliveredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IInboxInboxMessageDelivered) + it.Event = new(IInboxBaseInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4230,19 +20389,19 @@ func (it *IInboxInboxMessageDeliveredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IInboxInboxMessageDeliveredIterator) Error() error { +func (it *IInboxBaseInboxMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IInboxInboxMessageDeliveredIterator) Close() error { +func (it *IInboxBaseInboxMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// IInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the IInbox contract. -type IInboxInboxMessageDelivered struct { +// IInboxBaseInboxMessageDelivered represents a InboxMessageDelivered event raised by the IInboxBase contract. +type IInboxBaseInboxMessageDelivered struct { MessageNum *big.Int Data []byte Raw types.Log // Blockchain specific contextual infos @@ -4251,31 +20410,31 @@ type IInboxInboxMessageDelivered struct { // FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IInbox *IInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxInboxMessageDeliveredIterator, error) { +func (_IInboxBase *IInboxBaseFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxBaseInboxMessageDeliveredIterator, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _IInboxBase.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } - return &IInboxInboxMessageDeliveredIterator{contract: _IInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil + return &IInboxBaseInboxMessageDeliveredIterator{contract: _IInboxBase.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil } // WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IInbox *IInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { +func (_IInboxBase *IInboxBaseFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *IInboxBaseInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _IInboxBase.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } @@ -4285,8 +20444,8 @@ func (_IInbox *IInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IInboxInboxMessageDelivered) - if err := _IInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + event := new(IInboxBaseInboxMessageDelivered) + if err := _IInboxBase.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return err } event.Raw = log @@ -4310,18 +20469,18 @@ func (_IInbox *IInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, // ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // // Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_IInbox *IInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*IInboxInboxMessageDelivered, error) { - event := new(IInboxInboxMessageDelivered) - if err := _IInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { +func (_IInboxBase *IInboxBaseFilterer) ParseInboxMessageDelivered(log types.Log) (*IInboxBaseInboxMessageDelivered, error) { + event := new(IInboxBaseInboxMessageDelivered) + if err := _IInboxBase.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IInbox contract. -type IInboxInboxMessageDeliveredFromOriginIterator struct { - Event *IInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log +// IInboxBaseInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the IInboxBase contract. +type IInboxBaseInboxMessageDeliveredFromOriginIterator struct { + Event *IInboxBaseInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -4335,7 +20494,7 @@ type IInboxInboxMessageDeliveredFromOriginIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *IInboxInboxMessageDeliveredFromOriginIterator) Next() bool { +func (it *IInboxBaseInboxMessageDeliveredFromOriginIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -4344,7 +20503,7 @@ func (it *IInboxInboxMessageDeliveredFromOriginIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IInboxInboxMessageDeliveredFromOrigin) + it.Event = new(IInboxBaseInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4359,7 +20518,7 @@ func (it *IInboxInboxMessageDeliveredFromOriginIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IInboxInboxMessageDeliveredFromOrigin) + it.Event = new(IInboxBaseInboxMessageDeliveredFromOrigin) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -4375,19 +20534,19 @@ func (it *IInboxInboxMessageDeliveredFromOriginIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IInboxInboxMessageDeliveredFromOriginIterator) Error() error { +func (it *IInboxBaseInboxMessageDeliveredFromOriginIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IInboxInboxMessageDeliveredFromOriginIterator) Close() error { +func (it *IInboxBaseInboxMessageDeliveredFromOriginIterator) Close() error { it.sub.Unsubscribe() return nil } -// IInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IInbox contract. -type IInboxInboxMessageDeliveredFromOrigin struct { +// IInboxBaseInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the IInboxBase contract. +type IInboxBaseInboxMessageDeliveredFromOrigin struct { MessageNum *big.Int Raw types.Log // Blockchain specific contextual infos } @@ -4395,31 +20554,31 @@ type IInboxInboxMessageDeliveredFromOrigin struct { // FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IInbox *IInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxInboxMessageDeliveredFromOriginIterator, error) { +func (_IInboxBase *IInboxBaseFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*IInboxBaseInboxMessageDeliveredFromOriginIterator, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + logs, sub, err := _IInboxBase.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } - return &IInboxInboxMessageDeliveredFromOriginIterator{contract: _IInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil + return &IInboxBaseInboxMessageDeliveredFromOriginIterator{contract: _IInboxBase.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil } // WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IInbox *IInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { +func (_IInboxBase *IInboxBaseFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *IInboxBaseInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { var messageNumRule []interface{} for _, messageNumItem := range messageNum { messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _IInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + logs, sub, err := _IInboxBase.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { return nil, err } @@ -4429,8 +20588,8 @@ func (_IInbox *IInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.W select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IInboxInboxMessageDeliveredFromOrigin) - if err := _IInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + event := new(IInboxBaseInboxMessageDeliveredFromOrigin) + if err := _IInboxBase.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return err } event.Raw = log @@ -4454,9 +20613,9 @@ func (_IInbox *IInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.W // ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // // Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_IInbox *IInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IInboxInboxMessageDeliveredFromOrigin, error) { - event := new(IInboxInboxMessageDeliveredFromOrigin) - if err := _IInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { +func (_IInboxBase *IInboxBaseFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*IInboxBaseInboxMessageDeliveredFromOrigin, error) { + event := new(IInboxBaseInboxMessageDeliveredFromOrigin) + if err := _IInboxBase.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { return nil, err } event.Raw = log @@ -4465,7 +20624,7 @@ func (_IInbox *IInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Lo // IOutboxMetaData contains all meta data concerning the IOutbox contract. var IOutboxMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IOutboxABI is the input ABI used to generate the binding from. @@ -5059,6 +21218,48 @@ func (_IOutbox *IOutboxTransactorSession) ExecuteTransactionSimulation(index *bi return _IOutbox.Contract.ExecuteTransactionSimulation(&_IOutbox.TransactOpts, index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data) } +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_IOutbox *IOutboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _IOutbox.contract.Transact(opts, "initialize", _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_IOutbox *IOutboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _IOutbox.Contract.Initialize(&_IOutbox.TransactOpts, _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_IOutbox *IOutboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _IOutbox.Contract.Initialize(&_IOutbox.TransactOpts, _bridge) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_IOutbox *IOutboxTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IOutbox.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_IOutbox *IOutboxSession) PostUpgradeInit() (*types.Transaction, error) { + return _IOutbox.Contract.PostUpgradeInit(&_IOutbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_IOutbox *IOutboxTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _IOutbox.Contract.PostUpgradeInit(&_IOutbox.TransactOpts) +} + // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // // Solidity: function updateRollupAddress() returns() @@ -5601,7 +21802,7 @@ func (_IOwnable *IOwnableCallerSession) Owner() (common.Address, error) { // ISequencerInboxMetaData contains all meta data concerning the ISequencerInbox contract. var ISequencerInboxMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structISequencerInbox.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumISequencerInbox.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structIBridge.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumIBridge.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BROTLI_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_BLOB_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREE_DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_HEAVY_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromBlobs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchPosterManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBatchPosterManager\",\"type\":\"address\"}],\"name\":\"setBatchPosterManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // ISequencerInboxABI is the input ABI used to generate the binding from. @@ -5750,6 +21951,68 @@ func (_ISequencerInbox *ISequencerInboxTransactorRaw) Transact(opts *bind.Transa return _ISequencerInbox.Contract.contract.Transact(opts, method, params...) } +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCaller) BROTLIMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "BROTLI_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.BROTLIMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCallerSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.BROTLIMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCaller) DASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "DAS_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.DASMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCallerSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.DASMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + // DATAAUTHENTICATEDFLAG is a free data retrieval call binding the contract method 0xe5a358c8. // // Solidity: function DATA_AUTHENTICATED_FLAG() view returns(bytes1) @@ -5781,6 +22044,37 @@ func (_ISequencerInbox *ISequencerInboxCallerSession) DATAAUTHENTICATEDFLAG() ([ return _ISequencerInbox.Contract.DATAAUTHENTICATEDFLAG(&_ISequencerInbox.CallOpts) } +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCaller) DATABLOBHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "DATA_BLOB_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.DATABLOBHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCallerSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.DATABLOBHEADERFLAG(&_ISequencerInbox.CallOpts) +} + // HEADERLENGTH is a free data retrieval call binding the contract method 0x27957a49. // // Solidity: function HEADER_LENGTH() view returns(uint256) @@ -5812,6 +22106,68 @@ func (_ISequencerInbox *ISequencerInboxCallerSession) HEADERLENGTH() (*big.Int, return _ISequencerInbox.Contract.HEADERLENGTH(&_ISequencerInbox.CallOpts) } +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCaller) TREEDASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "TREE_DAS_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.TREEDASMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCallerSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.TREEDASMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCaller) ZEROHEAVYMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "ZERO_HEAVY_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_ISequencerInbox *ISequencerInboxCallerSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _ISequencerInbox.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_ISequencerInbox.CallOpts) +} + // BatchCount is a free data retrieval call binding the contract method 0x06f13056. // // Solidity: function batchCount() view returns(uint256) @@ -5843,6 +22199,37 @@ func (_ISequencerInbox *ISequencerInboxCallerSession) BatchCount() (*big.Int, er return _ISequencerInbox.Contract.BatchCount(&_ISequencerInbox.CallOpts) } +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_ISequencerInbox *ISequencerInboxCaller) BatchPosterManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ISequencerInbox.contract.Call(opts, &out, "batchPosterManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_ISequencerInbox *ISequencerInboxSession) BatchPosterManager() (common.Address, error) { + return _ISequencerInbox.Contract.BatchPosterManager(&_ISequencerInbox.CallOpts) +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_ISequencerInbox *ISequencerInboxCallerSession) BatchPosterManager() (common.Address, error) { + return _ISequencerInbox.Contract.BatchPosterManager(&_ISequencerInbox.CallOpts) +} + // Bridge is a free data retrieval call binding the contract method 0xe78cea92. // // Solidity: function bridge() view returns(address) @@ -6094,35 +22481,56 @@ func (_ISequencerInbox *ISequencerInboxCallerSession) MaxDataSize() (*big.Int, e // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) -func (_ISequencerInbox *ISequencerInboxCaller) MaxTimeVariation(opts *bind.CallOpts) (*big.Int, *big.Int, *big.Int, *big.Int, error) { +// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) +func (_ISequencerInbox *ISequencerInboxCaller) MaxTimeVariation(opts *bind.CallOpts) (struct { + DelayBlocks *big.Int + FutureBlocks *big.Int + DelaySeconds *big.Int + FutureSeconds *big.Int +}, error) { var out []interface{} err := _ISequencerInbox.contract.Call(opts, &out, "maxTimeVariation") + outstruct := new(struct { + DelayBlocks *big.Int + FutureBlocks *big.Int + DelaySeconds *big.Int + FutureSeconds *big.Int + }) if err != nil { - return *new(*big.Int), *new(*big.Int), *new(*big.Int), *new(*big.Int), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.DelayBlocks = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.FutureBlocks = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.DelaySeconds = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.FutureSeconds = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - return out0, out1, out2, out3, err + return *outstruct, err } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) -func (_ISequencerInbox *ISequencerInboxSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { +// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) +func (_ISequencerInbox *ISequencerInboxSession) MaxTimeVariation() (struct { + DelayBlocks *big.Int + FutureBlocks *big.Int + DelaySeconds *big.Int + FutureSeconds *big.Int +}, error) { return _ISequencerInbox.Contract.MaxTimeVariation(&_ISequencerInbox.CallOpts) } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) -func (_ISequencerInbox *ISequencerInboxCallerSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { +// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) +func (_ISequencerInbox *ISequencerInboxCallerSession) MaxTimeVariation() (struct { + DelayBlocks *big.Int + FutureBlocks *big.Int + DelaySeconds *big.Int + FutureSeconds *big.Int +}, error) { return _ISequencerInbox.Contract.MaxTimeVariation(&_ISequencerInbox.CallOpts) } @@ -6209,6 +22617,27 @@ func (_ISequencerInbox *ISequencerInboxTransactorSession) AddSequencerL2Batch(se return _ISequencerInbox.Contract.AddSequencerL2Batch(&_ISequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. +// +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxTransactor) AddSequencerL2BatchFromBlobs(opts *bind.TransactOpts, sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.contract.Transact(opts, "addSequencerL2BatchFromBlobs", sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. +// +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.Contract.AddSequencerL2BatchFromBlobs(&_ISequencerInbox.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. +// +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxTransactorSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.Contract.AddSequencerL2BatchFromBlobs(&_ISequencerInbox.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + // AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. // // Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() @@ -6230,6 +22659,27 @@ func (_ISequencerInbox *ISequencerInboxTransactorSession) AddSequencerL2BatchFro return _ISequencerInbox.Contract.AddSequencerL2BatchFromOrigin(&_ISequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) } +// AddSequencerL2BatchFromOrigin0 is a paid mutator transaction binding the contract method 0x8f111f3c. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxTransactor) AddSequencerL2BatchFromOrigin0(opts *bind.TransactOpts, sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.contract.Transact(opts, "addSequencerL2BatchFromOrigin0", sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + +// AddSequencerL2BatchFromOrigin0 is a paid mutator transaction binding the contract method 0x8f111f3c. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxSession) AddSequencerL2BatchFromOrigin0(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.Contract.AddSequencerL2BatchFromOrigin0(&_ISequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + +// AddSequencerL2BatchFromOrigin0 is a paid mutator transaction binding the contract method 0x8f111f3c. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_ISequencerInbox *ISequencerInboxTransactorSession) AddSequencerL2BatchFromOrigin0(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _ISequencerInbox.Contract.AddSequencerL2BatchFromOrigin0(&_ISequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) +} + // ForceInclusion is a paid mutator transaction binding the contract method 0xf1981578. // // Solidity: function forceInclusion(uint256 _totalDelayedMessagesRead, uint8 kind, uint64[2] l1BlockAndTime, uint256 baseFeeL1, address sender, bytes32 messageDataHash) returns() @@ -6314,6 +22764,27 @@ func (_ISequencerInbox *ISequencerInboxTransactorSession) RemoveDelayAfterFork() return _ISequencerInbox.Contract.RemoveDelayAfterFork(&_ISequencerInbox.TransactOpts) } +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_ISequencerInbox *ISequencerInboxTransactor) SetBatchPosterManager(opts *bind.TransactOpts, newBatchPosterManager common.Address) (*types.Transaction, error) { + return _ISequencerInbox.contract.Transact(opts, "setBatchPosterManager", newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_ISequencerInbox *ISequencerInboxSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _ISequencerInbox.Contract.SetBatchPosterManager(&_ISequencerInbox.TransactOpts, newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_ISequencerInbox *ISequencerInboxTransactorSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _ISequencerInbox.Contract.SetBatchPosterManager(&_ISequencerInbox.TransactOpts, newBatchPosterManager) +} + // SetIsBatchPoster is a paid mutator transaction binding the contract method 0x6e7df3e7. // // Solidity: function setIsBatchPoster(address addr, bool isBatchPoster_) returns() @@ -7215,7 +23686,7 @@ type ISequencerInboxSequencerBatchDelivered struct { AfterAcc [32]byte DelayedAcc [32]byte AfterDelayedMessagesRead *big.Int - TimeBounds ISequencerInboxTimeBounds + TimeBounds IBridgeTimeBounds DataLocation uint8 Raw types.Log // Blockchain specific contextual infos } @@ -7454,8 +23925,8 @@ func (_ISequencerInbox *ISequencerInboxFilterer) ParseSetValidKeyset(log types.L // InboxMetaData contains all meta data concerning the Inbox contract. var InboxMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDataSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientSubmissionCost\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1Forked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"}],\"name\":\"NotAllowedOrigin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RetryableData\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"AllowListAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"AllowListEnabledUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicketNoRefundAliasRewrite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"withdrawTo\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60e0604052306080524660c05234801561001857600080fd5b5060405162002a9938038062002a9983398101604081905261003991610041565b60a05261005a565b60006020828403121561005357600080fd5b5051919050565b60805160a05160c0516129d0620000c96000396000818161053c01528181610753015281816111f50152818161158f0152611a1601526000818161047f015281816107cb0152818161082001528181611d380152611d91015260008181610b83015261163101526129d06000f3fe6080604052600436106101ab5760003560e01c80636e6e8a6a116100ec578063c474d2c51161008a578063e78cea9211610064578063e78cea9214610435578063e8eb1dc31461046d578063ee35f327146104a1578063efeadb6d146104c157600080fd5b8063c474d2c5146103e2578063e3de72a514610402578063e6bd12cf1461042257600080fd5b80638a631aa6116100c65780638a631aa614610352578063a66b327d14610372578063b75436bb14610392578063babcc539146103b257600080fd5b80636e6e8a6a1461030a57806370665f141461031d5780638456cb591461033d57600080fd5b8063439370b1116101595780635c975abb116101335780635c975abb146102b95780635e916758146102d1578063679b6ded146102e457806367ef3ab8146102f757600080fd5b8063439370b114610271578063485cc955146102795780635075788b1461029957600080fd5b80631fe927cf1161018a5780631fe927cf1461020957806322bd5c1c146102295780633f4ba83a1461025a57600080fd5b8062f72382146101b05780630f4d14e9146101e35780631b871c8d146101f6575b600080fd5b3480156101bc57600080fd5b506101d06101cb366004612126565b6104e1565b6040519081526020015b60405180910390f35b6101d06101f13660046121a3565b610628565b6101d06102043660046121bc565b61068b565b34801561021557600080fd5b506101d0610224366004612261565b6106fd565b34801561023557600080fd5b5060665461024a90600160a01b900460ff1681565b60405190151581526020016101da565b34801561026657600080fd5b5061026f6108a8565b005b6101d06109dd565b34801561028557600080fd5b5061026f6102943660046122a3565b610aaa565b3480156102a557600080fd5b506101d06102b4366004612126565b610cd3565b3480156102c557600080fd5b5060335460ff1661024a565b6101d06102df3660046122dc565b610d7e565b6101d06102f23660046121bc565b610e31565b6101d0610305366004612346565b610f67565b6101d06103183660046121bc565b61101d565b34801561032957600080fd5b506101d06103383660046123b9565b61119f565b34801561034957600080fd5b5061026f611326565b34801561035e57600080fd5b506101d061036d366004612406565b611458565b34801561037e57600080fd5b506101d061038d36600461245b565b611501565b34801561039e57600080fd5b506101d06103ad366004612261565b611539565b3480156103be57600080fd5b5061024a6103cd36600461247d565b60676020526000908152604090205460ff1681565b3480156103ee57600080fd5b5061026f6103fd36600461247d565b611627565b34801561040e57600080fd5b5061026f61041d366004612587565b61173b565b6101d0610430366004612346565b6119c0565b34801561044157600080fd5b50606554610455906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561047957600080fd5b506101d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b50606654610455906001600160a01b031681565b3480156104cd57600080fd5b5061026f6104dc366004612649565b611ae2565b60006104eb611cdf565b606654600160a01b900460ff16801561051457503260009081526067602052604090205460ff16155b1561053957604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f00000000000000000000000000000000000000000000000000000000000000000361057957604051635180dd8360e11b815260040160405180910390fd5b3332146105995760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8811156105c25760405163107c527b60e01b815260040160405180910390fd5b61061c600373111100000000000000000000000000000000111019330160008b8b8b8b6001600160a01b03168b8b8b604051602001610608989796959493929190612664565b604051602081830303815290604052611d34565b98975050505050505050565b6000610632611cdf565b606654600160a01b900460ff16801561065b57503260009081526067602052604090205460ff16155b1561067b57604051630f51ed7160e41b8152326004820152602401610530565b6106836109dd565b90505b919050565b6000610695611cdf565b606654600160a01b900460ff1680156106be57503260009081526067602052604090205460ff16155b156106de57604051630f51ed7160e41b8152326004820152602401610530565b6106ef8a8a8a8a8a8a8a8a8a61101d565b9a9950505050505050505050565b6000610707611cdf565b606654600160a01b900460ff16801561073057503260009081526067602052604090205460ff16155b1561075057604051630f51ed7160e41b8152326004820152602401610530565b467f0000000000000000000000000000000000000000000000000000000000000000146107a9576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332146107c95760405163feb3d07160e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082111561084c576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610530565b600061087160033386866040516108649291906126c6565b6040518091039020611e13565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906126d6565b9050336001600160a01b038216146109d2576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c91906126d6565b9050336001600160a01b038216146109d057604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b6109da611ed9565b50565b60006109e7611cdf565b606654600160a01b900460ff168015610a1057503260009081526067602052604090205460ff16155b15610a3057604051630f51ed7160e41b8152326004820152602401610530565b33803b151580610a405750323314155b15610a5e575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152346034820152610aa490600c903390605401610608565b91505090565b600054610100900460ff1615808015610aca5750600054600160ff909116105b80610ae45750303b158015610ae4575060005460ff166001145b610b565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610530565b6000805460ff191660011790558015610b79576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c175760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610530565b606580546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117909155606680547fffffffffffffffffffffff00000000000000000000000000000000000000000016918416919091179055610c88611f2b565b8015610cce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610cdd611cdf565b606654600160a01b900460ff168015610d0657503260009081526067602052604090205460ff16155b15610d2657604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff881115610d4f5760405163107c527b60e01b815260040160405180910390fd5b61061c60033360008b8b8b8b6001600160a01b03168b8b8b604051602001610608989796959493929190612664565b6000610d88611cdf565b606654600160a01b900460ff168015610db157503260009081526067602052604090205460ff16155b15610dd157604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff861115610dfa5760405163107c527b60e01b815260040160405180910390fd5b610e2760073360018989896001600160a01b0316348a8a60405160200161060897969594939291906126f3565b9695505050505050565b6000610e3b611cdf565b606654600160a01b900460ff168015610e6457503260009081526067602052604090205460ff16155b15610e8457604051630f51ed7160e41b8152326004820152602401610530565b610e8e8486612764565b610e988a8a61277b565b610ea2919061277b565b341015610f0357610eb38486612764565b610ebd8a8a61277b565b610ec7919061277b565b6040517f7040b58c0000000000000000000000000000000000000000000000000000000081526004810191909152346024820152604401610530565b6001600160a01b0387163b15610f2d57731111000000000000000000000000000000001111870196505b6001600160a01b0386163b156106de57731111000000000000000000000000000000001111860195506106ef8a8a8a8a8a8a8a8a8a61101d565b6000610f71611cdf565b606654600160a01b900460ff168015610f9a57503260009081526067602052604090205460ff16155b15610fba57604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff871115610fe35760405163107c527b60e01b815260040160405180910390fd5b61101260073360008a8a8a8a6001600160a01b0316348b8b604051602001610608989796959493929190612664565b979650505050505050565b6000611027611cdf565b606654600160a01b900460ff16801561105057503260009081526067602052604090205460ff16155b1561107057604051630f51ed7160e41b8152326004820152602401610530565b846001148061107f5750836001145b156110cc57338a8a348b8b8b8b8b8b8b6040517f07c266e30000000000000000000000000000000000000000000000000000000081526004016105309b9a9998979695949392919061278e565b67ffffffffffffffff8511156110f55760405163107c527b60e01b815260040160405180910390fd5b60006111018348611501565b905080891015611147576040517ffadf238a00000000000000000000000000000000000000000000000000000000815260048101829052602481018a9052604401610530565b6111906009338d6001600160a01b03168d348e8e6001600160a01b03168e6001600160a01b03168e8e8e8e90508f8f6040516020016106089b9a99989796959493929190612814565b9b9a5050505050505050505050565b60006111a9611cdf565b606654600160a01b900460ff1680156111d257503260009081526067602052604090205460ff16155b156111f257604051630f51ed7160e41b8152326004820152602401610530565b467f00000000000000000000000000000000000000000000000000000000000000000361123257604051635180dd8360e11b815260040160405180910390fd5b3332146112525760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff86111561127b5760405163107c527b60e01b815260040160405180910390fd5b604080516001600160a01b0384166024808301919091528251808303909101815260449091018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e16063000000000000000000000000000000000000000000000000000000001790529151610e279260039233731111000000000000000000000000000000001110190192610608926000928d928d928d926064928e9201612892565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139491906126d6565b9050336001600160a01b03821614611450576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906126d6565b9050336001600160a01b0382161461144e57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b6109da611fb0565b6000611462611cdf565b606654600160a01b900460ff16801561148b57503260009081526067602052604090205460ff16155b156114ab57604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff8711156114d45760405163107c527b60e01b815260040160405180910390fd5b61101260033360018a8a8a6001600160a01b03168a8a8a60405160200161060897969594939291906126f3565b6000811561150f5781611511565b485b61151c846006612764565b6115289061057861277b565b6115329190612764565b9392505050565b6000611543611cdf565b606654600160a01b900460ff16801561156c57503260009081526067602052604090205460ff16155b1561158c57604051630f51ed7160e41b8152326004820152602401610530565b467f0000000000000000000000000000000000000000000000000000000000000000146115e5576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61153260033385858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3492505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116c55760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610530565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610cce576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610530565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a991906126d6565b9050336001600160a01b03821614611865576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f91906126d6565b9050336001600160a01b0382161461186357604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b81518351146118b65760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f494e505554000000000000000000000000000000000000006044820152606401610530565b60005b83518110156119ba578281815181106118d4576118d4612900565b6020026020010151606760008684815181106118f2576118f2612900565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555083818151811061194357611943612900565b60200260200101516001600160a01b03167fd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a84838151811061198757611987612900565b60200260200101516040516119a0911515815260200190565b60405180910390a2806119b281612916565b9150506118b9565b50505050565b60006119ca611cdf565b606654600160a01b900460ff1680156119f357503260009081526067602052604090205460ff16155b15611a1357604051630f51ed7160e41b8152326004820152602401610530565b467f000000000000000000000000000000000000000000000000000000000000000003611a5357604051635180dd8360e11b815260040160405180910390fd5b333214611a735760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff871115611a9c5760405163107c527b60e01b815260040160405180910390fd5b611012600773111100000000000000000000000000000000111019330160008a8a8a8a6001600160a01b0316348b8b604051602001610608989796959493929190612664565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5091906126d6565b9050336001600160a01b03821614611c0c576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc691906126d6565b9050336001600160a01b03821614611c0a57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b606654600160a01b900460ff16151582151503611c6b5760405162461bcd60e51b815260206004820152600b60248201527f414c52454144595f5345540000000000000000000000000000000000000000006044820152606401610530565b60668054831515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb390611cd390841515815260200190565b60405180910390a15050565b60335460ff1615611d325760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610530565b565b60007f000000000000000000000000000000000000000000000000000000000000000082511115611dbd5781516040517f4634691b00000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610530565b6000611dd185858580519060200120611e13565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b84604051611e03919061294e565b60405180910390a2949350505050565b6065546000906001600160a01b0316638db5993b348673111100000000000000000000000000000000111187016040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260ff90921660048301526001600160a01b031660248201526044810186905260640160206040518083038185885af1158015611eac573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ed19190612981565b949350505050565b611ee1611fed565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff16611fa85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610530565b611d3261203f565b611fb8611cdf565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f0e3390565b60335460ff16611d325760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610530565b600054610100900460ff166120bc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610530565b6033805460ff19169055565b6001600160a01b03811681146109da57600080fd5b60008083601f8401126120ef57600080fd5b50813567ffffffffffffffff81111561210757600080fd5b60208301915083602082850101111561211f57600080fd5b9250929050565b600080600080600080600060c0888a03121561214157600080fd5b8735965060208801359550604088013594506060880135612161816120c8565b93506080880135925060a088013567ffffffffffffffff81111561218457600080fd5b6121908a828b016120dd565b989b979a50959850939692959293505050565b6000602082840312156121b557600080fd5b5035919050565b60008060008060008060008060006101008a8c0312156121db57600080fd5b89356121e6816120c8565b985060208a0135975060408a0135965060608a0135612204816120c8565b955060808a0135612214816120c8565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561223e57600080fd5b61224a8c828d016120dd565b915080935050809150509295985092959850929598565b6000806020838503121561227457600080fd5b823567ffffffffffffffff81111561228b57600080fd5b612297858286016120dd565b90969095509350505050565b600080604083850312156122b657600080fd5b82356122c1816120c8565b915060208301356122d1816120c8565b809150509250929050565b6000806000806000608086880312156122f457600080fd5b8535945060208601359350604086013561230d816120c8565b9250606086013567ffffffffffffffff81111561232957600080fd5b612335888289016120dd565b969995985093965092949392505050565b60008060008060008060a0878903121561235f57600080fd5b863595506020870135945060408701359350606087013561237f816120c8565b9250608087013567ffffffffffffffff81111561239b57600080fd5b6123a789828a016120dd565b979a9699509497509295939492505050565b600080600080600060a086880312156123d157600080fd5b8535945060208601359350604086013592506060860135915060808601356123f8816120c8565b809150509295509295909350565b60008060008060008060a0878903121561241f57600080fd5b86359550602087013594506040870135612438816120c8565b935060608701359250608087013567ffffffffffffffff81111561239b57600080fd5b6000806040838503121561246e57600080fd5b50508035926020909101359150565b60006020828403121561248f57600080fd5b8135611532816120c8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124d9576124d961249a565b604052919050565b600067ffffffffffffffff8211156124fb576124fb61249a565b5060051b60200190565b8035801515811461068657600080fd5b600082601f83011261252657600080fd5b8135602061253b612536836124e1565b6124b0565b82815260059290921b8401810191818101908684111561255a57600080fd5b8286015b8481101561257c5761256f81612505565b835291830191830161255e565b509695505050505050565b6000806040838503121561259a57600080fd5b823567ffffffffffffffff808211156125b257600080fd5b818501915085601f8301126125c657600080fd5b813560206125d6612536836124e1565b82815260059290921b840181019181810190898411156125f557600080fd5b948201945b8386101561261c57853561260d816120c8565b825294820194908201906125fa565b9650508601359250508082111561263257600080fd5b5061263f85828601612515565b9150509250929050565b60006020828403121561265b57600080fd5b61153282612505565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b168152876001820152866021820152856041820152846061820152836081820152818360a18301376000910160a101908152979650505050505050565b8183823760009101908152919050565b6000602082840312156126e857600080fd5b8151611532816120c8565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815286600182015285602182015284604182015283606182015281836081830137600091016081019081529695505050505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108a2576108a261274e565b808201808211156108a2576108a261274e565b60006101406001600160a01b03808f168452808e1660208501528c60408501528b60608501528a6080850152808a1660a085015280891660c0850152508660e084015285610100840152806101208401528381840152506101608385828501376000838501820152601f909301601f19169091019091019b9a5050505050505050505050565b8b81528a60208201528960408201528860608201528760808201528660a08201528560c08201528460e08201528361010082015260006101208385828501376000929093019092019081529b9a5050505050505050505050565b60005b83811015612889578181015183820152602001612871565b50506000910152565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b168152866001820152856021820152846041820152836061820152826081820152600082516128ed8160a185016020870161286e565b9190910160a10198975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129475761294761274e565b5060010190565b602081526000825180602084015261296d81604085016020870161286e565b601f01601f19169190910160400192915050565b60006020828403121561299357600080fd5b505191905056fea26469706673582212203fb619d192ddab43b02aa2709fd9cdd03156c9d91b417c53e00eb2ad7f1eb9a264736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDataSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientSubmissionCost\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1Forked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"}],\"name\":\"NotAllowedOrigin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RetryableData\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"AllowListAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"AllowListEnabledUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicketNoRefundAliasRewrite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"withdrawTo\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"user\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"val\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_allowListEnabled\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x60e0604052306080524660c05234801561001857600080fd5b5060405162002bcb38038062002bcb83398101604081905261003991610041565b60a05261005a565b60006020828403121561005357600080fd5b5051919050565b60805160a05160c051612b02620000c9600039600081816105800152818161079901528181610ff901528181611393015261181a0152600081816104c3015281816108110152818161086601528181611b3c0152611b95015260008181610bdc01526114350152612b026000f3fe6080604052600436106101b65760003560e01c806370665f14116100ec578063c474d2c51161008a578063e78cea9211610064578063e78cea9214610491578063e8eb1dc3146104b1578063ee35f327146104e5578063efeadb6d1461050557600080fd5b8063c474d2c51461043e578063e3de72a51461045e578063e6bd12cf1461047e57600080fd5b80638b3240a0116100c65780638b3240a01461037d578063a66b327d146103ce578063b75436bb146103ee578063babcc5391461040e57600080fd5b806370665f14146103285780638456cb59146103485780638a631aa61461035d57600080fd5b8063485cc955116101595780635e916758116101335780635e916758146102dc578063679b6ded146102ef57806367ef3ab8146103025780636e6e8a6a1461031557600080fd5b8063485cc955146102845780635075788b146102a45780635c975abb146102c457600080fd5b80631fe927cf116101955780631fe927cf1461021457806322bd5c1c146102345780633f4ba83a14610265578063439370b11461027c57600080fd5b8062f72382146101bb5780630f4d14e9146101ee5780631b871c8d14610201575b600080fd5b3480156101c757600080fd5b506101db6101d6366004612258565b610525565b6040519081526020015b60405180910390f35b6101db6101fc3660046122d5565b61066e565b6101db61020f3660046122ee565b6106d1565b34801561022057600080fd5b506101db61022f366004612393565b610743565b34801561024057600080fd5b5060665461025590600160a01b900460ff1681565b60405190151581526020016101e5565b34801561027157600080fd5b5061027a6108f0565b005b6101db610a25565b34801561029057600080fd5b5061027a61029f3660046123d5565b610b03565b3480156102b057600080fd5b506101db6102bf366004612258565b610cc5565b3480156102d057600080fd5b5060335460ff16610255565b6101db6102ea36600461240e565b610d70565b6101db6102fd3660046122ee565b610e23565b6101db610310366004612478565b610e88565b6101db6103233660046122ee565b610f3e565b34801561033457600080fd5b506101db6103433660046124eb565b610fa3565b34801561035457600080fd5b5061027a61112a565b34801561036957600080fd5b506101db610378366004612538565b61125c565b34801561038957600080fd5b507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03165b6040516001600160a01b0390911681526020016101e5565b3480156103da57600080fd5b506101db6103e936600461258d565b611305565b3480156103fa57600080fd5b506101db610409366004612393565b61133d565b34801561041a57600080fd5b506102556104293660046125af565b60676020526000908152604090205460ff1681565b34801561044a57600080fd5b5061027a6104593660046125af565b61142b565b34801561046a57600080fd5b5061027a6104793660046126b9565b61153f565b6101db61048c366004612478565b6117c4565b34801561049d57600080fd5b506065546103b6906001600160a01b031681565b3480156104bd57600080fd5b506101db7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f157600080fd5b506066546103b6906001600160a01b031681565b34801561051157600080fd5b5061027a61052036600461277b565b6118e6565b600061052f611ae3565b606654600160a01b900460ff16801561055857503260009081526067602052604090205460ff16155b1561057d57604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f0000000000000000000000000000000000000000000000000000000000000000036105bd57604051635180dd8360e11b815260040160405180910390fd5b3332146105dd5760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8811156106065760405163107c527b60e01b815260040160405180910390fd5b610662600373111100000000000000000000000000000000111019330160008b8b8b8b6001600160a01b03168b8b8b60405160200161064c989796959493929190612796565b6040516020818303038152906040526000611b38565b98975050505050505050565b6000610678611ae3565b606654600160a01b900460ff1680156106a157503260009081526067602052604090205460ff16155b156106c157604051630f51ed7160e41b8152326004820152602401610574565b6106c9610a25565b90505b919050565b60006106db611ae3565b606654600160a01b900460ff16801561070457503260009081526067602052604090205460ff16155b1561072457604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a8a8a610f3e565b9a9950505050505050505050565b600061074d611ae3565b606654600160a01b900460ff16801561077657503260009081526067602052604090205460ff16155b1561079657604051630f51ed7160e41b8152326004820152602401610574565b467f0000000000000000000000000000000000000000000000000000000000000000146107ef576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33321461080f5760405163feb3d07160e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000821115610892576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610574565b60006108b960033386866040516108aa9291906127f8565b60405180910390206000611c19565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa15801561093a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095e9190612808565b9050336001600160a01b03821614610a1a576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190612808565b9050336001600160a01b03821614610a1857604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b610a22611ce0565b50565b6000610a2f611ae3565b606654600160a01b900460ff168015610a5857503260009081526067602052604090205460ff16155b15610a7857604051630f51ed7160e41b8152326004820152602401610574565b33803b151580610a885750323314155b15610aa6575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152346034820152610afd90600c9033906054015b60405160208183030381529060405234611b38565b91505090565b600054610100900460ff1615808015610b235750600054600160ff909116105b80610b3d5750303b158015610b3d575060005460ff166001145b610baf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610574565b6000805460ff191660011790558015610bd2576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c705760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610574565b610c7a8383611d32565b8015610cc0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610ccf611ae3565b606654600160a01b900460ff168015610cf857503260009081526067602052604090205460ff16155b15610d1857604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff881115610d415760405163107c527b60e01b815260040160405180910390fd5b61066260033360008b8b8b8b6001600160a01b03168b8b8b60405160200161064c989796959493929190612796565b6000610d7a611ae3565b606654600160a01b900460ff168015610da357503260009081526067602052604090205460ff16155b15610dc357604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff861115610dec5760405163107c527b60e01b815260040160405180910390fd5b610e1960073360018989896001600160a01b0316348a8a604051602001610ae89796959493929190612825565b9695505050505050565b6000610e2d611ae3565b606654600160a01b900460ff168015610e5657503260009081526067602052604090205460ff16155b15610e7657604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a348b8b611e24565b6000610e92611ae3565b606654600160a01b900460ff168015610ebb57503260009081526067602052604090205460ff16155b15610edb57604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff871115610f045760405163107c527b60e01b815260040160405180910390fd5b610f3360073360008a8a8a8a6001600160a01b0316348b8b604051602001610ae8989796959493929190612796565b979650505050505050565b6000610f48611ae3565b606654600160a01b900460ff168015610f7157503260009081526067602052604090205460ff16155b15610f9157604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a348b8b611f1b565b6000610fad611ae3565b606654600160a01b900460ff168015610fd657503260009081526067602052604090205460ff16155b15610ff657604051630f51ed7160e41b8152326004820152602401610574565b467f00000000000000000000000000000000000000000000000000000000000000000361103657604051635180dd8360e11b815260040160405180910390fd5b3332146110565760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff86111561107f5760405163107c527b60e01b815260040160405180910390fd5b604080516001600160a01b0384166024808301919091528251808303909101815260449091018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e16063000000000000000000000000000000000000000000000000000000001790529151610e19926003923373111100000000000000000000000000000000111019019261064c926000928d928d928d926064928e92016128a4565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111989190612808565b9050336001600160a01b03821614611254576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e9190612808565b9050336001600160a01b0382161461125257604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b610a22612062565b6000611266611ae3565b606654600160a01b900460ff16801561128f57503260009081526067602052604090205460ff16155b156112af57604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff8711156112d85760405163107c527b60e01b815260040160405180910390fd5b610f3360033360018a8a8a6001600160a01b03168a8a8a60405160200161064c9796959493929190612825565b600081156113135781611315565b485b611320846006612928565b61132c9061057861293f565b6113369190612928565b9392505050565b6000611347611ae3565b606654600160a01b900460ff16801561137057503260009081526067602052604090205460ff16155b1561139057604051630f51ed7160e41b8152326004820152602401610574565b467f0000000000000000000000000000000000000000000000000000000000000000146113e9576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61133660033385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b38915050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114c95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610574565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610cc0576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610574565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ad9190612808565b9050336001600160a01b03821614611669576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190612808565b9050336001600160a01b0382161461166757604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b81518351146116ba5760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f494e505554000000000000000000000000000000000000006044820152606401610574565b60005b83518110156117be578281815181106116d8576116d8612952565b6020026020010151606760008684815181106116f6576116f6612952565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555083818151811061174757611747612952565b60200260200101516001600160a01b03167fd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a84838151811061178b5761178b612952565b60200260200101516040516117a4911515815260200190565b60405180910390a2806117b681612968565b9150506116bd565b50505050565b60006117ce611ae3565b606654600160a01b900460ff1680156117f757503260009081526067602052604090205460ff16155b1561181757604051630f51ed7160e41b8152326004820152602401610574565b467f00000000000000000000000000000000000000000000000000000000000000000361185757604051635180dd8360e11b815260040160405180910390fd5b3332146118775760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8711156118a05760405163107c527b60e01b815260040160405180910390fd5b610f33600773111100000000000000000000000000000000111019330160008a8a8a8a6001600160a01b0316348b8b604051602001610ae8989796959493929190612796565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119549190612808565b9050336001600160a01b03821614611a10576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190612808565b9050336001600160a01b03821614611a0e57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b606654600160a01b900460ff16151582151503611a6f5760405162461bcd60e51b815260206004820152600b60248201527f414c52454144595f5345540000000000000000000000000000000000000000006044820152606401610574565b60668054831515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb390611ad790841515815260200190565b60405180910390a15050565b60335460ff1615611b365760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610574565b565b60007f000000000000000000000000000000000000000000000000000000000000000083511115611bc15782516040517f4634691b00000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610574565b6000611bd68686868051906020012086611c19565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b85604051611c0891906129a0565b60405180910390a295945050505050565b6065546000906001600160a01b0316638db5993b838773111100000000000000000000000000000000111188016040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260ff90921660048301526001600160a01b031660248201526044810187905260640160206040518083038185885af1158015611cb2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611cd791906129d3565b95945050505050565b611ce861209f565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff16611daf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b606580546001600160a01b038085167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117909155606680547fffffffffffffffffffffff00000000000000000000000000000000000000000016918316919091179055611e206120f1565b5050565b6000611e308587612928565b611e3a8b8b61293f565b611e44919061293f565b841015611ea657611e558587612928565b611e5f8b8b61293f565b611e69919061293f565b6040517f7040b58c000000000000000000000000000000000000000000000000000000008152600481019190915260248101859052604401610574565b6001600160a01b0388163b15611ed057731111000000000000000000000000000000001111880197505b6001600160a01b0387163b15611efa57731111000000000000000000000000000000001111870196505b611f0c8b8b8b8b8b8b8b8b8b8b611f1b565b9b9a5050505050505050505050565b60008560011480611f2c5750846001145b15611f7957338b8b868c8c8c8c8c8b8b6040517f07c266e30000000000000000000000000000000000000000000000000000000081526004016105749b9a999897969594939291906129ec565b67ffffffffffffffff861115611fa25760405163107c527b60e01b815260040160405180910390fd5b6000611fae8348611305565b9050808a1015611ff4576040517ffadf238a00000000000000000000000000000000000000000000000000000000815260048101829052602481018b9052604401610574565b6120526009338e6001600160a01b03168e898f8f6001600160a01b03168f6001600160a01b03168f8f8e8e90508f8f60405160200161203d9b9a99989796959493929190612a72565b60405160208183030381529060405288611b38565b9c9b505050505050505050505050565b61206a611ae3565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d153390565b60335460ff16611b365760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610574565b600054610100900460ff1661216e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b611b36600054610100900460ff166121ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b6033805460ff19169055565b6001600160a01b0381168114610a2257600080fd5b60008083601f84011261222157600080fd5b50813567ffffffffffffffff81111561223957600080fd5b60208301915083602082850101111561225157600080fd5b9250929050565b600080600080600080600060c0888a03121561227357600080fd5b8735965060208801359550604088013594506060880135612293816121fa565b93506080880135925060a088013567ffffffffffffffff8111156122b657600080fd5b6122c28a828b0161220f565b989b979a50959850939692959293505050565b6000602082840312156122e757600080fd5b5035919050565b60008060008060008060008060006101008a8c03121561230d57600080fd5b8935612318816121fa565b985060208a0135975060408a0135965060608a0135612336816121fa565b955060808a0135612346816121fa565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561237057600080fd5b61237c8c828d0161220f565b915080935050809150509295985092959850929598565b600080602083850312156123a657600080fd5b823567ffffffffffffffff8111156123bd57600080fd5b6123c98582860161220f565b90969095509350505050565b600080604083850312156123e857600080fd5b82356123f3816121fa565b91506020830135612403816121fa565b809150509250929050565b60008060008060006080868803121561242657600080fd5b8535945060208601359350604086013561243f816121fa565b9250606086013567ffffffffffffffff81111561245b57600080fd5b6124678882890161220f565b969995985093965092949392505050565b60008060008060008060a0878903121561249157600080fd5b86359550602087013594506040870135935060608701356124b1816121fa565b9250608087013567ffffffffffffffff8111156124cd57600080fd5b6124d989828a0161220f565b979a9699509497509295939492505050565b600080600080600060a0868803121561250357600080fd5b85359450602086013593506040860135925060608601359150608086013561252a816121fa565b809150509295509295909350565b60008060008060008060a0878903121561255157600080fd5b8635955060208701359450604087013561256a816121fa565b935060608701359250608087013567ffffffffffffffff8111156124cd57600080fd5b600080604083850312156125a057600080fd5b50508035926020909101359150565b6000602082840312156125c157600080fd5b8135611336816121fa565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561260b5761260b6125cc565b604052919050565b600067ffffffffffffffff82111561262d5761262d6125cc565b5060051b60200190565b803580151581146106cc57600080fd5b600082601f83011261265857600080fd5b8135602061266d61266883612613565b6125e2565b82815260059290921b8401810191818101908684111561268c57600080fd5b8286015b848110156126ae576126a181612637565b8352918301918301612690565b509695505050505050565b600080604083850312156126cc57600080fd5b823567ffffffffffffffff808211156126e457600080fd5b818501915085601f8301126126f857600080fd5b8135602061270861266883612613565b82815260059290921b8401810191818101908984111561272757600080fd5b948201945b8386101561274e57853561273f816121fa565b8252948201949082019061272c565b9650508601359250508082111561276457600080fd5b5061277185828601612647565b9150509250929050565b60006020828403121561278d57600080fd5b61133682612637565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b168152876001820152866021820152856041820152846061820152836081820152818360a18301376000910160a101908152979650505050505050565b8183823760009101908152919050565b60006020828403121561281a57600080fd5b8151611336816121fa565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815286600182015285602182015284604182015283606182015281836081830137600091016081019081529695505050505050565b60005b8381101561289b578181015183820152602001612883565b50506000910152565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b168152866001820152856021820152846041820152836061820152826081820152600082516128ff8160a1850160208701612880565b9190910160a10198975050505050505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108ea576108ea612912565b808201808211156108ea576108ea612912565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361299957612999612912565b5060010190565b60208152600082518060208401526129bf816040850160208701612880565b601f01601f19169190910160400192915050565b6000602082840312156129e557600080fd5b5051919050565b60006101406001600160a01b03808f168452808e1660208501528c60408501528b60608501528a6080850152808a1660a085015280891660c0850152508660e084015285610100840152806101208401528381840152506101608385828501376000838501820152601f909301601f19169091019091019b9a5050505050505050505050565b8b81528a60208201528960408201528860608201528760808201528660a08201528560c08201528460e08201528361010082015260006101208385828501376000929093019092019081529b9a505050505050505050505056fea26469706673582212208369d8025b81670bf6b9fdad964a51171204a0c34d68ae3a216ad1b44a598dc864736f6c63430008110033", } // InboxABI is the input ABI used to generate the binding from. @@ -7687,35 +24158,66 @@ func (_Inbox *InboxCallerSession) Bridge() (common.Address, error) { return _Inbox.Contract.Bridge(&_Inbox.CallOpts) } -// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_Inbox *InboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + var out []interface{} + err := _Inbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_Inbox *InboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _Inbox.Contract.CalculateRetryableSubmissionFee(&_Inbox.CallOpts, dataLength, baseFee) +} + +// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// +// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) +func (_Inbox *InboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { + return _Inbox.Contract.CalculateRetryableSubmissionFee(&_Inbox.CallOpts, dataLength, baseFee) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_Inbox *InboxCaller) CalculateRetryableSubmissionFee(opts *bind.CallOpts, dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { +// Solidity: function getProxyAdmin() view returns(address) +func (_Inbox *InboxCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _Inbox.contract.Call(opts, &out, "calculateRetryableSubmissionFee", dataLength, baseFee) + err := _Inbox.contract.Call(opts, &out, "getProxyAdmin") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_Inbox *InboxSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { - return _Inbox.Contract.CalculateRetryableSubmissionFee(&_Inbox.CallOpts, dataLength, baseFee) +// Solidity: function getProxyAdmin() view returns(address) +func (_Inbox *InboxSession) GetProxyAdmin() (common.Address, error) { + return _Inbox.Contract.GetProxyAdmin(&_Inbox.CallOpts) } -// CalculateRetryableSubmissionFee is a free data retrieval call binding the contract method 0xa66b327d. +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. // -// Solidity: function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) view returns(uint256) -func (_Inbox *InboxCallerSession) CalculateRetryableSubmissionFee(dataLength *big.Int, baseFee *big.Int) (*big.Int, error) { - return _Inbox.Contract.CalculateRetryableSubmissionFee(&_Inbox.CallOpts, dataLength, baseFee) +// Solidity: function getProxyAdmin() view returns(address) +func (_Inbox *InboxCallerSession) GetProxyAdmin() (common.Address, error) { + return _Inbox.Contract.GetProxyAdmin(&_Inbox.CallOpts) } // IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. @@ -9235,7 +25737,7 @@ func (_Inbox *InboxFilterer) ParseUnpaused(log types.Log) (*InboxUnpaused, error // MessagesMetaData contains all meta data concerning the Messages contract. var MessagesMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bb427be497f5b76f3003d3528754ab3047e12d8e877d217dd77853d9c24206fd64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ea2a0ad97c8b256e6f2c25cd8570926f8841591672f05951da102a6495a1651764736f6c63430008110033", } // MessagesABI is the input ABI used to generate the binding from. @@ -9407,8 +25909,8 @@ func (_Messages *MessagesTransactorRaw) Transact(opts *bind.TransactOpts, method // OutboxMetaData contains all meta data concerning the Outbox contract. var OutboxMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"NotRollup\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SimulationOnlyEntrypoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516117cd6100376000396000818161043c01526107bf01526117cd6000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638515bc6a116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb51461028e578063d5b5cc23146102a1578063e78cea92146102c157600080fd5b8063c4d66de81461025b578063c75184df1461026e57600080fd5b8063a04cee60116100b2578063a04cee6014610220578063ae6dead714610233578063b0f305371461025357600080fd5b80638515bc6a146102055780639f0c04bf1461020d57600080fd5b806346547790116101245780636ae71f12116101095780636ae71f12146101d557806372f2a8c7146101dd57806380648b02146101e557600080fd5b806346547790146101aa5780635a129efe146101b257600080fd5b80627436d31461015557806308635a951461017b5780631198527114610190578063288e5b1014610197575b600080fd5b6101686101633660046110f6565b6102d4565b6040519081526020015b60405180910390f35b61018e610189366004611218565b610311565b005b6000610168565b61018e6101a536600461130d565b610384565b6101686103d8565b6101c56101c03660046113a9565b610415565b6040519015158152602001610172565b61018e610432565b61016861060d565b6101ed610628565b6040516001600160a01b039091168152602001610172565b610168610666565b61016861021b3660046113c2565b6106a9565b61018e61022e366004611451565b6106ee565b6101686102413660046113a9565b60036020526000908152604090205481565b610168610786565b61018e610269366004611473565b6107b5565b610276600281565b6040516001600160801b039091168152602001610172565b6000546101ed906001600160a01b031681565b6101686102af3660046113a9565b60026020526000908152604090205481565b6001546101ed906001600160a01b031681565b60006103098484846040516020016102ee91815260200190565b60405160208183030381529060405280519060200120610a34565b949350505050565b600061032389898989898989896106a9565b90506103658c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610aef9050565b6103768a8a8a8a8a8a8a8a8a610c5c565b505050505050505050505050565b33156103bc576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103cd898989898989898989610c5c565b505050505050505050565b6004546000906001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b6001600160801b0316919050565b600080600061042384610f78565b92509250506103098282610fb5565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610565576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016104e6565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190611497565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6006546000906001810161062357506000919050565b919050565b6007546000906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000001810161062357600091505090565b60045460009070010000000000000000000000000000000090046001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b600088888888888888886040516020016106ca9897969594939291906114b4565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b03163314610747576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016104e6565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6005546000906001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016104e6565b6001600160a01b0381166108ad576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b0316156108f0576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526001600160801b038082526020808301829052828401829052600019606084018190526001600160a01b0360809094018490526004818155600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169094179093556006556007805473ffffffffffffffffffffffffffffffffffffffff19908116851790915560018054948716949091168417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb5938184019390918290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190611497565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b8251600090610100811115610a80576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016104e6565b8260005b82811015610ae5576000878281518110610aa057610aa0611520565b60200260200101519050816001901b8716600003610acc57826000528060205260406000209250610adc565b8060005282602052604060002092505b50600101610a84565b5095945050505050565b610100835110610b305782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016104e691815260200190565b8251610b3d906002611630565b8210610b8d578183516002610b529190611630565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016104e6565b6000610b9a8484846102d4565b600081815260036020526040902054909150610be5576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016104e6565b6000806000610bf386610f78565b925092509250610c038282610fb5565b15610c3d576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016104e6565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610ca391815260200190565b60405180910390a4600060046040518060a00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016001820160009054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090506040518060a00160405280886001600160801b03168152602001876001600160801b03168152602001866001600160801b031681526020018b60001b81526020018a6001600160a01b0316815250600460008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555060408201518160010160006101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816002015560808201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050610ed4888585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fc492505050565b805160208201516001600160801b0391821670010000000000000000000000000000000091831691909102176004556040820151600580547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016919092161790556060810151600655608001516007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055505050505050505050565b6000808080610f8860ff86611652565b90506000610f9760ff87611666565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c49906110169088908890889060040161169e565b6000604051808303816000875af1158015611035573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261105d91908101906116e8565b91509150816110a8578051156110765780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110ee576110ee6110af565b604052919050565b60008060006060848603121561110b57600080fd5b833567ffffffffffffffff8082111561112357600080fd5b818601915086601f83011261113757600080fd5b813560208282111561114b5761114b6110af565b8160051b925061115c8184016110c5565b828152928401810192818101908a85111561117657600080fd5b948201945b848610156111945785358252948201949082019061117b565b9a918901359950506040909701359695505050505050565b6001600160a01b03811681146111c157600080fd5b50565b8035610623816111ac565b60008083601f8401126111e157600080fd5b50813567ffffffffffffffff8111156111f957600080fd5b60208301915083602082850101111561121157600080fd5b9250929050565b60008060008060008060008060008060006101208c8e03121561123a57600080fd5b8b3567ffffffffffffffff8082111561125257600080fd5b818e0191508e601f83011261126657600080fd5b81358181111561127557600080fd5b8f60208260051b850101111561128a57600080fd5b60208381019e50909c508e01359a506112a560408f016111c4565b99506112b360608f016111c4565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e01359150808211156112e657600080fd5b506112f38e828f016111cf565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561132c57600080fd5b8935985060208a013561133e816111ac565b975060408a013561134e816111ac565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561138657600080fd5b6113928c828d016111cf565b915080935050809150509295985092959850929598565b6000602082840312156113bb57600080fd5b5035919050565b60008060008060008060008060e0898b0312156113de57600080fd5b88356113e9816111ac565b975060208901356113f9816111ac565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561143157600080fd5b61143d8b828c016111cf565b999c989b5096995094979396929594505050565b6000806040838503121561146457600080fd5b50508035926020909101359150565b60006020828403121561148557600080fd5b8135611490816111ac565b9392505050565b6000602082840312156114a957600080fd5b8151611490816111ac565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561158757816000190482111561156d5761156d611536565b8085161561157a57918102915b93841c9390800290611551565b509250929050565b60008261159e57506001610fbe565b816115ab57506000610fbe565b81600181146115c157600281146115cb576115e7565b6001915050610fbe565b60ff8411156115dc576115dc611536565b50506001821b610fbe565b5060208310610133831016604e8410600b841016171561160a575081810a610fbe565b611614838361154c565b806000190482111561162857611628611536565b029392505050565b6000611490838361158f565b634e487b7160e01b600052601260045260246000fd5b6000826116615761166161163c565b500490565b6000826116755761167561163c565b500690565b60005b8381101561169557818101518382015260200161167d565b50506000910152565b6001600160a01b038416815282602082015260606040820152600082518060608401526116d281608085016020870161167a565b601f01601f191691909101608001949350505050565b600080604083850312156116fb57600080fd5b8251801515811461170b57600080fd5b602084015190925067ffffffffffffffff8082111561172957600080fd5b818501915085601f83011261173d57600080fd5b81518181111561174f5761174f6110af565b6117626020601f19601f840116016110c5565b915080825286602082850101111561177957600080fd5b61178a81602084016020860161167a565b508092505050925092905056fea2646970667358221220f97735c6ce65cfe41023d1626f05c807e67ba1b01a8fd4a0ace2ebdb6cc1e2fd64736f6c63430008110033", + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPostUpgradeInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"NotRollup\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SimulationOnlyEntrypoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50608051611a51610037600039600081816107920152610a970152611a516000f3fe608060405234801561001057600080fd5b506004361061016b5760003560e01c806395fcea78116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb5146102b1578063d5b5cc23146102c4578063e78cea92146102e457600080fd5b8063c4d66de81461027e578063c75184df1461029157600080fd5b8063a04cee60116100b2578063a04cee6014610243578063ae6dead714610256578063b0f305371461027657600080fd5b806395fcea78146102285780639f0c04bf1461023057600080fd5b80635a129efe1161012457806372f2a8c71161010957806372f2a8c7146101f857806380648b02146102005780638515bc6a1461022057600080fd5b80635a129efe146101cd5780636ae71f12146101f057600080fd5b8063119852711161015557806311985271146101ab578063288e5b10146101b257806346547790146101c557600080fd5b80627436d31461017057806308635a9514610196575b600080fd5b61018361017e36600461137a565b6102f7565b6040519081526020015b60405180910390f35b6101a96101a436600461149c565b610334565b005b6000610183565b6101a96101c0366004611591565b6103a7565b6101836103fb565b6101e06101db36600461162d565b610447565b604051901515815260200161018d565b6101a9610464565b6101836106c1565b6102086106dc565b6040516001600160a01b03909116815260200161018d565b61018361071a565b6101a9610788565b61018361023e366004611646565b61095e565b6101a96102513660046116d5565b6109a3565b61018361026436600461162d565b60036020526000908152604090205481565b610183610a3b565b6101a961028c3660046116f7565b610a8d565b610299600281565b6040516001600160801b03909116815260200161018d565b600054610208906001600160a01b031681565b6101836102d236600461162d565b60026020526000908152604090205481565b600154610208906001600160a01b031681565b600061032c84848460405160200161031191815260200190565b60405160208183030381529060405280519060200120610cf6565b949350505050565b6000610346898989898989898961095e565b90506103888c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610db19050565b6103998a8a8a8a8a8a8a8a8a610f1e565b505050505050505050505050565b33156103df576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f0898989898989898989610f1e565b505050505050505050565b6004546000906001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160801b0316919050565b6000806000610455846111fc565b925092505061032c8282611239565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d9919061171b565b6001600160a01b0316336001600160a01b0316146105c157600054604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610577919061171b565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610648919061171b565b6000549091506001600160a01b03808316911603610692576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600554600090600181016106d757506000919050565b919050565b6006546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000181016106d757600091505090565b6006546000907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff000000000000000000000001810161077557600091505090565b6bffffffffffffffffffffffff16919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146108b6576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016105b8565b6004546001600160801b03908116146108fb576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526bffffffffffffffffffffffff6080820152600060a090910181905260048290556005829055600691909155600755565b6000888888888888888860405160200161097f989796959493929190611738565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b031633146109fc576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016105b8565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b60045460009070010000000000000000000000000000000090046001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b6001600160a01b038116610b85576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b031615610bc8576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526bffffffffffffffffffffffff6080850152600060a0909401849052600482815560058390556006929092556007939093556001805473ffffffffffffffffffffffffffffffffffffffff1916938616938417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb593818301939290918290030181865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc6919061171b565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b8251600090610100811115610d42576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016105b8565b8260005b82811015610da7576000878281518110610d6257610d626117a4565b60200260200101519050816001901b8716600003610d8e57826000528060205260406000209250610d9e565b8060005282602052604060002092505b50600101610d46565b5095945050505050565b610100835110610df25782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016105b891815260200190565b8251610dff9060026118b4565b8210610e4f578183516002610e1491906118b4565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105b8565b6000610e5c8484846102f7565b600081815260036020526040902054909150610ea7576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016105b8565b6000806000610eb5866111fc565b925092509250610ec58282611239565b15610eff576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016105b8565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610f6591815260200190565b60405180910390a4600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160038201548152505090506040518060c00160405280886001600160801b03168152602001866001600160801b031681526020018b60001b81526020018a6001600160a01b03168152602001876bffffffffffffffffffffffff1681526020016110ba600090565b905280516020808301516001600160801b0390811670010000000000000000000000000000000002921691909117600455604080830151600555606083015160808401516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0909201516007558151601f8501829004820281018201909252838252611179918a91879190879087908190840183828082843760009201919091525061124892505050565b805160208201516001600160801b03908116700100000000000000000000000000000000029116176004556040810151600555606081015160808201516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a00151600755505050505050505050565b600080808061120c60ff866118d6565b9050600061121b60ff876118ea565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c499061129a90889088908890600401611922565b6000604051808303816000875af11580156112b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e1919081019061196c565b915091508161132c578051156112fa5780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561137257611372611333565b604052919050565b60008060006060848603121561138f57600080fd5b833567ffffffffffffffff808211156113a757600080fd5b818601915086601f8301126113bb57600080fd5b81356020828211156113cf576113cf611333565b8160051b92506113e0818401611349565b828152928401810192818101908a8511156113fa57600080fd5b948201945b84861015611418578535825294820194908201906113ff565b9a918901359950506040909701359695505050505050565b6001600160a01b038116811461144557600080fd5b50565b80356106d781611430565b60008083601f84011261146557600080fd5b50813567ffffffffffffffff81111561147d57600080fd5b60208301915083602082850101111561149557600080fd5b9250929050565b60008060008060008060008060008060006101208c8e0312156114be57600080fd5b8b3567ffffffffffffffff808211156114d657600080fd5b818e0191508e601f8301126114ea57600080fd5b8135818111156114f957600080fd5b8f60208260051b850101111561150e57600080fd5b60208381019e50909c508e01359a5061152960408f01611448565b995061153760608f01611448565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561156a57600080fd5b506115778e828f01611453565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c0312156115b057600080fd5b8935985060208a01356115c281611430565b975060408a01356115d281611430565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561160a57600080fd5b6116168c828d01611453565b915080935050809150509295985092959850929598565b60006020828403121561163f57600080fd5b5035919050565b60008060008060008060008060e0898b03121561166257600080fd5b883561166d81611430565b9750602089013561167d81611430565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff8111156116b557600080fd5b6116c18b828c01611453565b999c989b5096995094979396929594505050565b600080604083850312156116e857600080fd5b50508035926020909101359150565b60006020828403121561170957600080fd5b813561171481611430565b9392505050565b60006020828403121561172d57600080fd5b815161171481611430565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561180b5781600019048211156117f1576117f16117ba565b808516156117fe57918102915b93841c93908002906117d5565b509250929050565b60008261182257506001611242565b8161182f57506000611242565b8160018114611845576002811461184f5761186b565b6001915050611242565b60ff841115611860576118606117ba565b50506001821b611242565b5060208310610133831016604e8410600b841016171561188e575081810a611242565b61189883836117d0565b80600019048211156118ac576118ac6117ba565b029392505050565b60006117148383611813565b634e487b7160e01b600052601260045260246000fd5b6000826118e5576118e56118c0565b500490565b6000826118f9576118f96118c0565b500690565b60005b83811015611919578181015183820152602001611901565b50506000910152565b6001600160a01b038416815282602082015260606040820152600082518060608401526119568160808501602087016118fe565b601f01601f191691909101608001949350505050565b6000806040838503121561197f57600080fd5b8251801515811461198f57600080fd5b602084015190925067ffffffffffffffff808211156119ad57600080fd5b818501915085601f8301126119c157600080fd5b8151818111156119d3576119d3611333565b6119e66020601f19601f84011601611349565b91508082528660208285010111156119fd57600080fd5b611a0e8160208401602086016118fe565b508092505050925092905056fea2646970667358221220e522738ab2e7545b40ca029fa348c62cd29505f0e2a5c0f1c7146bdf1a4b795a64736f6c63430008110033", } // OutboxABI is the input ABI used to generate the binding from. @@ -10075,6 +26577,27 @@ func (_Outbox *OutboxTransactorSession) Initialize(_bridge common.Address) (*typ return _Outbox.Contract.Initialize(&_Outbox.TransactOpts, _bridge) } +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_Outbox *OutboxTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Outbox.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_Outbox *OutboxSession) PostUpgradeInit() (*types.Transaction, error) { + return _Outbox.Contract.PostUpgradeInit(&_Outbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_Outbox *OutboxTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _Outbox.Contract.PostUpgradeInit(&_Outbox.TransactOpts) +} + // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // // Solidity: function updateRollupAddress() returns() @@ -10435,8 +26958,8 @@ func (_Outbox *OutboxFilterer) ParseSendRootUpdated(log types.Log) (*OutboxSendR // SequencerInboxMetaData contains all meta data concerning the SequencerInbox contract. var SequencerInboxMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDataSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"AlreadyValidDASKeyset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataNotAuthenticated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedBackwards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedTooFar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeBlockTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeTimeTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectMessagePreimage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"NoSuchKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotBatchPoster\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structISequencerInbox.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumISequencerInbox.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValidKeyset\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"creationBlock\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x610100604052306080524660c0526200002362000061602090811b62001c9717901c565b151560e0523480156200003557600080fd5b5060405162002ed038038062002ed08339810160408190526200005891620000fe565b60a05262000149565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000a1919062000118565b600060405180830381855afa9150503d8060008114620000de576040519150601f19603f3d011682016040523d82523d6000602084013e620000e3565b606091505b5091509150818015620000f7575080516020145b9250505090565b6000602082840312156200011157600080fd5b5051919050565b6000825160005b818110156200013b57602081860181015185830152016200011f565b506000920191825250919050565b60805160a05160c05160e051612d316200019f600039600081816114c0015261214e0152600061114901526000818161042a01528181611d930152611de801526000818161052901526108b80152612d316000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806384420860116100ee578063d9dd67ab11610097578063e78cea9211610071578063e78cea9214610412578063e8eb1dc314610425578063ebea461d1461044c578063f19815781461048257600080fd5b8063d9dd67ab14610394578063e0bc9729146103a7578063e5a358c8146103ba57600080fd5b8063b31761f8116100c8578063b31761f814610343578063cb23bcb514610356578063d1ce8da81461038157600080fd5b806384420860146103155780638f111f3c1461032857806396cc5c781461033b57600080fd5b80636ae71f121161015b5780636f12b0c9116101355780636f12b0c914610282578063715ea34b1461029557806371c3e6fe146102e95780637fa3a40e1461030c57600080fd5b80636ae71f12146102445780636d46e9871461024c5780636e7df3e71461026f57600080fd5b80631f9566321161018c5780631f95663214610216578063258f04951461022957806327957a491461023c57600080fd5b806306f13056146101b35780631637be48146101ce5780631f7a92b214610201575b600080fd5b6101bb610495565b6040519081526020015b60405180910390f35b6101f16101dc3660046125e9565b60009081526008602052604090205460ff1690565b60405190151581526020016101c5565b61021461020f36600461261a565b61051f565b005b610214610224366004612669565b610734565b6101bb6102373660046125e9565b610841565b6101bb602881565b6102146108ae565b6101f161025a3660046126a2565b60096020526000908152604090205460ff1681565b61021461027d366004612669565b610a51565b61021461029036600461270f565b610b5e565b6102c96102a33660046125e9565b60086020526000908152604090205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101c5565b6101f16102f73660046126a2565b60036020526000908152604090205460ff1681565b6101bb60005481565b6102146103233660046125e9565b610d95565b61021461033636600461277a565b610eef565b610214611146565b6102146103513660046127f7565b6111d5565b600254610369906001600160a01b031681565b6040516001600160a01b0390911681526020016101c5565b61021461038f36600461286b565b6112dc565b6101bb6103a23660046125e9565b611640565b6102146103b536600461277a565b6116cd565b6103e17f400000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016101c5565b600154610369906001600160a01b031681565b6101bb7f000000000000000000000000000000000000000000000000000000000000000081565b6004546005546006546007546104629392919084565b6040805194855260208501939093529183015260608201526080016101c5565b6102146104903660046128ad565b611834565b600154604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061291d565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105c25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b031615610605576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610645576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa1580156106c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e89190612936565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790558035600455602081013560055560408101356006556060013560075550565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ab9190612936565b6001600160a01b0316336001600160a01b0316146107f157600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b6001600160a01b038216600090815260096020526040808220805460ff1916841515179055516004917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b600081815260086020908152604080832081518083019092525460ff811615158252610100900467ffffffffffffffff1691810182905290820361089a5760405162f20c5d60e01b8152600481018490526024016105b9565b6020015167ffffffffffffffff1692915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361094c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b9565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146109a957604051631194af8760e11b81523360048201526001600160a01b03821660248201526044016105b9565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190612936565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac89190612936565b6001600160a01b0316336001600160a01b031614610b0e57600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b6001600160a01b038216600090815260036020526040808220805460ff1916841515179055516001917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b8060005a9050333214610b9d576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff16610bcd57604051632dd9fc9760e01b815260040160405180910390fd5b600080610bdb888888611d5d565b90925090506000808080610bf2868b8d8480611fa5565b93509350935093508c8414610c245760405163ac7411c960e01b815260048101859052602481018e90526044016105b9565b80838e7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548a6000604051610c5f9493929190612953565b60405180910390a4505050506001600160a01b038416159150610d8c9050573660006020610c8e83601f6129de565b610c9891906129f1565b9050610200610ca8600283612af7565b610cb291906129f1565b610cbd826006612b06565b610cc791906129de565b610cd190846129de565b9250333214610cdf57600091505b836001600160a01b031663e3db8a49335a610cfa9087612b1d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190612b30565b5050505b50505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190612936565b6001600160a01b0316336001600160a01b031614610e5257600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b60008181526008602052604090205460ff16610e835760405162f20c5d60e01b8152600481018290526024016105b9565b600081815260086020526040808220805460ff191690555182917f5cb4218b272fd214168ac43e90fb4d05d6c36f0b17ffb4c2dd07c234d744eb2a91a26040516003907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b8260005a9050333214610f2e576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff16610f5e57604051632dd9fc9760e01b815260040160405180910390fd5b600080610f6c8a8a8a611d5d565b90925090508a81838b8b8a8a6000808080610f8a89888a8989611fa5565b93509350935093508a8414158015610fa457506000198b14155b15610fcc5760405163ac7411c960e01b815260048101859052602481018c90526044016105b9565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548f60006040516110079493929190612953565b60405180910390a4505050506001600160a01b038b1615985061113b97505050505050505057366000602061103d83601f6129de565b61104791906129f1565b9050610200611057600283612af7565b61106191906129f1565b61106c826006612b06565b61107691906129de565b61108090846129de565b925033321461108e57600091505b836001600160a01b031663e3db8a49335a6110a99087612b1d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111379190612b30565b5050505b505050505050505050565b467f00000000000000000000000000000000000000000000000000000000000000000361119f576040517fa301bb0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608081018252600180825260208201819052918101829052606001819052600481905560058190556006819055600755565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190612936565b6001600160a01b0316336001600160a01b03161461129257600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b805160045560208101516005556040808201516006556060820151600755516000907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e908290a250565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612936565b6001600160a01b0316336001600160a01b03161461139957600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b600082826040516113ab929190612b4d565b6040519081900381207ffe000000000000000000000000000000000000000000000000000000000000006020830152602182015260410160408051601f19818403018152919052805160209091012090507f800000000000000000000000000000000000000000000000000000000000000081186201000083106114715760405162461bcd60e51b815260206004820152601360248201527f6b657973657420697320746f6f206c617267650000000000000000000000000060448201526064016105b9565b60008181526008602052604090205460ff16156114bd576040517ffa2fddda000000000000000000000000000000000000000000000000000000008152600481018290526024016105b9565b437f00000000000000000000000000000000000000000000000000000000000000001561154a5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061291d565b90505b6040805180820182526001815267ffffffffffffffff8381166020808401918252600087815260089091528490209251835491517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009092169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff161761010091909216021790555182907fabca9b7986bc22ad0160eb0cb88ae75411eacfba4052af0b457a9335ef655722906116059088908890612b5d565b60405180910390a26040516002907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a25050505050565b6001546040517f16bf5579000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b0316906316bf557990602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c7919061291d565b92915050565b8260005a3360009081526003602052604090205490915060ff161580156116ff57506002546001600160a01b03163314155b1561171d57604051632dd9fc9760e01b815260040160405180910390fd5b60008061172b8a8a8a611d5d565b909250905060008b82848b8a8a8680806117488787838888611fa5565b929c5090945092509050888a1480159061176457506000198914155b1561178c5760405163ac7411c960e01b8152600481018b9052602481018a90526044016105b9565b80838b7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d60016040516117c79493929190612953565b60405180910390a4505050505050505050807ffe325ca1efe4c5c1062c981c3ee74b781debe4ea9440306a96d2a55759c66c208c8c60405161180a929190612b5d565b60405180910390a25050506001600160a01b0382161561113b57366000602061103d83601f6129de565b600054861161186f576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061195486846118836020890189612ba2565b61189360408a0160208b01612ba2565b61189e60018d612b1d565b6040805160f89690961b7fff000000000000000000000000000000000000000000000000000000000000001660208088019190915260609590951b6bffffffffffffffffffffffff1916602187015260c093841b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358801529290931b909116603d85015260458401526065830188905260858084018790528151808503909101815260a59093019052815191012090565b60045490915043906119696020880188612ba2565b67ffffffffffffffff1661197d91906129de565b106119b4576040517fad3515d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065442906119c96040880160208901612ba2565b67ffffffffffffffff166119dd91906129de565b10611a14576040517fc76d17e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001881115611a9d576001546001600160a01b031663d5719dc2611a3b60028b612b1d565b6040518263ffffffff1660e01b8152600401611a5991815260200190565b602060405180830381865afa158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a919061291d565b90505b60408051602080820184905281830185905282518083038401815260609092019092528051910120600180546001600160a01b03169063d5719dc290611ae3908c612b1d565b6040518263ffffffff1660e01b8152600401611b0191815260200190565b602060405180830381865afa158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b42919061291d565b14611b79576040517f13947fd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611b858a6123fc565b9150915060008a90506000600160009054906101000a90046001600160a01b03166001600160a01b0316635fca4a166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c07919061291d565b9050600080548d83611c1991906129de565b611c239190612b1d565b9050600080600080611c39898860008989611fa5565b93509350935093508083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d6002604051611c7c9493929190612953565b60405180910390a45050505050505050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491611d039190612bf0565b600060405180830381855afa9150503d8060008114611d3e576040519150601f19603f3d011682016040523d82523d6000602084013e611d43565b606091505b5091509150818015611d56575080516020145b9250505090565b604080516080810182526000808252602082018190529181018290526060810182905284846000611d8f8260286129de565b90507f0000000000000000000000000000000000000000000000000000000000000000811115611e14576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016105b9565b8115801590611e8057507f4000000000000000000000000000000000000000000000000000000000000000808484600081611e5157611e51612b8c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611eb7576040517f1f97007f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60218210801590611f01575082826000818110611ed657611ed6612b8c565b909101357f800000000000000000000000000000000000000000000000000000000000000016151590505b15611f55576000611f16602160018587612c0c565b611f1f91612c36565b60008181526008602052604090205490915060ff16611f535760405162f20c5d60e01b8152600481018290526024016105b9565b505b600080611f6188612441565b915091506000828b8b604051602001611f7c93929190612c54565b60408051808303601f1901815291905280516020909101209b919a509098505050505050505050565b600080600080600054881015611fe7576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663eca067ad6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e919061291d565b881115612097576040517f925f8bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f86598a56000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101889052606481018790526001600160a01b03909116906386598a56906084016080604051808303816000875af1158015612110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121349190612c7c565b60008c90559296509094509250905086156123f0573360607f0000000000000000000000000000000000000000000000000000000000000000156122bc576000606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d7919061291d565b905060006121e548836129f1565b905067ffffffffffffffff81111561223f5760405162461bcd60e51b815260206004820152601160248201527f4c315f4741535f4e4f545f55494e54363400000000000000000000000000000060448201526064016105b9565b60408051426020820152606086901b6bffffffffffffffffffffffff191681830152605481018f9052607481018a905248609482015260c09290921b7fffffffffffffffff0000000000000000000000000000000000000000000000001660b48301528051609c81840301815260bc9092019052915061230a9050565b604080514260208201526bffffffffffffffffffffffff19606085901b1691810191909152605481018c90526074810187905248609482015260b40160405160208183030381529060405290505b600154815160208301206040517f7a88b1070000000000000000000000000000000000000000000000000000000081526000926001600160a01b031691637a88b1079161236f9187916004016001600160a01b03929092168252602082015260400190565b6020604051808303816000875af115801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b2919061291d565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516123e49190612cb2565b60405180910390a25050505b95509550955095915050565b604080516080810182526000808252602082018190529181018290526060810182905260008061242b85612441565b8151602090920191909120969095509350505050565b6040805160808101825260008082526020820181905291810182905260608082018390529161246e612519565b905060008160000151826020015183604001518460600151886040516020016124ee95949392919060c095861b7fffffffffffffffff000000000000000000000000000000000000000000000000908116825294861b8516600882015292851b8416601084015290841b8316601883015290921b16602082015260280190565b6040516020818303038152906040529050602881511461251057612510612ce5565b94909350915050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600654421115612585576006546125789042612b1d565b67ffffffffffffffff1681525b60075461259290426129de565b67ffffffffffffffff1660208201526004544311156125c8576004546125b89043612b1d565b67ffffffffffffffff1660408201525b6005546125d590436129de565b67ffffffffffffffff166060820152919050565b6000602082840312156125fb57600080fd5b5035919050565b6001600160a01b038116811461261757600080fd5b50565b60008082840360a081121561262e57600080fd5b833561263981612602565b92506080601f198201121561264d57600080fd5b506020830190509250929050565b801515811461261757600080fd5b6000806040838503121561267c57600080fd5b823561268781612602565b915060208301356126978161265b565b809150509250929050565b6000602082840312156126b457600080fd5b81356126bf81612602565b9392505050565b60008083601f8401126126d857600080fd5b50813567ffffffffffffffff8111156126f057600080fd5b60208301915083602082850101111561270857600080fd5b9250929050565b60008060008060006080868803121561272757600080fd5b85359450602086013567ffffffffffffffff81111561274557600080fd5b612751888289016126c6565b90955093505060408601359150606086013561276c81612602565b809150509295509295909350565b600080600080600080600060c0888a03121561279557600080fd5b87359650602088013567ffffffffffffffff8111156127b357600080fd5b6127bf8a828b016126c6565b9097509550506040880135935060608801356127da81612602565b969995985093969295946080840135945060a09093013592915050565b60006080828403121561280957600080fd5b6040516080810181811067ffffffffffffffff8211171561283a57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b6000806020838503121561287e57600080fd5b823567ffffffffffffffff81111561289557600080fd5b6128a1858286016126c6565b90969095509350505050565b60008060008060008060e087890312156128c657600080fd5b86359550602087013560ff811681146128de57600080fd5b945060808701888111156128f157600080fd5b60408801945035925060a087013561290881612602565b8092505060c087013590509295509295509295565b60006020828403121561292f57600080fd5b5051919050565b60006020828403121561294857600080fd5b81516126bf81612602565b600060e08201905085825284602083015267ffffffffffffffff8085511660408401528060208601511660608401528060408601511660808401528060608601511660a084015250600383106129b957634e487b7160e01b600052602160045260246000fd5b8260c083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156116c7576116c76129c8565b600082612a0e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612a4e578160001904821115612a3457612a346129c8565b80851615612a4157918102915b93841c9390800290612a18565b509250929050565b600082612a65575060016116c7565b81612a72575060006116c7565b8160018114612a885760028114612a9257612aae565b60019150506116c7565b60ff841115612aa357612aa36129c8565b50506001821b6116c7565b5060208310610133831016604e8410600b8410161715612ad1575081810a6116c7565b612adb8383612a13565b8060001904821115612aef57612aef6129c8565b029392505050565b60006126bf60ff841683612a56565b80820281158282048414176116c7576116c76129c8565b818103818111156116c7576116c76129c8565b600060208284031215612b4257600080fd5b81516126bf8161265b565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb457600080fd5b813567ffffffffffffffff811681146126bf57600080fd5b60005b83811015612be7578181015183820152602001612bcf565b50506000910152565b60008251612c02818460208701612bcc565b9190910192915050565b60008085851115612c1c57600080fd5b83861115612c2957600080fd5b5050820193919092039150565b803560208310156116c757600019602084900360031b1b1692915050565b60008451612c66818460208901612bcc565b8201838582376000930192835250909392505050565b60008060008060808587031215612c9257600080fd5b505082516020840151604085015160609095015191969095509092509050565b6020815260008251806020840152612cd1816040850160208701612bcc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052600160045260246000fdfea2646970667358221220cacf188fa3cbf4c612001fa5f39e0df9c0c81ac4ecf267a3fc690e0b4ac44e7464736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDataSize\",\"type\":\"uint256\"},{\"internalType\":\"contractIReader4844\",\"name\":\"reader4844_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isUsingFeeToken\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"AlreadyValidDASKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMaxTimeVariation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPostUpgradeInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataBlobsNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedBackwards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedTooFar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Deprecated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeBlockTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeTimeTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectMessagePreimage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"InitParamZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"name\":\"InvalidHeaderFlag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingDataHashes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NativeTokenMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"NoSuchKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotBatchPoster\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NotBatchPosterManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structIBridge.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumIBridge.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BROTLI_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_BLOB_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREE_DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_HEAVY_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromBlobs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchPosterManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValidKeyset\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"creationBlock\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUsingFeeToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reader4844\",\"outputs\":[{\"internalType\":\"contractIReader4844\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBatchPosterManager\",\"type\":\"address\"}],\"name\":\"setBatchPosterManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x610160604052306080526202000060a05246610100526200002b62000103602090811b6200275617901c565b1515610120523480156200003e57600080fd5b5060405162004100380380620041008339810160408190526200006191620001a0565b60e083905261012051156200009f576001600160a01b0382161562000099576040516386657a5360e01b815260040160405180910390fd5b620000e8565b6001600160a01b038216620000e8576040516380fc2c0360e01b815260206004820152600a60248201526914995859195c8d0e0d0d60b21b604482015260640160405180910390fd5b6001600160a01b0390911660c0521515610140525062000229565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620001439190620001f8565b600060405180830381855afa9150503d806000811462000180576040519150601f19603f3d011682016040523d82523d6000602084013e62000185565b606091505b509150915081801562000199575080516020145b9250505090565b600080600060608486031215620001b657600080fd5b835160208501519093506001600160a01b0381168114620001d657600080fd5b60408501519092508015158114620001ed57600080fd5b809150509250925092565b6000825160005b818110156200021b5760208186018101518583015201620001ff565b506000920191825250919050565b60805160a05160c05160e051610100516101205161014051613e21620002df600039600081816105040152818161087b01528181610e5c0152612d2e015260008181610dfa01528181611f520152612d70015260008181611beb01526131db0152600081816105e701528181612ff9015261304e0152600081816104b201528181610cf30152818161297d0152612a58015260008181610ff001526118290152600081816106e3015261193b0152613e216000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80637fa3a40e11610160578063cc2a1a0c116100d8578063e78cea921161008c578063ebea461d11610071578063ebea461d14610609578063f198157814610631578063f60a50911461064457600080fd5b8063e78cea92146105cf578063e8eb1dc3146105e257600080fd5b8063d9dd67ab116100bd578063d9dd67ab14610582578063e0bc972914610595578063e5a358c8146105a857600080fd5b8063cc2a1a0c1461055c578063d1ce8da81461056f57600080fd5b806392d9f7821161012f57806396cc5c781161011457806396cc5c781461052e578063b31761f814610536578063cb23bcb51461054957600080fd5b806392d9f782146104ff57806395fcea781461052657600080fd5b80637fa3a40e14610491578063844208601461049a5780638d910dde146104ad5780638f111f3c146104ec57600080fd5b80632cbf74e5116101f35780636d46e987116101c25780636f12b0c9116101a75780636f12b0c914610407578063715ea34b1461041a57806371c3e6fe1461046e57600080fd5b80636d46e987146103d15780636e7df3e7146103f457600080fd5b80632cbf74e5146103685780633e5aa0821461038f5780636ae71f12146103a25780636c890450146103aa57600080fd5b80631f7a92b21161024a5780631ff647901161022f5780631ff647901461033a578063258f04951461034d57806327957a491461036057600080fd5b80631f7a92b2146103125780631f9566321461032757600080fd5b806302c992751461027c57806306f13056146102c15780631637be48146102d757806316af91a71461030a575b600080fd5b6102a37f200000000000000000000000000000000000000000000000000000000000000081565b6040516001600160f81b031990911681526020015b60405180910390f35b6102c961064f565b6040519081526020016102b8565b6102fa6102e53660046134ef565b60009081526008602052604090205460ff1690565b60405190151581526020016102b8565b6102a3600081565b610325610320366004613520565b6106d9565b005b61032561033536600461356f565b6109bf565b6103256103483660046135a8565b610aeb565b6102c961035b3660046134ef565b610c83565b6102c9602881565b6102a37f500000000000000000000000000000000000000000000000000000000000000081565b61032561039d3660046135cc565b610cf0565b6103256110f6565b6102a37f080000000000000000000000000000000000000000000000000000000000000081565b6102fa6103df3660046135a8565b60096020526000908152604090205460ff1681565b61032561040236600461356f565b6112ce565b61032561041536600461365e565b6113fa565b61044e6104283660046134ef565b60086020526000908152604090205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016102b8565b6102fa61047c3660046135a8565b60036020526000908152604090205460ff1681565b6102c960005481565b6103256104a83660046134ef565b61142c565b6104d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b8565b6103256104fa3660046136c9565b6115a1565b6102fa7f000000000000000000000000000000000000000000000000000000000000000081565b610325611931565b610325611be8565b61032561054436600461378d565b611c60565b6002546104d4906001600160a01b031681565b600b546104d4906001600160a01b031681565b61032561057d3660046137f3565b611d6f565b6102c96105903660046134ef565b6120d2565b6103256105a33660046136c9565b61215f565b6102a37f400000000000000000000000000000000000000000000000000000000000000081565b6001546104d4906001600160a01b031681565b6102c97f000000000000000000000000000000000000000000000000000000000000000081565b6106116122c7565b6040805194855260208501939093529183015260608201526080016102b8565b61032561063f366004613835565b612300565b6102a3600160ff1b81565b600154604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa1580156106b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d491906138a5565b905090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361077c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b0316156107bf576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166107ff576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561085b575060408051601f3d908101601f19168201909252610858918101906138be565b60015b15610876576001600160a01b0381161561087457600191505b505b8015157f00000000000000000000000000000000000000000000000000000000000000001515146108d3576040517fc3e31f8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038516908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa158015610952573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097691906138be565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556109ba6109b53684900384018461378d565b61281c565b505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3691906138be565b6001600160a01b0316336001600160a01b031614158015610a625750600b546001600160a01b03163314155b15610a9b576040517f660b3b42000000000000000000000000000000000000000000000000000000008152336004820152602401610773565b6001600160a01b038216600090815260096020526040808220805460ff1916841515179055516004917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6291906138be565b6001600160a01b0316336001600160a01b031614610c2c5760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be791906138be565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015291166024820152604401610773565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556040516005907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b600081815260086020908152604080832081518083019092525460ff811615158252610100900467ffffffffffffffff16918101829052908203610cdc5760405162f20c5d60e01b815260048101849052602401610773565b6020015167ffffffffffffffff1692915050565b827f000000000000000000000000000000000000000000000000000000000000000060005a3360009081526003602052604090205490915060ff16610d4857604051632dd9fc9760e01b815260040160405180910390fd5b6000806000610d568a612955565b925092509250600080600080610d70878f60008f8f612b84565b929650909450925090508e808514801590610d8d57506000198114155b15610db55760405163ac7411c960e01b81526004810186905260248101829052604401610773565b8184827f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7866000548c6003604051610df094939291906138db565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000015610e50576040517f86657a5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332148015610e7d57507f0000000000000000000000000000000000000000000000000000000000000000155b15610e8e57610e8e88864889612d6d565b505050506001600160a01b0387161593506110ec92505050573660006020610eb783601f613966565b610ec19190613979565b9050610200610ed1600283613a7f565b610edb9190613979565b610ee6826006613a8e565b610ef09190613966565b610efa9084613966565b9250333214610f0c576000915061103f565b6001600160a01b0384161561103f57836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610f7a57506040513d6000823e601f3d908101601f19168201604052610f779190810190613aa5565b60015b1561103f5780511561103d576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fea91906138a5565b905048817f0000000000000000000000000000000000000000000000000000000000000000845161101b9190613a8e565b6110259190613a8e565b61102f9190613979565b6110399086613966565b9450505b505b846001600160a01b031663e3db8a49335a61105a9087613b4b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af11580156110c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e89190613b5e565b5050505b5050505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906138be565b6001600160a01b0316336001600160a01b0316146111ce5760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bc3573d6000803e3d6000fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125591906138be565b6002549091506001600160a01b0380831691160361129f576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134591906138be565b6001600160a01b0316336001600160a01b0316141580156113715750600b546001600160a01b03163314155b156113aa576040517f660b3b42000000000000000000000000000000000000000000000000000000008152336004820152602401610773565b6001600160a01b038216600090815260036020526040808220805460ff1916841515179055516001917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b6040517fc73b9d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a391906138be565b6001600160a01b0316336001600160a01b0316146115045760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bc3573d6000803e3d6000fd5b60008181526008602052604090205460ff166115355760405162f20c5d60e01b815260048101829052602401610773565b600081815260086020526040808220805460ff191690555182917f5cb4218b272fd214168ac43e90fb4d05d6c36f0b17ffb4c2dd07c234d744eb2a91a26040516003907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b826000805a90503332146115e1576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff1661161157604051632dd9fc9760e01b815260040160405180910390fd5b60008061161f8b8b8b612fc5565b90925090508b81838c8c8b8b600080808061163d89888a8989612b84565b93509350935093508a841415801561165757506000198b14155b1561167f5760405163ac7411c960e01b815260048101859052602481018c9052604401610773565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548f60006040516116ba94939291906138db565b60405180910390a4505050506001600160a01b038c161598506119259750505050505050505736600060206116f083601f613966565b6116fa9190613979565b905061020061170a600283613a7f565b6117149190613979565b61171f826006613a8e565b6117299190613966565b6117339084613966565b92503332146117455760009150611878565b6001600160a01b0384161561187857836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156117b357506040513d6000823e601f3d908101601f191682016040526117b09190810190613aa5565b60015b1561187857805115611876576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182391906138a5565b905048817f000000000000000000000000000000000000000000000000000000000000000084516118549190613a8e565b61185e9190613a8e565b6118689190613979565b6118729086613966565b9450505b505b846001600160a01b031663e3db8a49335a6118939087613b4b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af11580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119219190613b5e565b5050505b50505050505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036119cf5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610773565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614611a45576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610773565b600454158015611a555750600554155b8015611a615750600654155b8015611a6d5750600754155b15611aa4576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045467ffffffffffffffff1080611ac5575060055467ffffffffffffffff105b80611ad9575060065467ffffffffffffffff105b80611aed575060075467ffffffffffffffff105b15611b24576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060048054600a805460058054600680546007805467ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff93821670010000000000000000000000000000000002939093166fffffffffffffffffffffffffffffffff95821668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909816919099161795909517929092169590951717909255600093849055908390559082905555565b467f000000000000000000000000000000000000000000000000000000000000000003611c41576040517fa301bb0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7801000000000000000100000000000000010000000000000001600a55565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd791906138be565b6001600160a01b0316336001600160a01b031614611d385760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bc3573d6000803e3d6000fd5b611d418161281c565b6040516000907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e908290a250565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de691906138be565b6001600160a01b0316336001600160a01b031614611e475760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bc3573d6000803e3d6000fd5b60008282604051611e59929190613b7b565b6040519081900381207ffe000000000000000000000000000000000000000000000000000000000000006020830152602182015260410160408051601f1981840301815291905280516020909101209050600160ff1b8118620100008310611f035760405162461bcd60e51b815260206004820152601360248201527f6b657973657420697320746f6f206c61726765000000000000000000000000006044820152606401610773565b60008181526008602052604090205460ff1615611f4f576040517ffa2fddda00000000000000000000000000000000000000000000000000000000815260048101829052602401610773565b437f000000000000000000000000000000000000000000000000000000000000000015611fdc5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd991906138a5565b90505b6040805180820182526001815267ffffffffffffffff8381166020808401918252600087815260089091528490209251835491517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009092169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff161761010091909216021790555182907fabca9b7986bc22ad0160eb0cb88ae75411eacfba4052af0b457a9335ef655722906120979088908890613b8b565b60405180910390a26040516002907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a25050505050565b6001546040517f16bf5579000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b0316906316bf557990602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906138a5565b92915050565b826000805a3360009081526003602052604090205490915060ff1615801561219257506002546001600160a01b03163314155b156121b057604051632dd9fc9760e01b815260040160405180910390fd5b6000806121be8b8b8b612fc5565b909250905060008c82848c8b8b8680806121db8787838888612b84565b929c5090945092509050888a148015906121f757506000198914155b1561221f5760405163ac7411c960e01b8152600481018b9052602481018a9052604401610773565b80838b7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d600160405161225a94939291906138db565b60405180910390a4505050505050505050807ffe325ca1efe4c5c1062c981c3ee74b781debe4ea9440306a96d2a55759c66c208d8d60405161229d929190613b8b565b60405180910390a25050506001600160a01b038316156119255736600060206116f083601f613966565b6000806000806000806000806122db6131d3565b67ffffffffffffffff9384169b50918316995082169750169450505050505b90919293565b600054861161233b576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612408868461234f6020890189613bd0565b61235f60408a0160208b01613bd0565b61236a60018d613b4b565b6040805160f89690961b6001600160f81b03191660208088019190915260609590951b6bffffffffffffffffffffffff1916602187015260c093841b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358801529290931b909116603d85015260458401526065830188905260858084018790528151808503909101815260a59093019052815191012090565b600a54909150439067ffffffffffffffff166124276020880188613bd0565b6124319190613bfa565b67ffffffffffffffff1610612472576040517fad3515d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a544290700100000000000000000000000000000000900467ffffffffffffffff166124a56040880160208901613bd0565b6124af9190613bfa565b67ffffffffffffffff16106124f0576040517fc76d17e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001881115612579576001546001600160a01b031663d5719dc261251760028b613b4b565b6040518263ffffffff1660e01b815260040161253591815260200190565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257691906138a5565b90505b60408051602080820184905281830185905282518083038401815260609092019092528051910120600180546001600160a01b03169063d5719dc2906125bf908c613b4b565b6040518263ffffffff1660e01b81526004016125dd91815260200190565b602060405180830381865afa1580156125fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261e91906138a5565b14612655576040517f13947fd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806126618a613257565b9150915060008a90506000600160009054906101000a90046001600160a01b03166001600160a01b0316635fca4a166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e391906138a5565b90508060008080806126f88988838880612b84565b93509350935093508083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d600260405161273b94939291906138db565b60405180910390a45050505050505050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f2000000000000000000000000000000000000000000000000000000001790529051600091829182916064916127c29190613c46565b600060405180830381855afa9150503d80600081146127fd576040519150601f19603f3d011682016040523d82523d6000602084013e612802565b606091505b5091509150818015612815575080516020145b9250505090565b805167ffffffffffffffff108061283e5750602081015167ffffffffffffffff105b806128545750604081015167ffffffffffffffff105b8061286a5750606081015167ffffffffffffffff105b156128a1576040517f09cfba7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a80546020840151604085015160609095015167ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055565b60408051608081018252600080825260208201819052918101829052606081018290526000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa1580156129d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a019190810190613aa5565b90508051600003612a3e576040517f3cd27eb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080612a4a8761329c565b9150915060008351620200007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad891906138a5565b612ae29190613a8e565b612aec9190613a8e565b60405190915083907f500000000000000000000000000000000000000000000000000000000000000090612b24908790602001613c62565b60408051601f1981840301815290829052612b43939291602001613c98565b604051602081830303815290604052805190602001208260004811612b69576000612b73565b612b734884613979565b965096509650505050509193909250565b600080600080600054881015612bc6576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663eca067ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3d91906138a5565b881115612c76576040517f925f8bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f86598a56000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101889052606481018790526001600160a01b03909116906386598a56906084016080604051808303816000875af1158015612cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d139190613cdb565b60008c9055929650909450925090508615801590612d4f57507f0000000000000000000000000000000000000000000000000000000000000000155b15612d6157612d618985486000612d6d565b95509550955095915050565b327f000000000000000000000000000000000000000000000000000000000000000015612e13576000606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df991906138a5565b9050612e054882613979565b612e0f9084613966565b9250505b67ffffffffffffffff821115612e6b5760405162461bcd60e51b815260206004820152601460248201527f45585452415f4741535f4e4f545f55494e5436340000000000000000000000006044820152606401610773565b604080514260208201526bffffffffffffffffffffffff19606084901b16918101919091526054810186905260748101859052609481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b1660b482015260009060bc0160408051808303601f1901815290829052600154815160208301207f7a88b1070000000000000000000000000000000000000000000000000000000084526001600160a01b0386811660048601526024850191909152919350600092911690637a88b107906044016020604051808303816000875af1158015612f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8291906138a5565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b83604051612fb49190613d11565b60405180910390a250505050505050565b60408051608081018252600080825260208201819052918101829052606081018290526000612ff5856028613966565b90507f000000000000000000000000000000000000000000000000000000000000000081111561307a576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610773565b6000806130868661329c565b90925090508615613199576130b6888860008181106130a7576130a7613bba565b9050013560f81c60f81b613374565b61310e57878760008181106130cd576130cd613bba565b6040517f6b3333560000000000000000000000000000000000000000000000000000000081529201356001600160f81b031916600483015250602401610773565b600160ff1b888860008161312457613124613bba565b6001600160f81b031992013592909216161580159150613145575060218710155b1561319957600061315a602160018a8c613d44565b61316391613d6e565b60008181526008602052604090205490915060ff166131975760405162f20c5d60e01b815260048101829052602401610773565b505b8188886040516020016131ae93929190613d8c565b60408051601f1981840301815291905280516020909101209890975095505050505050565b6000808080467f000000000000000000000000000000000000000000000000000000000000000014613210575060019250829150819050806122fa565b5050600a5467ffffffffffffffff8082169350680100000000000000008204811692507001000000000000000000000000000000008204811691600160c01b9004166122fa565b60408051608081018252600080825260208201819052918101829052606081018290526000806132868561329c565b8151602090920191909120969095509350505050565b604080516080810182526000808252602082018190529181018290526060808201839052916132c9613407565b9050600081600001518260200151836040015184606001518860405160200161334995949392919060c095861b7fffffffffffffffff000000000000000000000000000000000000000000000000908116825294861b8516600882015292851b8416601084015290841b8316601883015290921b16602082015260280190565b6040516020818303038152906040529050602881511461336b5761336b613db4565b94909350915050565b60006001600160f81b03198216158061339a57506001600160f81b03198216600160ff1b145b806133ce57506001600160f81b031982167f8800000000000000000000000000000000000000000000000000000000000000145b8061215957506001600160f81b031982167f20000000000000000000000000000000000000000000000000000000000000001492915050565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260008060008061345d6131d3565b93509350935093508167ffffffffffffffff1642111561348e576134818242613dca565b67ffffffffffffffff1685525b6134988142613bfa565b67ffffffffffffffff908116602087015284164311156134cc576134bc8443613dca565b67ffffffffffffffff1660408601525b6134d68343613bfa565b67ffffffffffffffff1660608601525092949350505050565b60006020828403121561350157600080fd5b5035919050565b6001600160a01b038116811461351d57600080fd5b50565b60008082840360a081121561353457600080fd5b833561353f81613508565b92506080601f198201121561355357600080fd5b506020830190509250929050565b801515811461351d57600080fd5b6000806040838503121561358257600080fd5b823561358d81613508565b9150602083013561359d81613561565b809150509250929050565b6000602082840312156135ba57600080fd5b81356135c581613508565b9392505050565b600080600080600060a086880312156135e457600080fd5b853594506020860135935060408601356135fd81613508565b94979396509394606081013594506080013592915050565b60008083601f84011261362757600080fd5b50813567ffffffffffffffff81111561363f57600080fd5b60208301915083602082850101111561365757600080fd5b9250929050565b60008060008060006080868803121561367657600080fd5b85359450602086013567ffffffffffffffff81111561369457600080fd5b6136a088828901613615565b9095509350506040860135915060608601356136bb81613508565b809150509295509295909350565b600080600080600080600060c0888a0312156136e457600080fd5b87359650602088013567ffffffffffffffff81111561370257600080fd5b61370e8a828b01613615565b90975095505060408801359350606088013561372981613508565b969995985093969295946080840135945060a09093013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561378557613785613746565b604052919050565b60006080828403121561379f57600080fd5b6040516080810181811067ffffffffffffffff821117156137c2576137c2613746565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b6000806020838503121561380657600080fd5b823567ffffffffffffffff81111561381d57600080fd5b61382985828601613615565b90969095509350505050565b60008060008060008060e0878903121561384e57600080fd5b86359550602087013560ff8116811461386657600080fd5b9450608087018881111561387957600080fd5b60408801945035925060a087013561389081613508565b8092505060c087013590509295509295509295565b6000602082840312156138b757600080fd5b5051919050565b6000602082840312156138d057600080fd5b81516135c581613508565b600060e08201905085825284602083015267ffffffffffffffff8085511660408401528060208601511660608401528060408601511660808401528060608601511660a0840152506004831061394157634e487b7160e01b600052602160045260246000fd5b8260c083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561215957612159613950565b60008261399657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156139d65781600019048211156139bc576139bc613950565b808516156139c957918102915b93841c93908002906139a0565b509250929050565b6000826139ed57506001612159565b816139fa57506000612159565b8160018114613a105760028114613a1a57613a36565b6001915050612159565b60ff841115613a2b57613a2b613950565b50506001821b612159565b5060208310610133831016604e8410600b8410161715613a59575081810a612159565b613a63838361399b565b8060001904821115613a7757613a77613950565b029392505050565b60006135c560ff8416836139de565b808202811582820484141761215957612159613950565b60006020808385031215613ab857600080fd5b825167ffffffffffffffff80821115613ad057600080fd5b818501915085601f830112613ae457600080fd5b815181811115613af657613af6613746565b8060051b9150613b0784830161375c565b8181529183018401918481019088841115613b2157600080fd5b938501935b83851015613b3f57845182529385019390850190613b26565b98975050505050505050565b8181038181111561215957612159613950565b600060208284031215613b7057600080fd5b81516135c581613561565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613be257600080fd5b813567ffffffffffffffff811681146135c557600080fd5b67ffffffffffffffff818116838216019080821115613c1b57613c1b613950565b5092915050565b60005b83811015613c3d578181015183820152602001613c25565b50506000910152565b60008251613c58818460208701613c22565b9190910192915050565b815160009082906020808601845b83811015613c8c57815185529382019390820190600101613c70565b50929695505050505050565b60008451613caa818460208901613c22565b6001600160f81b031985169083019081528351613cce816001840160208801613c22565b0160010195945050505050565b60008060008060808587031215613cf157600080fd5b505082516020840151604085015160609095015191969095509092509050565b6020815260008251806020840152613d30816040850160208701613c22565b601f01601f19169190910160400192915050565b60008085851115613d5457600080fd5b83861115613d6157600080fd5b5050820193919092039150565b8035602083101561215957600019602084900360031b1b1692915050565b60008451613d9e818460208901613c22565b8201838582376000930192835250909392505050565b634e487b7160e01b600052600160045260246000fd5b67ffffffffffffffff828116828216039080821115613c1b57613c1b61395056fea26469706673582212204bd240d4780f6468ea7d8d1470c4e0911af2abe645a3dd6d2dbdf369bf67a2d664736f6c63430008110033", } // SequencerInboxABI is the input ABI used to generate the binding from. @@ -10448,7 +26971,7 @@ var SequencerInboxABI = SequencerInboxMetaData.ABI var SequencerInboxBin = SequencerInboxMetaData.Bin // DeploySequencerInbox deploys a new Ethereum contract, binding an instance of SequencerInbox to it. -func DeploySequencerInbox(auth *bind.TransactOpts, backend bind.ContractBackend, _maxDataSize *big.Int) (common.Address, *types.Transaction, *SequencerInbox, error) { +func DeploySequencerInbox(auth *bind.TransactOpts, backend bind.ContractBackend, _maxDataSize *big.Int, reader4844_ common.Address, _isUsingFeeToken bool) (common.Address, *types.Transaction, *SequencerInbox, error) { parsed, err := SequencerInboxMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -10457,7 +26980,7 @@ func DeploySequencerInbox(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SequencerInboxBin), backend, _maxDataSize) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SequencerInboxBin), backend, _maxDataSize, reader4844_, _isUsingFeeToken) if err != nil { return common.Address{}, nil, nil, err } @@ -10606,6 +27129,68 @@ func (_SequencerInbox *SequencerInboxTransactorRaw) Transact(opts *bind.Transact return _SequencerInbox.Contract.contract.Transact(opts, method, params...) } +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCaller) BROTLIMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "BROTLI_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.BROTLIMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCallerSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.BROTLIMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCaller) DASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "DAS_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.DASMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCallerSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.DASMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + // DATAAUTHENTICATEDFLAG is a free data retrieval call binding the contract method 0xe5a358c8. // // Solidity: function DATA_AUTHENTICATED_FLAG() view returns(bytes1) @@ -10637,6 +27222,37 @@ func (_SequencerInbox *SequencerInboxCallerSession) DATAAUTHENTICATEDFLAG() ([1] return _SequencerInbox.Contract.DATAAUTHENTICATEDFLAG(&_SequencerInbox.CallOpts) } +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCaller) DATABLOBHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "DATA_BLOB_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.DATABLOBHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCallerSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.DATABLOBHEADERFLAG(&_SequencerInbox.CallOpts) +} + // HEADERLENGTH is a free data retrieval call binding the contract method 0x27957a49. // // Solidity: function HEADER_LENGTH() view returns(uint256) @@ -10668,6 +27284,97 @@ func (_SequencerInbox *SequencerInboxCallerSession) HEADERLENGTH() (*big.Int, er return _SequencerInbox.Contract.HEADERLENGTH(&_SequencerInbox.CallOpts) } +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCaller) TREEDASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "TREE_DAS_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.TREEDASMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. +// +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCallerSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.TREEDASMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCaller) ZEROHEAVYMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "ZERO_HEAVY_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. +// +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInbox *SequencerInboxCallerSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInbox.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_SequencerInbox.CallOpts) +} + +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInbox *SequencerInboxCaller) AddSequencerL2BatchFromOrigin(opts *bind.CallOpts, arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "addSequencerL2BatchFromOrigin", arg0, arg1, arg2, arg3) + + if err != nil { + return err + } + + return err + +} + +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInbox *SequencerInboxSession) AddSequencerL2BatchFromOrigin(arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { + return _SequencerInbox.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInbox.CallOpts, arg0, arg1, arg2, arg3) +} + +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInbox *SequencerInboxCallerSession) AddSequencerL2BatchFromOrigin(arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { + return _SequencerInbox.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInbox.CallOpts, arg0, arg1, arg2, arg3) +} + // BatchCount is a free data retrieval call binding the contract method 0x06f13056. // // Solidity: function batchCount() view returns(uint256) @@ -10699,6 +27406,37 @@ func (_SequencerInbox *SequencerInboxCallerSession) BatchCount() (*big.Int, erro return _SequencerInbox.Contract.BatchCount(&_SequencerInbox.CallOpts) } +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInbox *SequencerInboxCaller) BatchPosterManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "batchPosterManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInbox *SequencerInboxSession) BatchPosterManager() (common.Address, error) { + return _SequencerInbox.Contract.BatchPosterManager(&_SequencerInbox.CallOpts) +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInbox *SequencerInboxCallerSession) BatchPosterManager() (common.Address, error) { + return _SequencerInbox.Contract.BatchPosterManager(&_SequencerInbox.CallOpts) +} + // Bridge is a free data retrieval call binding the contract method 0xe78cea92. // // Solidity: function bridge() view returns(address) @@ -10899,6 +27637,37 @@ func (_SequencerInbox *SequencerInboxCallerSession) IsSequencer(arg0 common.Addr return _SequencerInbox.Contract.IsSequencer(&_SequencerInbox.CallOpts, arg0) } +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInbox *SequencerInboxCaller) IsUsingFeeToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "isUsingFeeToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInbox *SequencerInboxSession) IsUsingFeeToken() (bool, error) { + return _SequencerInbox.Contract.IsUsingFeeToken(&_SequencerInbox.CallOpts) +} + +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInbox *SequencerInboxCallerSession) IsUsingFeeToken() (bool, error) { + return _SequencerInbox.Contract.IsUsingFeeToken(&_SequencerInbox.CallOpts) +} + // IsValidKeysetHash is a free data retrieval call binding the contract method 0x1637be48. // // Solidity: function isValidKeysetHash(bytes32 ksHash) view returns(bool) @@ -10963,59 +27732,69 @@ func (_SequencerInbox *SequencerInboxCallerSession) MaxDataSize() (*big.Int, err // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInbox *SequencerInboxCaller) MaxTimeVariation(opts *bind.CallOpts) (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInbox *SequencerInboxCaller) MaxTimeVariation(opts *bind.CallOpts) (*big.Int, *big.Int, *big.Int, *big.Int, error) { var out []interface{} err := _SequencerInbox.contract.Call(opts, &out, "maxTimeVariation") - outstruct := new(struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int - }) if err != nil { - return *outstruct, err + return *new(*big.Int), *new(*big.Int), *new(*big.Int), *new(*big.Int), err } - outstruct.DelayBlocks = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.FutureBlocks = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.DelaySeconds = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - outstruct.FutureSeconds = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - return *outstruct, err + return out0, out1, out2, out3, err } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInbox *SequencerInboxSession) MaxTimeVariation() (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInbox *SequencerInboxSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { return _SequencerInbox.Contract.MaxTimeVariation(&_SequencerInbox.CallOpts) } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInbox *SequencerInboxCallerSession) MaxTimeVariation() (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInbox *SequencerInboxCallerSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { return _SequencerInbox.Contract.MaxTimeVariation(&_SequencerInbox.CallOpts) } +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInbox *SequencerInboxCaller) Reader4844(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerInbox.contract.Call(opts, &out, "reader4844") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInbox *SequencerInboxSession) Reader4844() (common.Address, error) { + return _SequencerInbox.Contract.Reader4844(&_SequencerInbox.CallOpts) +} + +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInbox *SequencerInboxCallerSession) Reader4844() (common.Address, error) { + return _SequencerInbox.Contract.Reader4844(&_SequencerInbox.CallOpts) +} + // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // // Solidity: function rollup() view returns(address) @@ -11099,25 +27878,25 @@ func (_SequencerInbox *SequencerInboxTransactorSession) AddSequencerL2Batch(sequ return _SequencerInbox.Contract.AddSequencerL2Batch(&_SequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInbox *SequencerInboxTransactor) AddSequencerL2BatchFromOrigin(opts *bind.TransactOpts, sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInbox.contract.Transact(opts, "addSequencerL2BatchFromOrigin", sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInbox *SequencerInboxTransactor) AddSequencerL2BatchFromBlobs(opts *bind.TransactOpts, sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInbox.contract.Transact(opts, "addSequencerL2BatchFromBlobs", sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInbox *SequencerInboxSession) AddSequencerL2BatchFromOrigin(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInbox.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInbox *SequencerInboxSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInbox.Contract.AddSequencerL2BatchFromBlobs(&_SequencerInbox.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInbox *SequencerInboxTransactorSession) AddSequencerL2BatchFromOrigin(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInbox.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInbox.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInbox *SequencerInboxTransactorSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInbox.Contract.AddSequencerL2BatchFromBlobs(&_SequencerInbox.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } // AddSequencerL2BatchFromOrigin0 is a paid mutator transaction binding the contract method 0x8f111f3c. @@ -11204,6 +27983,27 @@ func (_SequencerInbox *SequencerInboxTransactorSession) InvalidateKeysetHash(ksH return _SequencerInbox.Contract.InvalidateKeysetHash(&_SequencerInbox.TransactOpts, ksHash) } +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInbox *SequencerInboxTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerInbox.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInbox *SequencerInboxSession) PostUpgradeInit() (*types.Transaction, error) { + return _SequencerInbox.Contract.PostUpgradeInit(&_SequencerInbox.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInbox *SequencerInboxTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _SequencerInbox.Contract.PostUpgradeInit(&_SequencerInbox.TransactOpts) +} + // RemoveDelayAfterFork is a paid mutator transaction binding the contract method 0x96cc5c78. // // Solidity: function removeDelayAfterFork() returns() @@ -11225,6 +28025,27 @@ func (_SequencerInbox *SequencerInboxTransactorSession) RemoveDelayAfterFork() ( return _SequencerInbox.Contract.RemoveDelayAfterFork(&_SequencerInbox.TransactOpts) } +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInbox *SequencerInboxTransactor) SetBatchPosterManager(opts *bind.TransactOpts, newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInbox.contract.Transact(opts, "setBatchPosterManager", newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInbox *SequencerInboxSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInbox.Contract.SetBatchPosterManager(&_SequencerInbox.TransactOpts, newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInbox *SequencerInboxTransactorSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInbox.Contract.SetBatchPosterManager(&_SequencerInbox.TransactOpts, newBatchPosterManager) +} + // SetIsBatchPoster is a paid mutator transaction binding the contract method 0x6e7df3e7. // // Solidity: function setIsBatchPoster(address addr, bool isBatchPoster_) returns() @@ -12126,7 +28947,7 @@ type SequencerInboxSequencerBatchDelivered struct { AfterAcc [32]byte DelayedAcc [32]byte AfterDelayedMessagesRead *big.Int - TimeBounds ISequencerInboxTimeBounds + TimeBounds IBridgeTimeBounds DataLocation uint8 Raw types.Log // Blockchain specific contextual infos } diff --git a/solgen/go/challengeV2gen/challengeV2gen.go b/solgen/go/challengeV2gen/challengeV2gen.go index c205fb56d..858752e36 100644 --- a/solgen/go/challengeV2gen/challengeV2gen.go +++ b/solgen/go/challengeV2gen/challengeV2gen.go @@ -96,7 +96,7 @@ type OneStepData struct { // EdgeChallengeManagerMetaData contains all meta data concerning the EdgeChallengeManager contract. var EdgeChallengeManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AssertionHashEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"h2\",\"type\":\"bytes32\"}],\"name\":\"AssertionHashMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssertionNoSibling\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssertionNotPending\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"levels\",\"type\":\"uint8\"}],\"name\":\"BigStepLevelsTooMany\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"lowerChildId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"upperChildId\",\"type\":\"bytes32\"}],\"name\":\"ChildrenAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"argLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"claimLevel\",\"type\":\"uint8\"}],\"name\":\"ClaimEdgeInvalidLevel\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"ClaimEdgeNotLengthOneRival\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimEdgeNotPending\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"EdgeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"EdgeAlreadyRefunded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId1\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"edgeId2\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"level1\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"level2\",\"type\":\"uint8\"}],\"name\":\"EdgeLevelInvalid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"enumEdgeStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"EdgeNotConfirmed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"EdgeNotExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"}],\"name\":\"EdgeNotLayerZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"EdgeNotLengthOne\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"enumEdgeStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"EdgeNotPending\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"}],\"name\":\"EdgeTypeNotSmallStep\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"EdgeUnrivaled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyAssertionChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyChallengePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyClaimId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyEdgeSpecificProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyEndMachineStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyEndRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyFirstRival\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyOneStepProofEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyOriginId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPrefixProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyStakeReceiver\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyStaker\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyStartMachineStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyStartRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"assertionEndRoot\",\"type\":\"bytes32\"}],\"name\":\"EndHistoryRootMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"h1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"h2\",\"type\":\"uint256\"}],\"name\":\"HeightDiffLtTwo\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thresholdBlocks\",\"type\":\"uint256\"}],\"name\":\"InsufficientConfirmationBlocks\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumEdgeType\",\"name\":\"edgeType\",\"type\":\"uint8\"}],\"name\":\"InvalidEdgeType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedHeight\",\"type\":\"uint256\"}],\"name\":\"InvalidEndHeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"InvalidHeights\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevels\",\"type\":\"uint8\"}],\"name\":\"LevelTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"NotPowerOfTwo\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"originId\",\"type\":\"bytes32\"}],\"name\":\"OriginIdMutualIdMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"confirmedRivalId\",\"type\":\"bytes32\"}],\"name\":\"RivalEdgeConfirmed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeLevels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numLevels\",\"type\":\"uint256\"}],\"name\":\"StakeAmountsMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroBigStepLevels\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"originId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasRival\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isLayerZero\",\"type\":\"bool\"}],\"name\":\"EdgeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"lowerChildId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"upperChildId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"lowerChildAlreadyExists\",\"type\":\"bool\"}],\"name\":\"EdgeBisected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"}],\"name\":\"EdgeConfirmedByChildren\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimingEdgeId\",\"type\":\"bytes32\"}],\"name\":\"EdgeConfirmedByClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"}],\"name\":\"EdgeConfirmedByOneStepProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalTimeUnrivaled\",\"type\":\"uint256\"}],\"name\":\"EdgeConfirmedByTime\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"EdgeRefunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYERZERO_BIGSTEPEDGE_HEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LAYERZERO_BLOCKEDGE_HEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LAYERZERO_SMALLSTEPEDGE_HEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_BIGSTEP_LEVEL\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assertionChain\",\"outputs\":[{\"internalType\":\"contractIAssertionChain\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"bisectionHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"prefixProof\",\"type\":\"bytes\"}],\"name\":\"bisectEdge\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"originId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"startHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"startHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"endHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"name\":\"calculateEdgeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"originId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"startHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"startHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"endHeight\",\"type\":\"uint256\"}],\"name\":\"calculateMutualId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"beforeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structOneStepData\",\"name\":\"oneStepData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"beforeHistoryInclusionProof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"afterHistoryInclusionProof\",\"type\":\"bytes32[]\"}],\"name\":\"confirmEdgeByOneStepProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"assertionState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionStateData\",\"name\":\"claimStateData\",\"type\":\"tuple\"}],\"name\":\"confirmEdgeByTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"}],\"name\":\"confirmedRival\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"endHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"prefixProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"internalType\":\"structCreateEdgeArgs\",\"name\":\"args\",\"type\":\"tuple\"}],\"name\":\"createLayerZeroEdge\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"edgeExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"edgeLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excessStakeReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"mutualId\",\"type\":\"bytes32\"}],\"name\":\"firstRival\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"getEdge\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"originId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"startHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"startHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"endHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"lowerChildId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"upperChildId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"claimId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"confirmedAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"enumEdgeStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"level\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"refunded\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"totalTimeUnrivaledCache\",\"type\":\"uint64\"}],\"internalType\":\"structChallengeEdge\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumEdgeType\",\"name\":\"eType\",\"type\":\"uint8\"}],\"name\":\"getLayerZeroEndHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"getPrevAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"hasLengthOneRival\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"hasRival\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAssertionChain\",\"name\":\"_assertionChain\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_challengePeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"_oneStepProofEntry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"contractIERC20\",\"name\":\"_stakeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_excessStakeReceiver\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"_stakeAmounts\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"edgeIds\",\"type\":\"bytes32[]\"}],\"name\":\"multiUpdateTimeCacheByChildren\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oneStepProofEntry\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"refundStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"stakeAmounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"timeUnrivaled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"}],\"name\":\"updateTimerCacheByChildren\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"edgeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"claimingEdgeId\",\"type\":\"bytes32\"}],\"name\":\"updateTimerCacheByClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6157f280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80635a48e0f41161010f578063c32d8c63116100a2578063eae0328b11610071578063eae0328b1461046d578063eb82415c14610480578063f8ee77d614610493578063fda2892e1461049c57600080fd5b8063c32d8c63146103ff578063c8bc4e4314610412578063e5b123da1461043a578063e94e051e1461045a57600080fd5b80638c1b3a40116100de5780638c1b3a40146103a6578063908517e9146103b9578063b2a1408e146103cc578063bce6f54f146103df57600080fd5b80635a48e0f41461034e5780635d9e244414610361578063748926f314610380578063750e0c0f1461039357600080fd5b80634056b2ce1161018757806348923bc51161015657806348923bc5146102d357806348dd2924146102fe57806351ed6a301461031857806354b641511461032b57600080fd5b80634056b2ce14610279578063416e66571461028c57806342e1aaa81461029557806346c2781a146102a857600080fd5b80631c1b4f3a116101c35780631c1b4f3a146102375780631dce51661461024a5780631e5a3553146102535780633e35f5e81461026657600080fd5b80624d8efe146101e957806305fae1411461020f5780631a72d54c14610222575b600080fd5b6101fc6101f736600461486e565b6104bc565b6040519081526020015b60405180910390f35b6101fc61021d3660046148b8565b6104d7565b610235610230366004614967565b61093c565b005b6101fc610245366004614a3a565b610cb9565b6101fc60095481565b610235610261366004614a3a565b610cda565b6101fc610274366004614a3a565b610ce8565b610235610287366004614a53565b610cfb565b6101fc600a5481565b6101fc6102a3366004614a8d565b610d15565b6007546102bb906001600160401b031681565b6040516001600160401b039091168152602001610206565b6008546102e6906001600160a01b031681565b6040516001600160a01b039091168152602001610206565b6007546102e690600160401b90046001600160a01b031681565b6005546102e6906001600160a01b031681565b61033e610339366004614a3a565b610d99565b6040519015158152602001610206565b6101fc61035c366004614a3a565b610da6565b600c5461036e9060ff1681565b60405160ff9091168152602001610206565b61023561038e366004614a3a565b610db3565b61033e6103a1366004614a3a565b610ea6565b6102356103b4366004614aaa565b610ebd565b61033e6103c7366004614a3a565b61106e565b6102356103da366004614b72565b61107b565b6101fc6103ed366004614a3a565b60009081526002602052604090205490565b6101fc61040d366004614bac565b611384565b610425610420366004614bee565b61139d565b60408051928352602083019190915201610206565b6101fc610448366004614a3a565b60009081526003602052604090205490565b6004546102e6906001600160a01b031681565b6101fc61047b366004614a3a565b611557565b61023561048e366004614c6d565b61156c565b6101fc600b5481565b6104af6104aa366004614a3a565b6115ba565b6040516102069190614cd8565b60006104cc8787878787876116d9565b979650505050505050565b60006104e161467d565b60006104fe6104f36020860186614dc0565b600c5460ff1661171e565b9050600061050b82610d15565b90506105156146c1565b600083600281111561052957610529614cae565b036107ed5761053b60a0870187614ddb565b905060000361055d57604051630c9ccac560e41b815260040160405180910390fd5b60008061056d60a0890189614ddb565b81019061057a919061506f565b6007548151602083015160408085015190516372880cd360e11b8152959850939650600160401b9092046001600160a01b0316945063e51019a6936105c89360608f0135939160040161513b565b60006040518083038186803b1580156105e057600080fd5b505afa1580156105f4573d6000803e3d6000fd5b505060075460208481015186519187015160408089015190516372880cd360e11b8152600160401b9095046001600160a01b0316965063e51019a695506106409492939260040161513b565b60006040518083038186803b15801561065857600080fd5b505afa15801561066c573d6000803e3d6000fd5b505050508060000151604001518860200135146106b65780516040908101519051631d31f4cd60e11b815260208a0135600482015260248101919091526044015b60405180910390fd5b6040805160c08101825260608a013580825260208481015190830152600754835163e531d8c760e01b815260048101929092529192830191600160401b90046001600160a01b03169063e531d8c790602401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107499190615188565b15158152600754602084810151604051632b5de4f360e11b81526004810191909152920191600091600160401b90046001600160a01b0316906356bbc9e690602401602060405180830381865afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc91906151aa565b6001600160401b031611815292516020840152905160409092019190915290505b600854600c5461081491600191899185916001600160a01b0390911690879060ff1661178d565b6005549094506001600160a01b03166000600661083460208a018a614dc0565b60ff1681548110610847576108476151c7565b60009182526020909120015490506001600160a01b0382161580159061086c57508015155b156108a85760008660c00151610882573061088f565b6004546001600160a01b03165b90506108a66001600160a01b0384163383856117e0565b505b8560400151866020015187600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a489606001518a608001518b60a001518c60c001518d60e00151604051610927959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a45050925195945050505050565b600054610100900460ff161580801561095c5750600054600160ff909116105b806109765750303b158015610976575060005460ff166001145b6109d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106ad565b6000805460ff1916600117905580156109fc576000805461ff0019166101001790555b6001600160a01b038c16610a235760405163641f043160e11b815260040160405180910390fd5b600780546001600160a01b03808f16600160401b0268010000000000000000600160e01b0319909216919091179091558a16610a725760405163fb60b0ef60e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b038c161790556001600160401b038b16600003610ab757604051632283bb7360e21b815260040160405180910390fd5b6007805467ffffffffffffffff19166001600160401b038d16179055600580546001600160a01b0319166001600160a01b03888116919091179091558516610b12576040516301e1d91560e31b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038716179055610b3689611851565b610b5657604051633abfb6ff60e21b8152600481018a90526024016106ad565b6009899055610b6488611851565b610b8457604051633abfb6ff60e21b8152600481018990526024016106ad565b600a889055610b9287611851565b610bb257604051633abfb6ff60e21b8152600481018890526024016106ad565b600b87905560ff8416600003610bdb57604051632a18f5b960e21b815260040160405180910390fd5b60fd8460ff161115610c055760405163040d23bf60e41b815260ff851660048201526024016106ad565b600c805460ff191660ff861617905581610c208560026151f3565b60ff1614610c585781610c348560026151f3565b604051622bb3a760e61b8152600481019290925260ff1660248201526044016106ad565b610c6460068484614703565b508015610cab576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60068181548110610cc957600080fd5b600091825260209091200154905081565b610ce560018261187b565b50565b6000610cf560018361188f565b92915050565b600c54610d11906001908490849060ff16611a19565b5050565b600080826002811115610d2a57610d2a614cae565b03610d3757505060095490565b6001826002811115610d4b57610d4b614cae565b03610d58575050600a5490565b6002826002811115610d6c57610d6c614cae565b03610d79575050600b5490565b81604051630efcb87b60e21b81526004016106ad919061520c565b919050565b6000610cf5600183611a74565b6000610cf5600183611aa9565b6000610dc0600183611afa565b9050610dcb81611b43565b6005546009820154600680546001600160a01b0390931692600092600160481b900460ff16908110610dff57610dff6151c7565b60009182526020909120015490506001600160a01b03821615801590610e2457508015155b15610e45576008830154610e45906001600160a01b03848116911683611c06565b6000848152600160205260409020610e5c90611c36565b604080516001600160a01b03851681526020810184905286917fa635398959ddb5ce3b14537edfc25b2e671274c9b8cad0f4bd634752e69007b6910160405180910390a350505050565b6000818152600160205260408120610cf590611c66565b6000610eca600189611aa9565b6007546040516304972af960e01b8152919250600160401b90046001600160a01b0316906304972af990610f049084908a9060040161521f565b60006040518083038186803b158015610f1c57600080fd5b505afa158015610f30573d6000803e3d6000fd5b5050505060006040518060600160405280886080016020810190610f549190615298565b6001600160401b03168152602001600760089054906101000a90046001600160a01b03166001600160a01b031663e78cea926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd991906152b5565b6001600160a01b0390811682528935602090920191909152600854600c54600a54600b54949550611021946001948f9416928e9288928e928e928e928e9260ff169190611c7f565b600089815260016020526040902061103890611c36565b6040518a907fe11db4b27bc8c6ea5943ecbb205ae1ca8d56c42c719717aaf8a53d43d0cee7c290600090a3505050505050505050565b6000610cf5600183611fe5565b6000611088600184611afa565b9050611093816120a0565b6110dc576110a0816120c4565b60088201546007830154604051631cb1906160e31b815260048101939093526001600160a01b03909116602483015260448201526064016106ad565b600080806009840154600c546110ff9160ff600160481b9091048116911661171e565b600281111561111057611110614cae565b149050808015611194575060078054908401546040516306106c4560e31b81526004810191909152600160401b9091046001600160a01b031690633083622890602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615188565b156113095760078054908401546040516372880cd360e11b8152600160401b9092046001600160a01b03169163e51019a6916111e091889060c08201359060e0830135906004016152d2565b60006040518083038186803b1580156111f857600080fd5b505afa15801561120c573d6000803e3d6000fd5b5050600754604051631171558560e01b815260c08801356004820152600160401b9091046001600160a01b0316925063117155859150602401602060405180830381865afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128691906151aa565b600754604051632b5de4f360e11b815260c08701356004820152600160401b9091046001600160a01b0316906356bbc9e690602401602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc91906151aa565b611306919061535f565b91505b60075460009061132890600190889086906001600160401b03166120f9565b600087815260016020526040902090915061134290611c36565b867f2e0808830a22204cb3fb8f8d784b28bc97e9ce2e39d2f9cde2860de0957d68eb8360405161137491815260200190565b60405180910390a3505050505050565b600061139386868686866121b8565b9695505050505050565b60008060008060006113ec898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019594939250506122129050565b815192955090935091501580611484578260400151836020015184600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a4866060015187608001518860a001518960c001518a60e0015160405161147b959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a45b8160400151826020015183600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a4856060015186608001518760a001518860c001518960e00151604051611503959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a48151604051821515815285908c907f7340510d24b7ec9b5c100f5500d93429d80d00d46f0d18e4e85d0c4cc22b99249060200160405180910390a4505191989197509095505050505050565b6000610cf5611567600184611afa565b612513565b60005b818110156115b5576115a383838381811061158c5761158c6151c7565b90506020020135600161187b90919063ffffffff16565b806115ad8161537f565b91505061156f565b505050565b6115c261474e565b6115cd600183611afa565b604080516101e0810182528254815260018084015460208301526002840154928201929092526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546001600160a01b038116610100830152600160a01b90046001600160401b039081166101208301526009840154908116610140830152909291610160840191600160401b900460ff169081111561168357611683614cae565b600181111561169457611694614cae565b81526009919091015460ff600160481b820481166020840152600160501b820416151560408301526001600160401b03600160581b9091041660609091015292915050565b60006116e887878787876121b8565b60408051602081019290925281018390526060016040516020818303038152906040528051906020012090509695505050505050565b60008260ff1660000361173357506000610cf5565b8160ff168360ff161161174857506001610cf5565b6117538260016151f3565b60ff168360ff160361176757506002610cf5565b6040516315c1b4af60e31b815260ff8085166004830152831660248201526044016106ad565b61179561467d565b6000806117a58989898988612558565b9150915060006117b6838a886129df565b905060006117c583838c612af2565b90506117d18b82612b2d565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905261184b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612e24565b50505050565b60008160000361186357506000919050565b6000611870600184615398565b929092161592915050565b6115b5828261188a8585612ef6565b612f7b565b60008181526020839052604081206118a690611c66565b6118c55760405162a7b02b60e01b8152600481018390526024016106ad565b60008281526020849052604081206118dc90611c36565b6000818152600186016020526040812054919250819003611910576040516336843d9f60e21b815260040160405180910390fd5b6040516815539492559053115160ba1b60208201526029016040516020818303038152906040528051906020012081036119795760008481526020869052604090206008015461197090600160a01b90046001600160401b031643615398565b92505050610cf5565b600081815260208690526040902061199090611c66565b6119af5760405162a7b02b60e01b8152600481018290526024016106ad565b60008181526020869052604080822060089081015487845291909220909101546001600160401b03600160a01b928390048116929091041680821115611a04576119f98183615398565b945050505050610cf5565b6000945050505050610cf5565b505092915050565b6000611a25858561188f565b9050611a3385858585613007565b600083815260208690526040902060090154611a5f90600160581b90046001600160401b0316826153ab565b9050611a6c858583612f7b565b505050505050565b6000611a808383611fe5565b8015611aa257506000828152602084905260409020611a9e90612513565b6001145b9392505050565b600080611ab68484611afa565b90505b6009810154600160481b900460ff1615611af25780546000908152600185016020526040902054611aea8582611afa565b915050611ab9565b549392505050565b6000818152602083905260408120611b1190611c66565b611b305760405162a7b02b60e01b8152600481018390526024016106ad565b5060009081526020919091526040902090565b60016009820154600160401b900460ff166001811115611b6557611b65614cae565b14611b9d57611b73816120c4565b6009820154604051633bc499ed60e21b81526106ad9291600160401b900460ff16906004016153be565b611ba6816120a0565b611bb3576110a0816120c4565b6009810154600160501b900460ff161515600103611bf057611bd4816120c4565b60405163307f766960e01b81526004016106ad91815260200190565b600901805460ff60501b1916600160501b179055565b6040516001600160a01b0383166024820152604481018290526115b590849063a9059cbb60e01b90606401611814565b6000610cf58260090160099054906101000a900460ff1683600001548460020154856001015486600401546121b8565b60080154600160a01b90046001600160401b0316151590565b60008b815260208d905260409020611c9690611c66565b611cb55760405162a7b02b60e01b8152600481018c90526024016106ad565b600260008c815260208e90526040902060090154611cdd90600160481b900460ff168561171e565b6002811115611cee57611cee614cae565b14611d2b5760008b815260208d905260409081902060090154905163348aefdf60e01b8152600160481b90910460ff1660048201526024016106ad565b60008b815260208d905260409020611d4290612513565b600114611d7c5760008b815260208d905260409020611d6090612513565b6040516306b595e560e41b81526004016106ad91815260200190565b60008b815260208d905260409020600201548b825b60018f600001600084815260200190815260200160002060090160099054906101000a900460ff1660ff161115611e395760008f60000160008481526020019081526020016000206000015490508f60010160008281526020019081526020016000205492508f60000160008481526020019081526020016000206002015482611e1b91906153d2565b611e2590856153ab565b9350611e3186836153d2565b915050611d91565b5050611e968d60000160008e8152602001908152602001600020600101548b60000135838b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061312f92505050565b60008b6001600160a01b031663b5112fd28b848e600001358f8060200190611ebe9190614ddb565b6040518663ffffffff1660e01b8152600401611ede9594939291906153e9565b602060405180830381865afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f919061544a565b9050611f848e60000160008f81526020019081526020016000206003015482846001611f4b91906153ab565b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061312f92505050565b611f8e8e8e6131bc565b60008d815260208f905260409020611fa590613226565b5050506000998a5250505060209790975250506040909320600901805467ffffffffffffffff60581b191667ffffffffffffffff60581b17905550505050565b6000818152602083905260408120611ffc90611c66565b61201b5760405162a7b02b60e01b8152600481018390526024016106ad565b600082815260208490526040812061203290611c36565b6000818152600186016020526040812054919250819003612066576040516336843d9f60e21b815260040160405180910390fd5b6040516815539492559053115160ba1b602082015260290160408051601f1981840301815291905280516020909101201415949350505050565b600781015460009015801590610cf5575050600801546001600160a01b0316151590565b6000610cf58260090160099054906101000a900460ff16836000015484600201548560010154866004015487600301546116d9565b600083815260208590526040812061211090611c66565b61212f5760405162a7b02b60e01b8152600481018590526024016106ad565b600061213b8686612ef6565b90506121506001600160401b038516826153ab565b9050826001600160401b031681101561218e5760405163011a8d4d60e41b8152600481018290526001600160401b03841660248201526044016106ad565b61219886866131bc565b60008581526020879052604090206121af90613226565b95945050505050565b6040516001600160f81b031960f887901b1660208201526021810185905260418101849052606181018390526081810182905260009060a10160405160208183030381529060405280519060200120905095945050505050565b600061221c61467d565b61222461467d565b60008087815260208990526040902060090154600160401b900460ff16600181111561225257612252614cae565b1461229157600086815260208890526040908190206009015490516323f8405d60e01b81526106ad918891600160401b90910460ff16906004016153be565b61229b8787611fe5565b6122bb576040516380e07e4560e01b8152600481018790526024016106ad565b6000868152602088905260408120604080516101e0810182528254815260018084015460208301526002840154928201929092526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546001600160a01b038116610100830152600160a01b90046001600160401b039081166101208301526009840154908116610140830152909291610160840191600160401b900460ff169081111561237f5761237f614cae565b600181111561239057612390614cae565b815260099190910154600160481b810460ff9081166020840152600160501b8204161515604080840191909152600160581b9091046001600160401b031660609092019190915281015160808201519192506000916123ef91906132a8565b90506000808780602001905181019061240891906154be565b90925090506124388961241c8560016153ab565b606087015160808801516124319060016153ab565b868661333c565b5050600061244461467d565b60006124658560000151866020015187604001518d888a610180015161360d565b9050612470816136a5565b600081815260208e90526040902090935061248a90611c66565b61249b576124988c82612b2d565b91505b506124a461467d565b60006124c586600001518c8789606001518a608001518b610180015161360d565b90506124d18d82612b2d565b9150506125018382600001518e60000160008f81526020019081526020016000206136ce9092919063ffffffff16565b919b909a509098509650505050505050565b6000808260020154836004015461252a9190615398565b905080600003610cf55761253d836120c4565b60405162a7b02b60e01b81526004016106ad91815260200190565b6040805160608082018352600080835260208301529181019190915260008061258d6125876020890189614dc0565b8561171e565b600281111561259e5761259e614cae565b0361282757602085015185516000036125ca576040516374b5e30d60e11b815260040160405180910390fd5b85516060880135146125ff5785516040516316c5de8f60e21b81526004810191909152606088013560248201526044016106ad565b8560400151612621576040516360b4921b60e11b815260040160405180910390fd5b856060015161264357604051635a2e8e1d60e11b815260040160405180910390fd5b61265060a0880188614ddb565b905060000361267257604051630c9ccac560e41b815260040160405180910390fd5b600061268160a0890189614ddb565b81019061268e919061506f565b509091506000905087608001516020015160028111156126b0576126b0614cae565b036126ce5760405163231b2f2960e11b815260040160405180910390fd5b60008760a001516020015160028111156126ea576126ea614cae565b0361270857604051638999857d60e01b815260040160405180910390fd5b6000866001600160a01b031663c39619c46127268a60800151613735565b6040518263ffffffff1660e01b81526004016127429190615521565b602060405180830381865afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612783919061544a565b90506000876001600160a01b031663c39619c46127a38b60a00151613735565b6040518263ffffffff1660e01b81526004016127bf9190615521565b602060405180830381865afa1580156127dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612800919061544a565b60408051606081018252938452602084019190915282019290925293509091506129d59050565b612835878760600135611a74565b61285b5760405160016292642960e01b03198152606087013560048201526024016106ad565b606086013560009081526020889052604081209061287882611c36565b905060006009830154600160401b900460ff16600181111561289c5761289c614cae565b146128ba576040516312459ffd60e01b815260040160405180910390fd5b60098201546128d390600160481b900460ff1686613770565b60ff166128e360208a018a614dc0565b60ff161461292c576128f86020890189614dc0565b600983015460405163564f308b60e11b815260ff9283166004820152600160481b90910490911660248201526044016106ad565b61293960a0890189614ddb565b905060000361295b57604051630c9ccac560e41b815260040160405180910390fd5b60008080808061296e60a08e018e614ddb565b81019061297b919061554f565b9450945094509450945061299987600101548689600201548661312f565b6129ad87600301548589600401548561312f565b6040518060600160405280868152602001858152602001828152508698509850505050505050505b9550959350505050565b604080516000808252602082019092528190612a0590612a00908751613792565b6137c8565b9050612a1083611851565b612a3057604051633abfb6ff60e21b8152600481018490526024016106ad565b82846040013514612a6157604080516337f318af60e21b8152908501356004820152602481018490526044016106ad565b612a7d846020013586602001518660400135886040015161312f565b612a8a6080850185614ddb565b9050600003612aac57604051631a1503a960e11b815260040160405180910390fd5b600080612abc6080870187614ddb565b810190612ac991906155ea565b9092509050612ae7836001602089013561243160408b0135836153ab565b509095945050505050565b612afa61474e565b612b2584846000602086018035906040880135906060890135903390612b20908b614dc0565b613961565b949350505050565b612b3561467d565b6000612b40836136a5565b6000818152602086905260409020909150612b5a90611c66565b15612b7b57604051635e76f9ef60e11b8152600481018290526024016106ad565b600081815260208581526040918290208551815590850151600180830191909155918501516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e085015160078201556101008501516008820180546101208801516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b03909416939093171790556101408601516009830180549190921667ffffffffffffffff19821681178355610160880151889590939268ffffffffffffffffff191690911790600160401b908490811115612c6a57612c6a614cae565b021790555061018082810151600990920180546101a08501516101c0909501516001600160401b0316600160581b0267ffffffffffffffff60581b19951515600160501b0260ff60501b1960ff909616600160481b02959095166affff00000000000000000019909216919091179390931793909316919091179091558301518351604085015160208601516080870151600094612d0d949093909290916121b8565b6000818152600187016020526040812054919250819003612d6c576040516815539492559053115160ba1b602082015260290160408051601f198184030181529181528151602092830120600085815260018a01909352912055612db4565b6040516815539492559053115160ba1b6020820152602901604051602081830303815290604052805190602001208103612db457600082815260018701602052604090208390555b6040805161010081018252848152602080820185905287518284015260e08801516060830152600086815290899052919091206080820190612df590612513565b815261018087015160ff166020820152911515604083015260e090950151151560609091015250919392505050565b6000612e79826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a6a9092919063ffffffff16565b8051909150156115b55780806020019051810190612e979190615188565b6115b55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ad565b600080612f03848461188f565b60008481526020869052604090206005015490915015611aa2576000838152602085905260408082206005810154835281832060099081015460069092015484529190922001546001600160401b03600160581b9283900481169290910416808210612f6f5780612f71565b815b61139390846153ab565b6000828152602084905260408120600901546001600160401b03600160581b9091048116908311612fac5782612fb5565b6001600160401b035b925080831115612ffc5750506000828152602084905260409020600901805467ffffffffffffffff60581b1916600160581b6001600160401b038416021790556001611aa2565b506000949350505050565b60008281526020859052604080822054858352912061302590611c36565b1461307357600083815260208590526040902061304190611c36565b6000838152602086905260409081902054905163e2e27f8760e01b8152600481019290925260248201526044016106ad565b600082815260208590526040808220600990810154868452919092209091015460ff600160481b928390048116926130ad92041683613770565b60ff161461184b57600083815260208590526040902060090154839083906130df90600160481b900460ff1684613770565b60008581526020889052604090819020600901549051637e726d1560e01b81526004810194909452602484019290925260ff9081166044840152600160481b9091041660648201526084016106ad565b600061316482848660405160200161314991815260200190565b60405160208183030381529060405280519060200120613a79565b90508085146131b55760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420696e636c7573696f6e2070726f6f6600000000000000000060448201526064016106ad565b5050505050565b60008181526020839052604081206131d390611c36565b6000818152600285016020526040902054909150801561321057604051630dd7028f60e41b815260048101849052602481018290526044016106ad565b5060009081526002909201602052604090912055565b60006009820154600160401b900460ff16600181111561324857613248614cae565b1461328057613256816120c4565b60098201546040516323f8405d60e01b81526106ad9291600160401b900460ff16906004016153be565b60090180546001600160401b03431668ffffffffffffffffff1990911617600160401b179055565b600060026132b68484615398565b10156132df5760405163240a616560e21b815260048101849052602481018390526044016106ad565b6132e98383615398565b600203613302576132fb8360016153ab565b9050610cf5565b600083613310600185615398565b189050600061331e82613b1b565b9050600019811b80613331600187615398565b169695505050505050565b600085116133835760405162461bcd60e51b815260206004820152601460248201527305072652d73697a652063616e6e6f7420626520360641b60448201526064016106ad565b8561338d836137c8565b146133da5760405162461bcd60e51b815260206004820152601b60248201527f50726520657870616e73696f6e20726f6f74206d69736d61746368000000000060448201526064016106ad565b846133e483613c4a565b1461343b5760405162461bcd60e51b815260206004820152602160248201527f5072652073697a6520646f6573206e6f74206d6174636820657870616e73696f6044820152603760f91b60648201526084016106ad565b82851061348a5760405162461bcd60e51b815260206004820181905260248201527f5072652073697a65206e6f74206c657373207468616e20706f73742073697a6560448201526064016106ad565b600085905060008061349f8560008751613ca5565b90505b858310156135575760006134b68488613e01565b9050845183106134fd5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016106ad565b6135218282878681518110613514576135146151c7565b6020026020010151613ee5565b91506001811b61353181866153ab565b94508785111561354357613543615643565b8361354d8161537f565b94505050506134a2565b86613561826137c8565b146135b95760405162461bcd60e51b815260206004820152602260248201527f506f737420657870616e73696f6e20726f6f74206e6f7420657175616c20706f6044820152611cdd60f21b60648201526084016106ad565b835182146136025760405162461bcd60e51b8152602060048201526016602482015275496e636f6d706c6574652070726f6f6620757361676560501b60448201526064016106ad565b505050505050505050565b61361561474e565b6136228787878787614421565b50604080516101e08101825296875260208701959095529385019290925260608401526080830152600060a0830181905260c0830181905260e0830181905261010083018190526001600160401b0343166101208401526101408301819052610160830181905260ff9091166101808301526101a082018190526101c082015290565b6000610cf5826101800151836000015184604001518560200151866080015187606001516116d9565b60058301541515806136e35750600683015415155b15613725576136f1836120c4565b600584015460068501546040516308b0e71d60e41b81526004810193909352602483019190915260448201526064016106ad565b6005830191909155600690910155565b61373d6147c8565b6040518060400160405280836000015181526020018360200151600281111561376857613768614cae565b905292915050565b60008061377e8460016151f3565b905061378a818461171e565b509392505050565b6060611aa2836000846040516020016137ad91815260200190565b60405160208183030381529060405280519060200120613ee5565b6000808251116138135760405162461bcd60e51b815260206004820152601660248201527522b6b83a3c9036b2b935b6329032bc3830b739b4b7b760511b60448201526064016106ad565b6040825111156138655760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c6172676500000000000060448201526064016106ad565b6000805b835181101561395a576000848281518110613886576138866151c7565b60200260200101519050826000801b036138f25780156138ed57809250600185516138b19190615398565b82146138ed576040516138d4908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b613947565b80156139115760408051602081018390529081018490526060016138d4565b60405161392e908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b50806139528161537f565b915050613869565b5092915050565b61396961474e565b6001600160a01b0383166139905760405163f289e65760e01b815260040160405180910390fd5b60008490036139b257604051636932bcfd60e01b815260040160405180910390fd5b6139bf8989898989614421565b604051806101e001604052808a81526020018981526020018881526020018781526020018681526020016000801b81526020016000801b8152602001858152602001846001600160a01b03168152602001436001600160401b0316815260200160006001600160401b0316815260200160006001811115613a4257613a42614cae565b815260ff84166020820152600060408201819052606090910152905098975050505050505050565b6060612b2584846000856144b1565b8251600090610100811115613aac57604051637ed6198f60e11b81526004810182905261010060248201526044016106ad565b8260005b82811015613b11576000878281518110613acc57613acc6151c7565b60200260200101519050816001901b8716600003613af857826000528060205260406000209250613b08565b8060005282602052604060002092505b50600101613ab0565b5095945050505050565b600081600003613b6d5760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e7420626974730000000060448201526064016106ad565b600160801b8210613b8b57608091821c91613b8890826153ab565b90505b600160401b8210613ba957604091821c91613ba690826153ab565b90505b6401000000008210613bc857602091821c91613bc590826153ab565b90505b620100008210613be557601091821c91613be290826153ab565b90505b6101008210613c0157600891821c91613bfe90826153ab565b90505b60108210613c1c57600491821c91613c1990826153ab565b90505b60048210613c3757600291821c91613c3490826153ab565b90505b60028210610d9457610cf56001826153ab565b600080805b835181101561395a57838181518110613c6a57613c6a6151c7565b60200260200101516000801b14613c9357613c8681600261573d565b613c9090836153ab565b91505b80613c9d8161537f565b915050613c4f565b6060818310613cf05760405162461bcd60e51b815260206004820152601760248201527614dd185c9d081b9bdd081b195cdcc81d1a185b88195b99604a1b60448201526064016106ad565b8351821115613d4b5760405162461bcd60e51b815260206004820152602160248201527f456e64206e6f74206c657373206f7220657175616c207468616e206c656e67746044820152600d60fb1b60648201526084016106ad565b6000613d578484615398565b6001600160401b03811115613d6e57613d6e614e21565b604051908082528060200260200182016040528015613d97578160200160208202803683370190505b509050835b83811015613df857858181518110613db657613db66151c7565b6020026020010151828683613dcb9190615398565b81518110613ddb57613ddb6151c7565b602090810291909101015280613df08161537f565b915050613d9c565b50949350505050565b6000818310613e4c5760405162461bcd60e51b815260206004820152601760248201527614dd185c9d081b9bdd081b195cdcc81d1a185b88195b99604a1b60448201526064016106ad565b6000613e59838518613b1b565b905060006001613e6983826153ab565b6001901b613e779190615398565b90508481168482168115613e8e576119f9826145d7565b8015613e9d576119f981613b1b565b60405162461bcd60e51b815260206004820152601b60248201527f426f7468207920616e64207a2063616e6e6f74206265207a65726f000000000060448201526064016106ad565b606060408310613f285760405162461bcd60e51b815260206004820152600e60248201526d098caeccad840e8dede40d0d2ced60931b60448201526064016106ad565b6000829003613f795760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420617070656e6420656d7074792073756274726565000000000060448201526064016106ad565b604084511115613fcb5760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c6172676500000000000060448201526064016106ad565b8351600003614049576000613fe18460016153ab565b6001600160401b03811115613ff857613ff8614e21565b604051908082528060200260200182016040528015614021578160200160208202803683370190505b50905082818581518110614037576140376151c7565b60209081029190910101529050611aa2565b835183106140b75760405162461bcd60e51b815260206004820152603560248201527f4c6576656c2067726561746572207468616e2068696768657374206c6576656c6044820152741037b31031bab93932b73a1032bc3830b739b4b7b760591b60648201526084016106ad565b8160006140c386613c4a565b905060006140d286600261573d565b6140dc90836153ab565b905060006140e983613b1b565b6140f283613b1b565b1161413f5787516001600160401b0381111561411057614110614e21565b604051908082528060200260200182016040528015614139578160200160208202803683370190505b5061418e565b875161414c9060016153ab565b6001600160401b0381111561416357614163614e21565b60405190808252806020026020018201604052801561418c578160200160208202803683370190505b505b90506040815111156141e25760405162461bcd60e51b815260206004820152601c60248201527f417070656e642063726561746573206f76657273697a6520747265650000000060448201526064016106ad565b60005b8851811015614383578781101561427157888181518110614208576142086151c7565b60200260200101516000801b1461426c5760405162461bcd60e51b815260206004820152602260248201527f417070656e642061626f7665206c65617374207369676e69666963616e7420626044820152611a5d60f21b60648201526084016106ad565b614371565b60008590036142b75788818151811061428c5761428c6151c7565b60200260200101518282815181106142a6576142a66151c7565b602002602001018181525050614371565b8881815181106142c9576142c96151c7565b60200260200101516000801b0361430157848282815181106142ed576142ed6151c7565b602090810291909101015260009450614371565b6000801b828281518110614317576143176151c7565b602002602001018181525050888181518110614335576143356151c7565b602002602001015185604051602001614358929190918252602082015260400190565b6040516020818303038152906040528051906020012094505b8061437b8161537f565b9150506141e5565b5083156143b75783816001835161439a9190615398565b815181106143aa576143aa6151c7565b6020026020010181815250505b80600182516143c69190615398565b815181106143d6576143d66151c7565b60200260200101516000801b036104cc5760405162461bcd60e51b815260206004820152600f60248201526e4c61737420656e747279207a65726f60881b60448201526064016106ad565b60008590036144435760405163235e76ef60e21b815260040160405180910390fd5b82811161446d576040516308183ebd60e21b815260048101849052602481018290526044016106ad565b600084900361448f576040516320f1a0f960e21b815260040160405180910390fd5b60008290036131b557604051635cb6e5bb60e01b815260040160405180910390fd5b6060824710156145125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106ad565b6001600160a01b0385163b6145695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ad565b600080866001600160a01b03168587604051614585919061576d565b60006040518083038185875af1925050503d80600081146145c2576040519150601f19603f3d011682016040523d82523d6000602084013e6145c7565b606091505b50915091506104cc828286614644565b60008082116146285760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e7420626974730000000060448201526064016106ad565b60008280614637600182615398565b16189050611aa281613b1b565b60608315614653575081611aa2565b8251156146635782518084602001fd5b8160405162461bcd60e51b81526004016106ad9190615789565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c0810182526000808252602082018190529181018290526060810191909152608081016146f16147e7565b81526020016146fe6147e7565b905290565b82805482825590600052602060002090810192821561473e579160200282015b8281111561473e578235825591602001919060010190614723565b5061474a92915061480e565b5090565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290529061016082019081526000602082018190526040820181905260609091015290565b60405180604001604052806147db614823565b81526020016000905290565b60405180606001604052806147fa614823565b815260200160008152600060209091015290565b5b8082111561474a576000815560010161480f565b604051806040016040528061483661483f565b81526020016146fe5b60405180604001604052806002906020820280368337509192915050565b803560ff81168114610d9457600080fd5b60008060008060008060c0878903121561488757600080fd5b6148908761485d565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b6000602082840312156148ca57600080fd5b81356001600160401b038111156148e057600080fd5b820160c08185031215611aa257600080fd5b6001600160a01b0381168114610ce557600080fd5b6001600160401b0381168114610ce557600080fd5b60008083601f84011261492e57600080fd5b5081356001600160401b0381111561494557600080fd5b6020830191508360208260051b850101111561496057600080fd5b9250929050565b60008060008060008060008060008060006101408c8e03121561498957600080fd5b8b35614994816148f2565b9a5060208c01356149a481614907565b995060408c01356149b4816148f2565b985060608c0135975060808c0135965060a08c0135955060c08c01356149d9816148f2565b945060e08c01356149e9816148f2565b93506149f86101008d0161485d565b92506101208c01356001600160401b03811115614a1457600080fd5b614a208e828f0161491c565b915080935050809150509295989b509295989b9093969950565b600060208284031215614a4c57600080fd5b5035919050565b60008060408385031215614a6657600080fd5b50508035926020909101359150565b60038110610ce557600080fd5b8035610d9481614a75565b600060208284031215614a9f57600080fd5b8135611aa281614a75565b6000806000806000806000878903610120811215614ac757600080fd5b8835975060208901356001600160401b0380821115614ae557600080fd5b908a01906040828d031215614af957600080fd5b81985060a0603f1984011215614b0e57600080fd5b60408b01975060e08b0135925080831115614b2857600080fd5b614b348c848d0161491c565b90975095506101008b0135925086915080831115614b5157600080fd5b5050614b5f8a828b0161491c565b989b979a50959850939692959293505050565b600080828403610120811215614b8757600080fd5b83359250610100601f1982011215614b9e57600080fd5b506020830190509250929050565b600080600080600060a08688031215614bc457600080fd5b614bcd8661485d565b97602087013597506040870135966060810135965060800135945092505050565b60008060008060608587031215614c0457600080fd5b843593506020850135925060408501356001600160401b0380821115614c2957600080fd5b818701915087601f830112614c3d57600080fd5b813581811115614c4c57600080fd5b886020828501011115614c5e57600080fd5b95989497505060200194505050565b60008060208385031215614c8057600080fd5b82356001600160401b03811115614c9657600080fd5b614ca28582860161491c565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60028110614cd457614cd4614cae565b9052565b60006101e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151614d46828501826001600160a01b03169052565b5050610120838101516001600160401b038116848301525050610140838101516001600160401b03811684830152505061016080840151614d8982850182614cc4565b50506101808381015160ff16908301526101a0808401511515908301526101c0808401516001600160401b03811682850152611a11565b600060208284031215614dd257600080fd5b611aa28261485d565b6000808335601e19843603018112614df257600080fd5b8301803591506001600160401b03821115614e0c57600080fd5b60200191503681900382131561496057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614e5957614e59614e21565b60405290565b604080519081016001600160401b0381118282101715614e5957614e59614e21565b604051601f8201601f191681016001600160401b0381118282101715614ea957614ea9614e21565b604052919050565b60006001600160401b03821115614eca57614eca614e21565b5060051b60200190565b600082601f830112614ee557600080fd5b81356020614efa614ef583614eb1565b614e81565b82815260059290921b84018101918181019086841115614f1957600080fd5b8286015b84811015614f345780358352918301918301614f1d565b509695505050505050565b600082601f830112614f5057600080fd5b614f58614e5f565b806040840185811115614f6a57600080fd5b845b81811015612ae7578035614f7f81614907565b845260209384019301614f6c565b6000818303610100811215614fa157600080fd5b614fa9614e37565b915060c0811215614fb957600080fd5b614fc1614e37565b6080821215614fcf57600080fd5b614fd7614e5f565b915084601f850112614fe857600080fd5b614ff0614e5f565b80604086018781111561500257600080fd5b865b8181101561501c578035845260209384019301615004565b5081855261502a8882614f3f565b602086015250505081815261504160808501614a82565b602082015260a08401356040820152808352505060c0820135602082015260e0820135604082015292915050565b6000806000610220848603121561508557600080fd5b83356001600160401b0381111561509b57600080fd5b6150a786828701614ed4565b9350506150b78560208601614f8d565b91506150c7856101208601614f8d565b90509250925092565b80518260005b60028110156150f55782518252602092830192909101906001016150d6565b5050506020808201516040840160005b6002811015611a6c5782516001600160401b031682529183019190830190600101615105565b60038110610ce557610ce5614cae565b6000610120820190508582526151556020830186516150d0565b60208501516151638161512b565b60a08301526040949094015160c082015260e081019290925261010090910152919050565b60006020828403121561519a57600080fd5b81518015158114611aa257600080fd5b6000602082840312156151bc57600080fd5b8151611aa281614907565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160190811115610cf557610cf56151dd565b602081016152198361512b565b91905290565b600060c08201905083825282356020830152602083013560408301526040830135615249816148f2565b6001600160a01b031660608381019190915283013561526781614907565b6001600160401b0380821660808501526080850135915061528782614907565b80821660a085015250509392505050565b6000602082840312156152aa57600080fd5b8135611aa281614907565b6000602082840312156152c757600080fd5b8151611aa2816148f2565b8481526101208101602060408682850137606083016040870160005b600281101561531d57813561530281614907565b6001600160401b0316835291830191908301906001016152ee565b50505050608085013561532f81614a75565b6153388161512b565b8060a08401525060a085013560c08301528360e08301528261010083015295945050505050565b6001600160401b0382811682821603908082111561395a5761395a6151dd565b600060018201615391576153916151dd565b5060010190565b81810381811115610cf557610cf56151dd565b80820180821115610cf557610cf56151dd565b82815260408101611aa26020830184614cc4565b8082028115828204841417610cf557610cf56151dd565b8551815260018060a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561545c57600080fd5b5051919050565b600082601f83011261547457600080fd5b81516020615484614ef583614eb1565b82815260059290921b840181019181810190868411156154a357600080fd5b8286015b84811015614f3457805183529183019183016154a7565b600080604083850312156154d157600080fd5b82516001600160401b03808211156154e857600080fd5b6154f486838701615463565b9350602085015191508082111561550a57600080fd5b5061551785828601615463565b9150509250929050565b600060a0820190506155348284516150d0565b60208301516155428161512b565b8060808401525092915050565b600080600080600060a0868803121561556757600080fd5b853594506020860135935060408601356001600160401b038082111561558c57600080fd5b61559889838a01614ed4565b945060608801359150808211156155ae57600080fd5b6155ba89838a01614ed4565b935060808801359150808211156155d057600080fd5b506155dd88828901614ed4565b9150509295509295909350565b600080604083850312156155fd57600080fd5b82356001600160401b038082111561561457600080fd5b61562086838701614ed4565b9350602085013591508082111561563657600080fd5b5061551785828601614ed4565b634e487b7160e01b600052600160045260246000fd5b600181815b8085111561569457816000190482111561567a5761567a6151dd565b8085161561568757918102915b93841c939080029061565e565b509250929050565b6000826156ab57506001610cf5565b816156b857506000610cf5565b81600181146156ce57600281146156d8576156f4565b6001915050610cf5565b60ff8411156156e9576156e96151dd565b50506001821b610cf5565b5060208310610133831016604e8410600b8410161715615717575081810a610cf5565b6157218383615659565b8060001904821115615735576157356151dd565b029392505050565b6000611aa2838361569c565b60005b8381101561576457818101518382015260200161574c565b50506000910152565b6000825161577f818460208701615749565b9190910192915050565b60208152600082518060208401526157a8816040850160208701615749565b601f01601f1916919091016040019291505056fea2646970667358221220e773f98657457e42a32f0841fc433b8ce37459d1b8f2ba51e30616632e1682ad64736f6c63430008110033", + Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6157f280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80635a48e0f41161010f578063c32d8c63116100a2578063eae0328b11610071578063eae0328b1461046d578063eb82415c14610480578063f8ee77d614610493578063fda2892e1461049c57600080fd5b8063c32d8c63146103ff578063c8bc4e4314610412578063e5b123da1461043a578063e94e051e1461045a57600080fd5b80638c1b3a40116100de5780638c1b3a40146103a6578063908517e9146103b9578063b2a1408e146103cc578063bce6f54f146103df57600080fd5b80635a48e0f41461034e5780635d9e244414610361578063748926f314610380578063750e0c0f1461039357600080fd5b80634056b2ce1161018757806348923bc51161015657806348923bc5146102d357806348dd2924146102fe57806351ed6a301461031857806354b641511461032b57600080fd5b80634056b2ce14610279578063416e66571461028c57806342e1aaa81461029557806346c2781a146102a857600080fd5b80631c1b4f3a116101c35780631c1b4f3a146102375780631dce51661461024a5780631e5a3553146102535780633e35f5e81461026657600080fd5b80624d8efe146101e957806305fae1411461020f5780631a72d54c14610222575b600080fd5b6101fc6101f736600461486e565b6104bc565b6040519081526020015b60405180910390f35b6101fc61021d3660046148b8565b6104d7565b610235610230366004614967565b61093c565b005b6101fc610245366004614a3a565b610cb9565b6101fc60095481565b610235610261366004614a3a565b610cda565b6101fc610274366004614a3a565b610ce8565b610235610287366004614a53565b610cfb565b6101fc600a5481565b6101fc6102a3366004614a8d565b610d15565b6007546102bb906001600160401b031681565b6040516001600160401b039091168152602001610206565b6008546102e6906001600160a01b031681565b6040516001600160a01b039091168152602001610206565b6007546102e690600160401b90046001600160a01b031681565b6005546102e6906001600160a01b031681565b61033e610339366004614a3a565b610d99565b6040519015158152602001610206565b6101fc61035c366004614a3a565b610da6565b600c5461036e9060ff1681565b60405160ff9091168152602001610206565b61023561038e366004614a3a565b610db3565b61033e6103a1366004614a3a565b610ea6565b6102356103b4366004614aaa565b610ebd565b61033e6103c7366004614a3a565b61106e565b6102356103da366004614b72565b61107b565b6101fc6103ed366004614a3a565b60009081526002602052604090205490565b6101fc61040d366004614bac565b611384565b610425610420366004614bee565b61139d565b60408051928352602083019190915201610206565b6101fc610448366004614a3a565b60009081526003602052604090205490565b6004546102e6906001600160a01b031681565b6101fc61047b366004614a3a565b611557565b61023561048e366004614c6d565b61156c565b6101fc600b5481565b6104af6104aa366004614a3a565b6115ba565b6040516102069190614cd8565b60006104cc8787878787876116d9565b979650505050505050565b60006104e161467d565b60006104fe6104f36020860186614dc0565b600c5460ff1661171e565b9050600061050b82610d15565b90506105156146c1565b600083600281111561052957610529614cae565b036107ed5761053b60a0870187614ddb565b905060000361055d57604051630c9ccac560e41b815260040160405180910390fd5b60008061056d60a0890189614ddb565b81019061057a919061506f565b6007548151602083015160408085015190516372880cd360e11b8152959850939650600160401b9092046001600160a01b0316945063e51019a6936105c89360608f0135939160040161513b565b60006040518083038186803b1580156105e057600080fd5b505afa1580156105f4573d6000803e3d6000fd5b505060075460208481015186519187015160408089015190516372880cd360e11b8152600160401b9095046001600160a01b0316965063e51019a695506106409492939260040161513b565b60006040518083038186803b15801561065857600080fd5b505afa15801561066c573d6000803e3d6000fd5b505050508060000151604001518860200135146106b65780516040908101519051631d31f4cd60e11b815260208a0135600482015260248101919091526044015b60405180910390fd5b6040805160c08101825260608a013580825260208481015190830152600754835163e531d8c760e01b815260048101929092529192830191600160401b90046001600160a01b03169063e531d8c790602401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107499190615188565b15158152600754602084810151604051632b5de4f360e11b81526004810191909152920191600091600160401b90046001600160a01b0316906356bbc9e690602401602060405180830381865afa1580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc91906151aa565b6001600160401b031611815292516020840152905160409092019190915290505b600854600c5461081491600191899185916001600160a01b0390911690879060ff1661178d565b6005549094506001600160a01b03166000600661083460208a018a614dc0565b60ff1681548110610847576108476151c7565b60009182526020909120015490506001600160a01b0382161580159061086c57508015155b156108a85760008660c00151610882573061088f565b6004546001600160a01b03165b90506108a66001600160a01b0384163383856117e0565b505b8560400151866020015187600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a489606001518a608001518b60a001518c60c001518d60e00151604051610927959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a45050925195945050505050565b600054610100900460ff161580801561095c5750600054600160ff909116105b806109765750303b158015610976575060005460ff166001145b6109d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106ad565b6000805460ff1916600117905580156109fc576000805461ff0019166101001790555b6001600160a01b038c16610a235760405163641f043160e11b815260040160405180910390fd5b600780546001600160a01b03808f16600160401b0268010000000000000000600160e01b0319909216919091179091558a16610a725760405163fb60b0ef60e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b038c161790556001600160401b038b16600003610ab757604051632283bb7360e21b815260040160405180910390fd5b6007805467ffffffffffffffff19166001600160401b038d16179055600580546001600160a01b0319166001600160a01b03888116919091179091558516610b12576040516301e1d91560e31b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038716179055610b3689611851565b610b5657604051633abfb6ff60e21b8152600481018a90526024016106ad565b6009899055610b6488611851565b610b8457604051633abfb6ff60e21b8152600481018990526024016106ad565b600a889055610b9287611851565b610bb257604051633abfb6ff60e21b8152600481018890526024016106ad565b600b87905560ff8416600003610bdb57604051632a18f5b960e21b815260040160405180910390fd5b60fd8460ff161115610c055760405163040d23bf60e41b815260ff851660048201526024016106ad565b600c805460ff191660ff861617905581610c208560026151f3565b60ff1614610c585781610c348560026151f3565b604051622bb3a760e61b8152600481019290925260ff1660248201526044016106ad565b610c6460068484614703565b508015610cab576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60068181548110610cc957600080fd5b600091825260209091200154905081565b610ce560018261187b565b50565b6000610cf560018361188f565b92915050565b600c54610d11906001908490849060ff16611a19565b5050565b600080826002811115610d2a57610d2a614cae565b03610d3757505060095490565b6001826002811115610d4b57610d4b614cae565b03610d58575050600a5490565b6002826002811115610d6c57610d6c614cae565b03610d79575050600b5490565b81604051630efcb87b60e21b81526004016106ad919061520c565b919050565b6000610cf5600183611a74565b6000610cf5600183611aa9565b6000610dc0600183611afa565b9050610dcb81611b43565b6005546009820154600680546001600160a01b0390931692600092600160481b900460ff16908110610dff57610dff6151c7565b60009182526020909120015490506001600160a01b03821615801590610e2457508015155b15610e45576008830154610e45906001600160a01b03848116911683611c06565b6000848152600160205260409020610e5c90611c36565b604080516001600160a01b03851681526020810184905286917fa635398959ddb5ce3b14537edfc25b2e671274c9b8cad0f4bd634752e69007b6910160405180910390a350505050565b6000818152600160205260408120610cf590611c66565b6000610eca600189611aa9565b6007546040516304972af960e01b8152919250600160401b90046001600160a01b0316906304972af990610f049084908a9060040161521f565b60006040518083038186803b158015610f1c57600080fd5b505afa158015610f30573d6000803e3d6000fd5b5050505060006040518060600160405280886080016020810190610f549190615298565b6001600160401b03168152602001600760089054906101000a90046001600160a01b03166001600160a01b031663e78cea926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd991906152b5565b6001600160a01b0390811682528935602090920191909152600854600c54600a54600b54949550611021946001948f9416928e9288928e928e928e928e9260ff169190611c7f565b600089815260016020526040902061103890611c36565b6040518a907fe11db4b27bc8c6ea5943ecbb205ae1ca8d56c42c719717aaf8a53d43d0cee7c290600090a3505050505050505050565b6000610cf5600183611fe5565b6000611088600184611afa565b9050611093816120a0565b6110dc576110a0816120c4565b60088201546007830154604051631cb1906160e31b815260048101939093526001600160a01b03909116602483015260448201526064016106ad565b600080806009840154600c546110ff9160ff600160481b9091048116911661171e565b600281111561111057611110614cae565b149050808015611194575060078054908401546040516306106c4560e31b81526004810191909152600160401b9091046001600160a01b031690633083622890602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190615188565b156113095760078054908401546040516372880cd360e11b8152600160401b9092046001600160a01b03169163e51019a6916111e091889060c08201359060e0830135906004016152d2565b60006040518083038186803b1580156111f857600080fd5b505afa15801561120c573d6000803e3d6000fd5b5050600754604051631171558560e01b815260c08801356004820152600160401b9091046001600160a01b0316925063117155859150602401602060405180830381865afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128691906151aa565b600754604051632b5de4f360e11b815260c08701356004820152600160401b9091046001600160a01b0316906356bbc9e690602401602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc91906151aa565b611306919061535f565b91505b60075460009061132890600190889086906001600160401b03166120f9565b600087815260016020526040902090915061134290611c36565b867f2e0808830a22204cb3fb8f8d784b28bc97e9ce2e39d2f9cde2860de0957d68eb8360405161137491815260200190565b60405180910390a3505050505050565b600061139386868686866121b8565b9695505050505050565b60008060008060006113ec898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019594939250506122129050565b815192955090935091501580611484578260400151836020015184600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a4866060015187608001518860a001518960c001518a60e0015160405161147b959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a45b8160400151826020015183600001517faa4b66b1ce938c06e2a3f8466bae10ef62e747630e3859889f4719fc6427b5a4856060015186608001518760a001518860c001518960e00151604051611503959493929190948552602085019390935260ff919091166040840152151560608301521515608082015260a00190565b60405180910390a48151604051821515815285908c907f7340510d24b7ec9b5c100f5500d93429d80d00d46f0d18e4e85d0c4cc22b99249060200160405180910390a4505191989197509095505050505050565b6000610cf5611567600184611afa565b612513565b60005b818110156115b5576115a383838381811061158c5761158c6151c7565b90506020020135600161187b90919063ffffffff16565b806115ad8161537f565b91505061156f565b505050565b6115c261474e565b6115cd600183611afa565b604080516101e0810182528254815260018084015460208301526002840154928201929092526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546001600160a01b038116610100830152600160a01b90046001600160401b039081166101208301526009840154908116610140830152909291610160840191600160401b900460ff169081111561168357611683614cae565b600181111561169457611694614cae565b81526009919091015460ff600160481b820481166020840152600160501b820416151560408301526001600160401b03600160581b9091041660609091015292915050565b60006116e887878787876121b8565b60408051602081019290925281018390526060016040516020818303038152906040528051906020012090509695505050505050565b60008260ff1660000361173357506000610cf5565b8160ff168360ff161161174857506001610cf5565b6117538260016151f3565b60ff168360ff160361176757506002610cf5565b6040516315c1b4af60e31b815260ff8085166004830152831660248201526044016106ad565b61179561467d565b6000806117a58989898988612558565b9150915060006117b6838a886129df565b905060006117c583838c612af2565b90506117d18b82612b2d565b9b9a5050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905261184b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612e24565b50505050565b60008160000361186357506000919050565b6000611870600184615398565b929092161592915050565b6115b5828261188a8585612ef6565b612f7b565b60008181526020839052604081206118a690611c66565b6118c55760405162a7b02b60e01b8152600481018390526024016106ad565b60008281526020849052604081206118dc90611c36565b6000818152600186016020526040812054919250819003611910576040516336843d9f60e21b815260040160405180910390fd5b6040516815539492559053115160ba1b60208201526029016040516020818303038152906040528051906020012081036119795760008481526020869052604090206008015461197090600160a01b90046001600160401b031643615398565b92505050610cf5565b600081815260208690526040902061199090611c66565b6119af5760405162a7b02b60e01b8152600481018290526024016106ad565b60008181526020869052604080822060089081015487845291909220909101546001600160401b03600160a01b928390048116929091041680821115611a04576119f98183615398565b945050505050610cf5565b6000945050505050610cf5565b505092915050565b6000611a25858561188f565b9050611a3385858585613007565b600083815260208690526040902060090154611a5f90600160581b90046001600160401b0316826153ab565b9050611a6c858583612f7b565b505050505050565b6000611a808383611fe5565b8015611aa257506000828152602084905260409020611a9e90612513565b6001145b9392505050565b600080611ab68484611afa565b90505b6009810154600160481b900460ff1615611af25780546000908152600185016020526040902054611aea8582611afa565b915050611ab9565b549392505050565b6000818152602083905260408120611b1190611c66565b611b305760405162a7b02b60e01b8152600481018390526024016106ad565b5060009081526020919091526040902090565b60016009820154600160401b900460ff166001811115611b6557611b65614cae565b14611b9d57611b73816120c4565b6009820154604051633bc499ed60e21b81526106ad9291600160401b900460ff16906004016153be565b611ba6816120a0565b611bb3576110a0816120c4565b6009810154600160501b900460ff161515600103611bf057611bd4816120c4565b60405163307f766960e01b81526004016106ad91815260200190565b600901805460ff60501b1916600160501b179055565b6040516001600160a01b0383166024820152604481018290526115b590849063a9059cbb60e01b90606401611814565b6000610cf58260090160099054906101000a900460ff1683600001548460020154856001015486600401546121b8565b60080154600160a01b90046001600160401b0316151590565b60008b815260208d905260409020611c9690611c66565b611cb55760405162a7b02b60e01b8152600481018c90526024016106ad565b600260008c815260208e90526040902060090154611cdd90600160481b900460ff168561171e565b6002811115611cee57611cee614cae565b14611d2b5760008b815260208d905260409081902060090154905163348aefdf60e01b8152600160481b90910460ff1660048201526024016106ad565b60008b815260208d905260409020611d4290612513565b600114611d7c5760008b815260208d905260409020611d6090612513565b6040516306b595e560e41b81526004016106ad91815260200190565b60008b815260208d905260409020600201548b825b60018f600001600084815260200190815260200160002060090160099054906101000a900460ff1660ff161115611e395760008f60000160008481526020019081526020016000206000015490508f60010160008281526020019081526020016000205492508f60000160008481526020019081526020016000206002015482611e1b91906153d2565b611e2590856153ab565b9350611e3186836153d2565b915050611d91565b5050611e968d60000160008e8152602001908152602001600020600101548b60000135838b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061312f92505050565b60008b6001600160a01b031663b5112fd28b848e600001358f8060200190611ebe9190614ddb565b6040518663ffffffff1660e01b8152600401611ede9594939291906153e9565b602060405180830381865afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f919061544a565b9050611f848e60000160008f81526020019081526020016000206003015482846001611f4b91906153ab565b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061312f92505050565b611f8e8e8e6131bc565b60008d815260208f905260409020611fa590613226565b5050506000998a5250505060209790975250506040909320600901805467ffffffffffffffff60581b191667ffffffffffffffff60581b17905550505050565b6000818152602083905260408120611ffc90611c66565b61201b5760405162a7b02b60e01b8152600481018390526024016106ad565b600082815260208490526040812061203290611c36565b6000818152600186016020526040812054919250819003612066576040516336843d9f60e21b815260040160405180910390fd5b6040516815539492559053115160ba1b602082015260290160408051601f1981840301815291905280516020909101201415949350505050565b600781015460009015801590610cf5575050600801546001600160a01b0316151590565b6000610cf58260090160099054906101000a900460ff16836000015484600201548560010154866004015487600301546116d9565b600083815260208590526040812061211090611c66565b61212f5760405162a7b02b60e01b8152600481018590526024016106ad565b600061213b8686612ef6565b90506121506001600160401b038516826153ab565b9050826001600160401b031681101561218e5760405163011a8d4d60e41b8152600481018290526001600160401b03841660248201526044016106ad565b61219886866131bc565b60008581526020879052604090206121af90613226565b95945050505050565b6040516001600160f81b031960f887901b1660208201526021810185905260418101849052606181018390526081810182905260009060a10160405160208183030381529060405280519060200120905095945050505050565b600061221c61467d565b61222461467d565b60008087815260208990526040902060090154600160401b900460ff16600181111561225257612252614cae565b1461229157600086815260208890526040908190206009015490516323f8405d60e01b81526106ad918891600160401b90910460ff16906004016153be565b61229b8787611fe5565b6122bb576040516380e07e4560e01b8152600481018790526024016106ad565b6000868152602088905260408120604080516101e0810182528254815260018084015460208301526002840154928201929092526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546001600160a01b038116610100830152600160a01b90046001600160401b039081166101208301526009840154908116610140830152909291610160840191600160401b900460ff169081111561237f5761237f614cae565b600181111561239057612390614cae565b815260099190910154600160481b810460ff9081166020840152600160501b8204161515604080840191909152600160581b9091046001600160401b031660609092019190915281015160808201519192506000916123ef91906132a8565b90506000808780602001905181019061240891906154be565b90925090506124388961241c8560016153ab565b606087015160808801516124319060016153ab565b868661333c565b5050600061244461467d565b60006124658560000151866020015187604001518d888a610180015161360d565b9050612470816136a5565b600081815260208e90526040902090935061248a90611c66565b61249b576124988c82612b2d565b91505b506124a461467d565b60006124c586600001518c8789606001518a608001518b610180015161360d565b90506124d18d82612b2d565b9150506125018382600001518e60000160008f81526020019081526020016000206136ce9092919063ffffffff16565b919b909a509098509650505050505050565b6000808260020154836004015461252a9190615398565b905080600003610cf55761253d836120c4565b60405162a7b02b60e01b81526004016106ad91815260200190565b6040805160608082018352600080835260208301529181019190915260008061258d6125876020890189614dc0565b8561171e565b600281111561259e5761259e614cae565b0361282757602085015185516000036125ca576040516374b5e30d60e11b815260040160405180910390fd5b85516060880135146125ff5785516040516316c5de8f60e21b81526004810191909152606088013560248201526044016106ad565b8560400151612621576040516360b4921b60e11b815260040160405180910390fd5b856060015161264357604051635a2e8e1d60e11b815260040160405180910390fd5b61265060a0880188614ddb565b905060000361267257604051630c9ccac560e41b815260040160405180910390fd5b600061268160a0890189614ddb565b81019061268e919061506f565b509091506000905087608001516020015160028111156126b0576126b0614cae565b036126ce5760405163231b2f2960e11b815260040160405180910390fd5b60008760a001516020015160028111156126ea576126ea614cae565b0361270857604051638999857d60e01b815260040160405180910390fd5b6000866001600160a01b031663c39619c46127268a60800151613735565b6040518263ffffffff1660e01b81526004016127429190615521565b602060405180830381865afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612783919061544a565b90506000876001600160a01b031663c39619c46127a38b60a00151613735565b6040518263ffffffff1660e01b81526004016127bf9190615521565b602060405180830381865afa1580156127dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612800919061544a565b60408051606081018252938452602084019190915282019290925293509091506129d59050565b612835878760600135611a74565b61285b5760405160016292642960e01b03198152606087013560048201526024016106ad565b606086013560009081526020889052604081209061287882611c36565b905060006009830154600160401b900460ff16600181111561289c5761289c614cae565b146128ba576040516312459ffd60e01b815260040160405180910390fd5b60098201546128d390600160481b900460ff1686613770565b60ff166128e360208a018a614dc0565b60ff161461292c576128f86020890189614dc0565b600983015460405163564f308b60e11b815260ff9283166004820152600160481b90910490911660248201526044016106ad565b61293960a0890189614ddb565b905060000361295b57604051630c9ccac560e41b815260040160405180910390fd5b60008080808061296e60a08e018e614ddb565b81019061297b919061554f565b9450945094509450945061299987600101548689600201548661312f565b6129ad87600301548589600401548561312f565b6040518060600160405280868152602001858152602001828152508698509850505050505050505b9550959350505050565b604080516000808252602082019092528190612a0590612a00908751613792565b6137c8565b9050612a1083611851565b612a3057604051633abfb6ff60e21b8152600481018490526024016106ad565b82846040013514612a6157604080516337f318af60e21b8152908501356004820152602481018490526044016106ad565b612a7d846020013586602001518660400135886040015161312f565b612a8a6080850185614ddb565b9050600003612aac57604051631a1503a960e11b815260040160405180910390fd5b600080612abc6080870187614ddb565b810190612ac991906155ea565b9092509050612ae7836001602089013561243160408b0135836153ab565b509095945050505050565b612afa61474e565b612b2584846000602086018035906040880135906060890135903390612b20908b614dc0565b613961565b949350505050565b612b3561467d565b6000612b40836136a5565b6000818152602086905260409020909150612b5a90611c66565b15612b7b57604051635e76f9ef60e11b8152600481018290526024016106ad565b600081815260208581526040918290208551815590850151600180830191909155918501516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e085015160078201556101008501516008820180546101208801516001600160401b03908116600160a01b026001600160e01b03199092166001600160a01b03909416939093171790556101408601516009830180549190921667ffffffffffffffff19821681178355610160880151889590939268ffffffffffffffffff191690911790600160401b908490811115612c6a57612c6a614cae565b021790555061018082810151600990920180546101a08501516101c0909501516001600160401b0316600160581b0267ffffffffffffffff60581b19951515600160501b0260ff60501b1960ff909616600160481b02959095166affff00000000000000000019909216919091179390931793909316919091179091558301518351604085015160208601516080870151600094612d0d949093909290916121b8565b6000818152600187016020526040812054919250819003612d6c576040516815539492559053115160ba1b602082015260290160408051601f198184030181529181528151602092830120600085815260018a01909352912055612db4565b6040516815539492559053115160ba1b6020820152602901604051602081830303815290604052805190602001208103612db457600082815260018701602052604090208390555b6040805161010081018252848152602080820185905287518284015260e08801516060830152600086815290899052919091206080820190612df590612513565b815261018087015160ff166020820152911515604083015260e090950151151560609091015250919392505050565b6000612e79826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a6a9092919063ffffffff16565b8051909150156115b55780806020019051810190612e979190615188565b6115b55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ad565b600080612f03848461188f565b60008481526020869052604090206005015490915015611aa2576000838152602085905260408082206005810154835281832060099081015460069092015484529190922001546001600160401b03600160581b9283900481169290910416808210612f6f5780612f71565b815b61139390846153ab565b6000828152602084905260408120600901546001600160401b03600160581b9091048116908311612fac5782612fb5565b6001600160401b035b925080831115612ffc5750506000828152602084905260409020600901805467ffffffffffffffff60581b1916600160581b6001600160401b038416021790556001611aa2565b506000949350505050565b60008281526020859052604080822054858352912061302590611c36565b1461307357600083815260208590526040902061304190611c36565b6000838152602086905260409081902054905163e2e27f8760e01b8152600481019290925260248201526044016106ad565b600082815260208590526040808220600990810154868452919092209091015460ff600160481b928390048116926130ad92041683613770565b60ff161461184b57600083815260208590526040902060090154839083906130df90600160481b900460ff1684613770565b60008581526020889052604090819020600901549051637e726d1560e01b81526004810194909452602484019290925260ff9081166044840152600160481b9091041660648201526084016106ad565b600061316482848660405160200161314991815260200190565b60405160208183030381529060405280519060200120613a79565b90508085146131b55760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420696e636c7573696f6e2070726f6f6600000000000000000060448201526064016106ad565b5050505050565b60008181526020839052604081206131d390611c36565b6000818152600285016020526040902054909150801561321057604051630dd7028f60e41b815260048101849052602481018290526044016106ad565b5060009081526002909201602052604090912055565b60006009820154600160401b900460ff16600181111561324857613248614cae565b1461328057613256816120c4565b60098201546040516323f8405d60e01b81526106ad9291600160401b900460ff16906004016153be565b60090180546001600160401b03431668ffffffffffffffffff1990911617600160401b179055565b600060026132b68484615398565b10156132df5760405163240a616560e21b815260048101849052602481018390526044016106ad565b6132e98383615398565b600203613302576132fb8360016153ab565b9050610cf5565b600083613310600185615398565b189050600061331e82613b1b565b9050600019811b80613331600187615398565b169695505050505050565b600085116133835760405162461bcd60e51b815260206004820152601460248201527305072652d73697a652063616e6e6f7420626520360641b60448201526064016106ad565b8561338d836137c8565b146133da5760405162461bcd60e51b815260206004820152601b60248201527f50726520657870616e73696f6e20726f6f74206d69736d61746368000000000060448201526064016106ad565b846133e483613c4a565b1461343b5760405162461bcd60e51b815260206004820152602160248201527f5072652073697a6520646f6573206e6f74206d6174636820657870616e73696f6044820152603760f91b60648201526084016106ad565b82851061348a5760405162461bcd60e51b815260206004820181905260248201527f5072652073697a65206e6f74206c657373207468616e20706f73742073697a6560448201526064016106ad565b600085905060008061349f8560008751613ca5565b90505b858310156135575760006134b68488613e01565b9050845183106134fd5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016106ad565b6135218282878681518110613514576135146151c7565b6020026020010151613ee5565b91506001811b61353181866153ab565b94508785111561354357613543615643565b8361354d8161537f565b94505050506134a2565b86613561826137c8565b146135b95760405162461bcd60e51b815260206004820152602260248201527f506f737420657870616e73696f6e20726f6f74206e6f7420657175616c20706f6044820152611cdd60f21b60648201526084016106ad565b835182146136025760405162461bcd60e51b8152602060048201526016602482015275496e636f6d706c6574652070726f6f6620757361676560501b60448201526064016106ad565b505050505050505050565b61361561474e565b6136228787878787614421565b50604080516101e08101825296875260208701959095529385019290925260608401526080830152600060a0830181905260c0830181905260e0830181905261010083018190526001600160401b0343166101208401526101408301819052610160830181905260ff9091166101808301526101a082018190526101c082015290565b6000610cf5826101800151836000015184604001518560200151866080015187606001516116d9565b60058301541515806136e35750600683015415155b15613725576136f1836120c4565b600584015460068501546040516308b0e71d60e41b81526004810193909352602483019190915260448201526064016106ad565b6005830191909155600690910155565b61373d6147c8565b6040518060400160405280836000015181526020018360200151600281111561376857613768614cae565b905292915050565b60008061377e8460016151f3565b905061378a818461171e565b509392505050565b6060611aa2836000846040516020016137ad91815260200190565b60405160208183030381529060405280519060200120613ee5565b6000808251116138135760405162461bcd60e51b815260206004820152601660248201527522b6b83a3c9036b2b935b6329032bc3830b739b4b7b760511b60448201526064016106ad565b6040825111156138655760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c6172676500000000000060448201526064016106ad565b6000805b835181101561395a576000848281518110613886576138866151c7565b60200260200101519050826000801b036138f25780156138ed57809250600185516138b19190615398565b82146138ed576040516138d4908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b613947565b80156139115760408051602081018390529081018490526060016138d4565b60405161392e908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b50806139528161537f565b915050613869565b5092915050565b61396961474e565b6001600160a01b0383166139905760405163f289e65760e01b815260040160405180910390fd5b60008490036139b257604051636932bcfd60e01b815260040160405180910390fd5b6139bf8989898989614421565b604051806101e001604052808a81526020018981526020018881526020018781526020018681526020016000801b81526020016000801b8152602001858152602001846001600160a01b03168152602001436001600160401b0316815260200160006001600160401b0316815260200160006001811115613a4257613a42614cae565b815260ff84166020820152600060408201819052606090910152905098975050505050505050565b6060612b2584846000856144b1565b8251600090610100811115613aac57604051637ed6198f60e11b81526004810182905261010060248201526044016106ad565b8260005b82811015613b11576000878281518110613acc57613acc6151c7565b60200260200101519050816001901b8716600003613af857826000528060205260406000209250613b08565b8060005282602052604060002092505b50600101613ab0565b5095945050505050565b600081600003613b6d5760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e7420626974730000000060448201526064016106ad565b600160801b8210613b8b57608091821c91613b8890826153ab565b90505b600160401b8210613ba957604091821c91613ba690826153ab565b90505b6401000000008210613bc857602091821c91613bc590826153ab565b90505b620100008210613be557601091821c91613be290826153ab565b90505b6101008210613c0157600891821c91613bfe90826153ab565b90505b60108210613c1c57600491821c91613c1990826153ab565b90505b60048210613c3757600291821c91613c3490826153ab565b90505b60028210610d9457610cf56001826153ab565b600080805b835181101561395a57838181518110613c6a57613c6a6151c7565b60200260200101516000801b14613c9357613c8681600261573d565b613c9090836153ab565b91505b80613c9d8161537f565b915050613c4f565b6060818310613cf05760405162461bcd60e51b815260206004820152601760248201527614dd185c9d081b9bdd081b195cdcc81d1a185b88195b99604a1b60448201526064016106ad565b8351821115613d4b5760405162461bcd60e51b815260206004820152602160248201527f456e64206e6f74206c657373206f7220657175616c207468616e206c656e67746044820152600d60fb1b60648201526084016106ad565b6000613d578484615398565b6001600160401b03811115613d6e57613d6e614e21565b604051908082528060200260200182016040528015613d97578160200160208202803683370190505b509050835b83811015613df857858181518110613db657613db66151c7565b6020026020010151828683613dcb9190615398565b81518110613ddb57613ddb6151c7565b602090810291909101015280613df08161537f565b915050613d9c565b50949350505050565b6000818310613e4c5760405162461bcd60e51b815260206004820152601760248201527614dd185c9d081b9bdd081b195cdcc81d1a185b88195b99604a1b60448201526064016106ad565b6000613e59838518613b1b565b905060006001613e6983826153ab565b6001901b613e779190615398565b90508481168482168115613e8e576119f9826145d7565b8015613e9d576119f981613b1b565b60405162461bcd60e51b815260206004820152601b60248201527f426f7468207920616e64207a2063616e6e6f74206265207a65726f000000000060448201526064016106ad565b606060408310613f285760405162461bcd60e51b815260206004820152600e60248201526d098caeccad840e8dede40d0d2ced60931b60448201526064016106ad565b6000829003613f795760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420617070656e6420656d7074792073756274726565000000000060448201526064016106ad565b604084511115613fcb5760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c6172676500000000000060448201526064016106ad565b8351600003614049576000613fe18460016153ab565b6001600160401b03811115613ff857613ff8614e21565b604051908082528060200260200182016040528015614021578160200160208202803683370190505b50905082818581518110614037576140376151c7565b60209081029190910101529050611aa2565b835183106140b75760405162461bcd60e51b815260206004820152603560248201527f4c6576656c2067726561746572207468616e2068696768657374206c6576656c6044820152741037b31031bab93932b73a1032bc3830b739b4b7b760591b60648201526084016106ad565b8160006140c386613c4a565b905060006140d286600261573d565b6140dc90836153ab565b905060006140e983613b1b565b6140f283613b1b565b1161413f5787516001600160401b0381111561411057614110614e21565b604051908082528060200260200182016040528015614139578160200160208202803683370190505b5061418e565b875161414c9060016153ab565b6001600160401b0381111561416357614163614e21565b60405190808252806020026020018201604052801561418c578160200160208202803683370190505b505b90506040815111156141e25760405162461bcd60e51b815260206004820152601c60248201527f417070656e642063726561746573206f76657273697a6520747265650000000060448201526064016106ad565b60005b8851811015614383578781101561427157888181518110614208576142086151c7565b60200260200101516000801b1461426c5760405162461bcd60e51b815260206004820152602260248201527f417070656e642061626f7665206c65617374207369676e69666963616e7420626044820152611a5d60f21b60648201526084016106ad565b614371565b60008590036142b75788818151811061428c5761428c6151c7565b60200260200101518282815181106142a6576142a66151c7565b602002602001018181525050614371565b8881815181106142c9576142c96151c7565b60200260200101516000801b0361430157848282815181106142ed576142ed6151c7565b602090810291909101015260009450614371565b6000801b828281518110614317576143176151c7565b602002602001018181525050888181518110614335576143356151c7565b602002602001015185604051602001614358929190918252602082015260400190565b6040516020818303038152906040528051906020012094505b8061437b8161537f565b9150506141e5565b5083156143b75783816001835161439a9190615398565b815181106143aa576143aa6151c7565b6020026020010181815250505b80600182516143c69190615398565b815181106143d6576143d66151c7565b60200260200101516000801b036104cc5760405162461bcd60e51b815260206004820152600f60248201526e4c61737420656e747279207a65726f60881b60448201526064016106ad565b60008590036144435760405163235e76ef60e21b815260040160405180910390fd5b82811161446d576040516308183ebd60e21b815260048101849052602481018290526044016106ad565b600084900361448f576040516320f1a0f960e21b815260040160405180910390fd5b60008290036131b557604051635cb6e5bb60e01b815260040160405180910390fd5b6060824710156145125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106ad565b6001600160a01b0385163b6145695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ad565b600080866001600160a01b03168587604051614585919061576d565b60006040518083038185875af1925050503d80600081146145c2576040519150601f19603f3d011682016040523d82523d6000602084013e6145c7565b606091505b50915091506104cc828286614644565b60008082116146285760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e7420626974730000000060448201526064016106ad565b60008280614637600182615398565b16189050611aa281613b1b565b60608315614653575081611aa2565b8251156146635782518084602001fd5b8160405162461bcd60e51b81526004016106ad9190615789565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c0810182526000808252602082018190529181018290526060810191909152608081016146f16147e7565b81526020016146fe6147e7565b905290565b82805482825590600052602060002090810192821561473e579160200282015b8281111561473e578235825591602001919060010190614723565b5061474a92915061480e565b5090565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290529061016082019081526000602082018190526040820181905260609091015290565b60405180604001604052806147db614823565b81526020016000905290565b60405180606001604052806147fa614823565b815260200160008152600060209091015290565b5b8082111561474a576000815560010161480f565b604051806040016040528061483661483f565b81526020016146fe5b60405180604001604052806002906020820280368337509192915050565b803560ff81168114610d9457600080fd5b60008060008060008060c0878903121561488757600080fd5b6148908761485d565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b6000602082840312156148ca57600080fd5b81356001600160401b038111156148e057600080fd5b820160c08185031215611aa257600080fd5b6001600160a01b0381168114610ce557600080fd5b6001600160401b0381168114610ce557600080fd5b60008083601f84011261492e57600080fd5b5081356001600160401b0381111561494557600080fd5b6020830191508360208260051b850101111561496057600080fd5b9250929050565b60008060008060008060008060008060006101408c8e03121561498957600080fd5b8b35614994816148f2565b9a5060208c01356149a481614907565b995060408c01356149b4816148f2565b985060608c0135975060808c0135965060a08c0135955060c08c01356149d9816148f2565b945060e08c01356149e9816148f2565b93506149f86101008d0161485d565b92506101208c01356001600160401b03811115614a1457600080fd5b614a208e828f0161491c565b915080935050809150509295989b509295989b9093969950565b600060208284031215614a4c57600080fd5b5035919050565b60008060408385031215614a6657600080fd5b50508035926020909101359150565b60038110610ce557600080fd5b8035610d9481614a75565b600060208284031215614a9f57600080fd5b8135611aa281614a75565b6000806000806000806000878903610120811215614ac757600080fd5b8835975060208901356001600160401b0380821115614ae557600080fd5b908a01906040828d031215614af957600080fd5b81985060a0603f1984011215614b0e57600080fd5b60408b01975060e08b0135925080831115614b2857600080fd5b614b348c848d0161491c565b90975095506101008b0135925086915080831115614b5157600080fd5b5050614b5f8a828b0161491c565b989b979a50959850939692959293505050565b600080828403610120811215614b8757600080fd5b83359250610100601f1982011215614b9e57600080fd5b506020830190509250929050565b600080600080600060a08688031215614bc457600080fd5b614bcd8661485d565b97602087013597506040870135966060810135965060800135945092505050565b60008060008060608587031215614c0457600080fd5b843593506020850135925060408501356001600160401b0380821115614c2957600080fd5b818701915087601f830112614c3d57600080fd5b813581811115614c4c57600080fd5b886020828501011115614c5e57600080fd5b95989497505060200194505050565b60008060208385031215614c8057600080fd5b82356001600160401b03811115614c9657600080fd5b614ca28582860161491c565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60028110614cd457614cd4614cae565b9052565b60006101e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151614d46828501826001600160a01b03169052565b5050610120838101516001600160401b038116848301525050610140838101516001600160401b03811684830152505061016080840151614d8982850182614cc4565b50506101808381015160ff16908301526101a0808401511515908301526101c0808401516001600160401b03811682850152611a11565b600060208284031215614dd257600080fd5b611aa28261485d565b6000808335601e19843603018112614df257600080fd5b8301803591506001600160401b03821115614e0c57600080fd5b60200191503681900382131561496057600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614e5957614e59614e21565b60405290565b604080519081016001600160401b0381118282101715614e5957614e59614e21565b604051601f8201601f191681016001600160401b0381118282101715614ea957614ea9614e21565b604052919050565b60006001600160401b03821115614eca57614eca614e21565b5060051b60200190565b600082601f830112614ee557600080fd5b81356020614efa614ef583614eb1565b614e81565b82815260059290921b84018101918181019086841115614f1957600080fd5b8286015b84811015614f345780358352918301918301614f1d565b509695505050505050565b600082601f830112614f5057600080fd5b614f58614e5f565b806040840185811115614f6a57600080fd5b845b81811015612ae7578035614f7f81614907565b845260209384019301614f6c565b6000818303610100811215614fa157600080fd5b614fa9614e37565b915060c0811215614fb957600080fd5b614fc1614e37565b6080821215614fcf57600080fd5b614fd7614e5f565b915084601f850112614fe857600080fd5b614ff0614e5f565b80604086018781111561500257600080fd5b865b8181101561501c578035845260209384019301615004565b5081855261502a8882614f3f565b602086015250505081815261504160808501614a82565b602082015260a08401356040820152808352505060c0820135602082015260e0820135604082015292915050565b6000806000610220848603121561508557600080fd5b83356001600160401b0381111561509b57600080fd5b6150a786828701614ed4565b9350506150b78560208601614f8d565b91506150c7856101208601614f8d565b90509250925092565b80518260005b60028110156150f55782518252602092830192909101906001016150d6565b5050506020808201516040840160005b6002811015611a6c5782516001600160401b031682529183019190830190600101615105565b60038110610ce557610ce5614cae565b6000610120820190508582526151556020830186516150d0565b60208501516151638161512b565b60a08301526040949094015160c082015260e081019290925261010090910152919050565b60006020828403121561519a57600080fd5b81518015158114611aa257600080fd5b6000602082840312156151bc57600080fd5b8151611aa281614907565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160190811115610cf557610cf56151dd565b602081016152198361512b565b91905290565b600060c08201905083825282356020830152602083013560408301526040830135615249816148f2565b6001600160a01b031660608381019190915283013561526781614907565b6001600160401b0380821660808501526080850135915061528782614907565b80821660a085015250509392505050565b6000602082840312156152aa57600080fd5b8135611aa281614907565b6000602082840312156152c757600080fd5b8151611aa2816148f2565b8481526101208101602060408682850137606083016040870160005b600281101561531d57813561530281614907565b6001600160401b0316835291830191908301906001016152ee565b50505050608085013561532f81614a75565b6153388161512b565b8060a08401525060a085013560c08301528360e08301528261010083015295945050505050565b6001600160401b0382811682821603908082111561395a5761395a6151dd565b600060018201615391576153916151dd565b5060010190565b81810381811115610cf557610cf56151dd565b80820180821115610cf557610cf56151dd565b82815260408101611aa26020830184614cc4565b8082028115828204841417610cf557610cf56151dd565b8551815260018060a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561545c57600080fd5b5051919050565b600082601f83011261547457600080fd5b81516020615484614ef583614eb1565b82815260059290921b840181019181810190868411156154a357600080fd5b8286015b84811015614f3457805183529183019183016154a7565b600080604083850312156154d157600080fd5b82516001600160401b03808211156154e857600080fd5b6154f486838701615463565b9350602085015191508082111561550a57600080fd5b5061551785828601615463565b9150509250929050565b600060a0820190506155348284516150d0565b60208301516155428161512b565b8060808401525092915050565b600080600080600060a0868803121561556757600080fd5b853594506020860135935060408601356001600160401b038082111561558c57600080fd5b61559889838a01614ed4565b945060608801359150808211156155ae57600080fd5b6155ba89838a01614ed4565b935060808801359150808211156155d057600080fd5b506155dd88828901614ed4565b9150509295509295909350565b600080604083850312156155fd57600080fd5b82356001600160401b038082111561561457600080fd5b61562086838701614ed4565b9350602085013591508082111561563657600080fd5b5061551785828601614ed4565b634e487b7160e01b600052600160045260246000fd5b600181815b8085111561569457816000190482111561567a5761567a6151dd565b8085161561568757918102915b93841c939080029061565e565b509250929050565b6000826156ab57506001610cf5565b816156b857506000610cf5565b81600181146156ce57600281146156d8576156f4565b6001915050610cf5565b60ff8411156156e9576156e96151dd565b50506001821b610cf5565b5060208310610133831016604e8410600b8410161715615717575081810a610cf5565b6157218383615659565b8060001904821115615735576157356151dd565b029392505050565b6000611aa2838361569c565b60005b8381101561576457818101518382015260200161574c565b50506000910152565b6000825161577f818460208701615749565b9190910192915050565b60208152600082518060208401526157a8816040850160208701615749565b601f01601f1916919091016040019291505056fea264697066735822122002ae21beafe80ffa47f686c2c3e7ad685029358c7e7aba3be4bac6329d4aba5e64736f6c63430008110033", } // EdgeChallengeManagerABI is the input ABI used to generate the binding from. diff --git a/solgen/go/challengegen/challengegen.go b/solgen/go/challengegen/challengegen.go index 9502653e1..7ca99bcca 100644 --- a/solgen/go/challengegen/challengegen.go +++ b/solgen/go/challengegen/challengegen.go @@ -1299,7 +1299,7 @@ func (_IOldChallengeResultReceiver *IOldChallengeResultReceiverTransactorSession // OldChallengeLibMetaData contains all meta data concerning the OldChallengeLib contract. var OldChallengeLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122087e6f9b28a41b6eca2542375a9c3d58a337a20a98c98f53893faecdc8e23eb8364736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122043789426c3cb5c02aa3a4bb1c4b5583322f943ba4c932d1912a4e32104c553d964736f6c63430008110033", } // OldChallengeLibABI is the input ABI used to generate the binding from. @@ -1472,7 +1472,7 @@ func (_OldChallengeLib *OldChallengeLibTransactorRaw) Transact(opts *bind.Transa // OldChallengeManagerMetaData contains all meta data concerning the OldChallengeManager contract. var OldChallengeManagerMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"challengeRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengedSegmentStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengedSegmentLength\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"chainHashes\",\"type\":\"bytes32[]\"}],\"name\":\"Bisected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"enumIOldChallengeManager.ChallengeTerminationType\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"ChallengeEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockSteps\",\"type\":\"uint256\"}],\"name\":\"ExecutionChallengeBegun\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"indexed\":false,\"internalType\":\"structGlobalState\",\"name\":\"startState\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"indexed\":false,\"internalType\":\"structGlobalState\",\"name\":\"endState\",\"type\":\"tuple\"}],\"name\":\"InitiatedChallenge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"OneStepProofCompleted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"newSegments\",\"type\":\"bytes32[]\"}],\"name\":\"bisectExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus[2]\",\"name\":\"machineStatuses\",\"type\":\"uint8[2]\"},{\"internalType\":\"bytes32[2]\",\"name\":\"globalStateHashes\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"numSteps\",\"type\":\"uint256\"}],\"name\":\"challengeExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"challengeInfo\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"current\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"next\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastMoveTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"maxInboxMessages\",\"type\":\"uint64\"},{\"internalType\":\"enumOldChallengeLib.ChallengeMode\",\"name\":\"mode\",\"type\":\"uint8\"}],\"internalType\":\"structOldChallengeLib.Challenge\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"current\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"next\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastMoveTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"maxInboxMessages\",\"type\":\"uint64\"},{\"internalType\":\"enumOldChallengeLib.ChallengeMode\",\"name\":\"mode\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"clearChallenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot_\",\"type\":\"bytes32\"},{\"internalType\":\"enumMachineStatus[2]\",\"name\":\"startAndEndMachineStatuses_\",\"type\":\"uint8[2]\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState[2]\",\"name\":\"startAndEndGlobalStates_\",\"type\":\"tuple[2]\"},{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"asserter_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"asserterTimeLeft_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengerTimeLeft_\",\"type\":\"uint256\"}],\"name\":\"createChallenge\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"currentResponder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOldChallengeResultReceiver\",\"name\":\"resultReceiver_\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox_\",\"type\":\"address\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"isTimedOut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"oneStepProveExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"osp\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resultReceiver\",\"outputs\":[{\"internalType\":\"contractIOldChallengeResultReceiver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"timeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalChallengesCreated\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516134e7610030600039600061155501526134e76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639ede42b911610097578063ee35f32711610066578063ee35f327146102f0578063f26a62c614610303578063f8c8765e14610316578063fb7be0a11461032957600080fd5b80639ede42b914610294578063a521b032146102b7578063d248d124146102ca578063e78cea92146102dd57600080fd5b806356e9df97116100d357806356e9df97146101a95780635ef489e6146101bc5780637fd07a9c146101d05780638f1d3776146101f057600080fd5b806314eab5e7146101055780631b45c86a1461013657806323a9ef231461014b5780633504f1d714610196575b600080fd5b610118610113366004612b8c565b61033c565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610149610144366004612c1f565b61064c565b005b61017e610159366004612c1f565b67ffffffffffffffff166000908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161012d565b60025461017e906001600160a01b031681565b6101496101b7366004612c1f565b61072a565b6000546101189067ffffffffffffffff1681565b6101e36101de366004612c1f565b6108b4565b60405161012d9190612c64565b6102816101fe366004612cee565b6001602081815260009283526040928390208351808501855281546001600160a01b03908116825293820154818401528451808601909552600282015490931684526003810154918401919091526004810154600582015460068301546007909301549394939192909167ffffffffffffffff811690600160401b900460ff1687565b60405161012d9796959493929190612d07565b6102a76102a2366004612c1f565b6109dc565b604051901515815260200161012d565b6101496102c5366004612d7f565b610a04565b6101496102d8366004612e24565b610fbb565b60045461017e906001600160a01b031681565b60035461017e906001600160a01b031681565b60055461017e906001600160a01b031681565b610149610324366004612eb7565b61154b565b610149610337366004612f13565b6116f5565b6002546000906001600160a01b0316331461039e5760405162461bcd60e51b815260206004820152601060248201527f4f4e4c595f524f4c4c55505f4348414c0000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160028082526060820183526000926020830190803683370190505090506103f46103cf60208b018b612fb8565b6103ef8a60005b608002018036038101906103ea9190613079565b611f09565b611fb2565b8160008151811061040757610407612fa2565b602090810291909101015261043689600160200201602081019061042b9190612fb8565b6103ef8a60016103d6565b8160018151811061044957610449612fa2565b6020908102919091010152600080548190819061046f9067ffffffffffffffff16613128565b825467ffffffffffffffff8083166101009490940a848102910219909116179092559091506104a0576104a061314f565b67ffffffffffffffff81166000908152600160205260408120600581018d9055906104db6104d6368d90038d0160808e01613079565b6120b7565b905060026104ef60408e0160208f01612fb8565b600281111561050057610500612c3a565b148061052f5750600061052361051e368e90038e0160808f01613079565b6120cc565b67ffffffffffffffff16115b15610542578061053e81613128565b9150505b6007820180546040805180820182526001600160a01b038d811680835260209283018d905260028801805473ffffffffffffffffffffffffffffffffffffffff199081169092179055600388018d905583518085018552918e16808352919092018b905286549091161785556001850189905542600486015567ffffffffffffffff84811668ffffffffffffffffff1990931692909217600160401b179092559051908416907f76604fe17af46c9b5f53ffe99ff23e0f655dab91886b07ac1fc0254319f7145a9061061a908e9060808201906131ad565b60405180910390a26106398360008c67ffffffffffffffff16876120db565b5090925050505b98975050505050505050565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff16600281111561068657610686612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906106c65760405162461bcd60e51b815260040161039591906131c9565b506106d0816109dc565b61071c5760405162461bcd60e51b815260206004820152601060248201527f54494d454f55545f444541444c494e45000000000000000000000000000000006044820152606401610395565b610727816000612172565b50565b6002546001600160a01b031633146107845760405162461bcd60e51b815260206004820152601060248201527f4e4f545f5245535f5245434549564552000000000000000000000000000000006044820152606401610395565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff1660028111156107be576107be612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906107fe5760405162461bcd60e51b815260040161039591906131c9565b5067ffffffffffffffff81166000818152600160208190526040808320805473ffffffffffffffffffffffffffffffffffffffff1990811682559281018490556002810180549093169092556003808301849055600483018490556005830184905560068301939093556007909101805468ffffffffffffffffff19169055517ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40916108a991613217565b60405180910390a250565b6040805161012081018252600060e0820181815261010083018290528252825180840184528181526020808201839052830152918101829052606081018290526080810182905260a0810182905260c081019190915267ffffffffffffffff82811660009081526001602081815260409283902083516101208101855281546001600160a01b0390811660e0830190815294830154610100830152938152845180860186526002808401549095168152600383015481850152928101929092526004810154938201939093526005830154606082015260068301546080820152600783015493841660a08201529260c0840191600160401b90910460ff16908111156109c2576109c2612c3a565b60028111156109d3576109d3612c3a565b90525092915050565b67ffffffffffffffff811660009081526001602052604081206109fe906122c8565b92915050565b67ffffffffffffffff8416600090815260016020526040812080548692869290916001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b610a85846109dc565b15610ad25760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b6000826002811115610ae657610ae6612c3a565b03610b535760006007820154600160401b900460ff166002811115610b0d57610b0d612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b81525090610b4d5760405162461bcd60e51b815260040161039591906131c9565b50610c70565b6001826002811115610b6757610b67612c3a565b03610be05760016007820154600160401b900460ff166002811115610b8e57610b8e612c3a565b14610bdb5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b610c70565b6002826002811115610bf457610bf4612c3a565b03610c685760026007820154600160401b900460ff166002811115610c1b57610c1b612c3a565b14610bdb5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b610c7061314f565b610cbe83356020850135610c876040870187613231565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506122e092505050565b816006015414610d105760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b6002610d1f6040850185613231565b90501080610d4a57506001610d376040850185613231565b610d429291506132a0565b836060013510155b15610d975760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b600080610da389612317565b9150915060018111610df75760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610395565b806028811115610e05575060285b610e108160016132b3565b8814610e5e5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f44454752454500000000000000000000000000000000000000006044820152606401610395565b50610ea88989896000818110610e7657610e76612fa2565b602002919091013590508a8a610e8d6001826132a0565b818110610e9c57610e9c612fa2565b905060200201356123a7565b610ee78a83838b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506120db92505050565b50600090505b6007820154600160401b900460ff166002811115610f0d57610f0d612c3a565b03610f185750610fb2565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154610f4890426132a0565b81602001818151610f5991906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b50505050505050565b67ffffffffffffffff84166000908152600160205260409020805485918591600291906001600160a01b031633146110355760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b61103e846109dc565b1561108b5760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b600082600281111561109f5761109f612c3a565b0361110c5760006007820154600160401b900460ff1660028111156110c6576110c6612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906111065760405162461bcd60e51b815260040161039591906131c9565b50611229565b600182600281111561112057611120612c3a565b036111995760016007820154600160401b900460ff16600281111561114757611147612c3a565b146111945760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611229565b60028260028111156111ad576111ad612c3a565b036112215760026007820154600160401b900460ff1660028111156111d4576111d4612c3a565b146111945760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61122961314f565b61124083356020850135610c876040870187613231565b8160060154146112925760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026112a16040850185613231565b905010806112cc575060016112b96040850185613231565b6112c49291506132a0565b836060013510155b156113195760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b67ffffffffffffffff88166000908152600160205260408120908061133d8a612317565b9092509050600181146113925760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b506005805460408051606081018252600786015467ffffffffffffffff1681526004546001600160a01b03908116602083015293860154818301526000939092169163b5112fd29185906113e8908f018f613231565b8f606001358181106113fc576113fc612fa2565b905060200201358d8d6040518663ffffffff1660e01b81526004016114259594939291906132c6565b602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190613328565b905061147560408b018b613231565b61148460608d013560016132b3565b81811061149357611493612fa2565b9050602002013581036114e85760405162461bcd60e51b815260206004820152600c60248201527f53414d455f4f53505f454e4400000000000000000000000000000000000000006044820152606401610395565b60405167ffffffffffffffff8c16907fc2cc42e04ff8c36de71c6a2937ea9f161dd0dd9e175f00caa26e5200643c781e90600090a261153f8b67ffffffffffffffff16600090815260016020526040812060060155565b5060009150610eed9050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115e95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610395565b6002546001600160a01b0316156116425760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e495400000000000000000000000000000000000000006044820152606401610395565b6001600160a01b0384166116985760405162461bcd60e51b815260206004820152601260248201527f4e4f5f524553554c545f524543454956455200000000000000000000000000006044820152606401610395565b600280546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556003805494861694821694909417909355600480549285169284169290921790915560058054919093169116179055565b67ffffffffffffffff8516600090815260016020819052604090912080548792879290916001600160a01b031633146117705760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b611779846109dc565b156117c65760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b60008260028111156117da576117da612c3a565b036118475760006007820154600160401b900460ff16600281111561180157611801612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906118415760405162461bcd60e51b815260040161039591906131c9565b50611964565b600182600281111561185b5761185b612c3a565b036118d45760016007820154600160401b900460ff16600281111561188257611882612c3a565b146118cf5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611964565b60028260028111156118e8576118e8612c3a565b0361195c5760026007820154600160401b900460ff16600281111561190f5761190f612c3a565b146118cf5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61196461314f565b61197b83356020850135610c876040870187613231565b8160060154146119cd5760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026119dc6040850185613231565b90501080611a07575060016119f46040850185613231565b6119ff9291506132a0565b836060013510155b15611a545760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b6001851015611aa55760405162461bcd60e51b815260206004820152601360248201527f4348414c4c454e47455f544f4f5f53484f5254000000000000000000000000006044820152606401610395565b65080000000000851115611afb5760405162461bcd60e51b815260206004820152601260248201527f4348414c4c454e47455f544f4f5f4c4f4e4700000000000000000000000000006044820152606401610395565b611b3d88611b1d611b0f60208b018b612fb8565b8960005b6020020135611fb2565b611b38611b3060408c0160208d01612fb8565b8a6001611b13565b6123a7565b67ffffffffffffffff891660009081526001602052604081209080611b618b612317565b9150915080600114611bb55760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b6001611bc460208c018c612fb8565b6002811115611bd557611bd5612c3a565b14611ca057611bea60408b0160208c01612fb8565b6002811115611bfb57611bfb612c3a565b611c0860208c018c612fb8565b6002811115611c1957611c19612c3a565b148015611c2a5750883560208a0135145b611c765760405162461bcd60e51b815260206004820152600d60248201527f48414c5445445f4348414e4745000000000000000000000000000000000000006044820152606401610395565b611c988c67ffffffffffffffff16600090815260016020526040812060060155565b505050611e38565b6002611cb260408c0160208d01612fb8565b6002811115611cc357611cc3612c3a565b03611d1c57883560208a013514611d1c5760405162461bcd60e51b815260206004820152600c60248201527f4552524f525f4348414e474500000000000000000000000000000000000000006044820152606401610395565b6040805160028082526060820183526000926020830190803683375050506005850154909150611d4e908b35906124a2565b81600081518110611d6157611d61612fa2565b6020908102919091010152611d8f8b6001602002016020810190611d859190612fb8565b60208c013561268a565b81600181518110611da257611da2612fa2565b60209081029190910101526007840180547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668020000000000000000179055611def8d60008b846120db565b8c67ffffffffffffffff167f24e032e170243bbea97e140174b22dc7e54fb85925afbf52c70e001cd6af16db84604051611e2b91815260200190565b60405180910390a2505050505b60006007820154600160401b900460ff166002811115611e5a57611e5a612c3a565b03611e655750611eff565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154611e9590426132a0565b81602001818151611ea691906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b5050505050505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d015b604051602081830303815290604052805190602001209050919050565b60006001836002811115611fc857611fc8612c3a565b0361201e576040517f426c6f636b2073746174653a00000000000000000000000000000000000000006020820152602c8101839052604c015b6040516020818303038152906040528051906020012090506109fe565b600283600281111561203257612032612c3a565b0361206f576040517f426c6f636b2073746174652c206572726f7265643a0000000000000000000000602082015260358101839052605501612001565b60405162461bcd60e51b815260206004820152601060248201527f4241445f424c4f434b5f535441545553000000000000000000000000000000006044820152606401610395565b6020810151600090815b602002015192915050565b602081015160009060016120c1565b60018210156120ec576120ec61314f565b6002815110156120fe576120fe61314f565b600061210b8484846122e0565b67ffffffffffffffff8616600081815260016020526040908190206006018390555191925082917f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689061216390889088908890613341565b60405180910390a35050505050565b67ffffffffffffffff8216600081815260016020819052604080832060028082018054835473ffffffffffffffffffffffffffffffffffffffff19808216865596850188905595811690915560038301869055600480840187905560058401879055600684019690965560078301805468ffffffffffffffffff19169055905492517f0357aa49000000000000000000000000000000000000000000000000000000008152948501959095526001600160a01b03948516602485018190529285166044850181905290949293909290911690630357aa4990606401600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050508467ffffffffffffffff167ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40856040516122b99190613217565b60405180910390a25050505050565b60018101546000906122d983612727565b1192915050565b60008383836040516020016122f793929190613396565b6040516020818303038152906040528051906020012090505b9392505050565b60008080600161232a6040860186613231565b6123359291506132a0565b90506123458160208601356133ee565b9150612355606085013583613402565b6123609085356132b3565b925060026123716040860186613231565b61237c9291506132a0565b8460600135036123a157612394816020860135613419565b61239e90836132b3565b91505b50915091565b816123b56040850185613231565b85606001358181106123c9576123c9612fa2565b905060200201351461241d5760405162461bcd60e51b815260206004820152600b60248201527f57524f4e475f53544152540000000000000000000000000000000000000000006044820152606401610395565b8061242b6040850185613231565b61243a606087013560016132b3565b81811061244957612449612fa2565b905060200201350361249d5760405162461bcd60e51b815260206004820152600860248201527f53414d455f454e440000000000000000000000000000000000000000000000006044820152606401610395565b505050565b60408051600380825260808201909252600091829190816020015b60408051808201909152600080825260208201528152602001906001900390816124bd57505060408051808201825260008082526020918201819052825180840190935260048352908201529091508160008151811061251f5761251f612fa2565b60200260200101819052506125626000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8160018151811061257557612575612fa2565b60200260200101819052506125b86000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b816002815181106125cb576125cb612fa2565b602090810291909101810191909152604080518083018252838152815180830190925280825260009282019290925261261b60408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061267d81612739565b9998505050505050505050565b600060018360028111156126a0576126a0612c3a565b036126dd576040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101839052605101612001565b60028360028111156126f1576126f1612c3a565b0361206f576040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603001612001565b60008160040154426109fe91906132a0565b6000808251600281111561274f5761274f612c3a565b03612829576127618260200151612926565b61276e8360400151612926565b61277b84606001516129bc565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc01611f95565b60018251600281111561283e5761283e612c3a565b036128815760808201516040517f4d616368696e652066696e69736865643a00000000000000000000000000000060208201526031810191909152605101611f95565b60028251600281111561289657612896612c3a565b036128d95760808201516040517f4d616368696e65206572726f7265643a0000000000000000000000000000000060208201526030810191909152605001611f95565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f53544154555300000000000000000000000000000000006044820152606401610395565b919050565b60208101518151515160005b818110156129b557835161294f9061294a9083612a60565b612a98565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806129ad9061342d565b915050612932565b5050919050565b602081015160005b825151811015612a5a576129f4836000015182815181106129e7576129e7612fa2565b6020026020010151612ab5565b6040517f537461636b206672616d6520737461636b3a000000000000000000000000000060208201526032810191909152605281018390526072016040516020818303038152906040528051906020012091508080612a529061342d565b9150506129c4565b50919050565b60408051808201909152600080825260208201528251805183908110612a8857612a88612fa2565b6020026020010151905092915050565b600081600001518260200151604051602001611f95929190613465565b6000612ac48260000151612a98565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b9091166070820152607401611f95565b80604081018310156109fe57600080fd5b803567ffffffffffffffff8116811461292157600080fd5b6001600160a01b038116811461072757600080fd5b600080600080600080600080610200898b031215612ba957600080fd5b88359750612bba8a60208b01612b4e565b965061016089018a811115612bce57600080fd5b60608a019650612bdd81612b5f565b955050610180890135612bef81612b77565b93506101a0890135612c0081612b77565b979a96995094979396929592945050506101c0820135916101e0013590565b600060208284031215612c3157600080fd5b61231082612b5f565b634e487b7160e01b600052602160045260246000fd5b60038110612c6057612c60612c3a565b9052565b815180516001600160a01b0316825260209081015190820152610120810160208381015180516001600160a01b031660408501529081015160608401525060408301516080830152606083015160a0830152608083015160c083015267ffffffffffffffff60a08401511660e083015260c0830151612ce7610100840182612c50565b5092915050565b600060208284031215612d0057600080fd5b5035919050565b87516001600160a01b0316815260208089015190820152610120810187516001600160a01b03166040830152602088015160608301528660808301528560a08301528460c083015267ffffffffffffffff841660e0830152610640610100830184612c50565b600060808284031215612a5a57600080fd5b60008060008060608587031215612d9557600080fd5b612d9e85612b5f565b9350602085013567ffffffffffffffff80821115612dbb57600080fd5b612dc788838901612d6d565b94506040870135915080821115612ddd57600080fd5b818701915087601f830112612df157600080fd5b813581811115612e0057600080fd5b8860208260051b8501011115612e1557600080fd5b95989497505060200194505050565b60008060008060608587031215612e3a57600080fd5b612e4385612b5f565b9350602085013567ffffffffffffffff80821115612e6057600080fd5b612e6c88838901612d6d565b94506040870135915080821115612e8257600080fd5b818701915087601f830112612e9657600080fd5b813581811115612ea557600080fd5b886020828501011115612e1557600080fd5b60008060008060808587031215612ecd57600080fd5b8435612ed881612b77565b93506020850135612ee881612b77565b92506040850135612ef881612b77565b91506060850135612f0881612b77565b939692955090935050565b600080600080600060e08688031215612f2b57600080fd5b612f3486612b5f565b9450602086013567ffffffffffffffff811115612f5057600080fd5b612f5c88828901612d6d565b945050612f6c8760408801612b4e565b9250612f7b8760808801612b4e565b9497939650919460c0013592915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fca57600080fd5b81356003811061231057600080fd5b6040805190810167ffffffffffffffff81118282101715612ffc57612ffc612f8c565b60405290565b600082601f83011261301357600080fd5b6040516040810181811067ffffffffffffffff8211171561303657613036612f8c565b806040525080604084018581111561304d57600080fd5b845b8181101561306e5761306081612b5f565b83526020928301920161304f565b509195945050505050565b60006080828403121561308b57600080fd5b6040516040810181811067ffffffffffffffff821117156130ae576130ae612f8c565b604052601f830184136130c057600080fd5b6130c8612fd9565b8060408501868111156130da57600080fd5b855b818110156130f45780358452602093840193016130dc565b508184526131028782613002565b6020850152509195945050505050565b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff80831681810361314557613145613112565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b6040818337604082016040820160005b60028110156131a65767ffffffffffffffff61319083612b5f565b1683526020928301929190910190600101613175565b5050505050565b61010081016131bc8285613165565b6123106080830184613165565b600060208083528351808285015260005b818110156131f6578581018301518582016040015282016131da565b506000604082860101526040601f19601f8301168501019250505092915050565b602081016004831061322b5761322b612c3a565b91905290565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261326657600080fd5b83018035915067ffffffffffffffff82111561328157600080fd5b6020019150600581901b360382131561329957600080fd5b9250929050565b818103818111156109fe576109fe613112565b808201808211156109fe576109fe613112565b855181526001600160a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561333a57600080fd5b5051919050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156133885784518352938301939183019160010161336c565b509098975050505050505050565b83815260006020848184015260408301845182860160005b828110156133ca578151845292840192908401906001016133ae565b509198975050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826133fd576133fd6133d8565b500490565b80820281158282048414176109fe576109fe613112565b600082613428576134286133d8565b500690565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345e5761345e613112565b5060010190565b7f56616c75653a0000000000000000000000000000000000000000000000000000815260006007841061349a5761349a612c3a565b5060f89290921b600683015260078201526027019056fea26469706673582212206e2678da1e245d5d4daf3a01f014ca6b18090d8126e68d1afb6cae6fd549d84964736f6c63430008110033", + Bin: "0x60a06040523060805234801561001457600080fd5b506080516134e7610030600039600061155501526134e76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639ede42b911610097578063ee35f32711610066578063ee35f327146102f0578063f26a62c614610303578063f8c8765e14610316578063fb7be0a11461032957600080fd5b80639ede42b914610294578063a521b032146102b7578063d248d124146102ca578063e78cea92146102dd57600080fd5b806356e9df97116100d357806356e9df97146101a95780635ef489e6146101bc5780637fd07a9c146101d05780638f1d3776146101f057600080fd5b806314eab5e7146101055780631b45c86a1461013657806323a9ef231461014b5780633504f1d714610196575b600080fd5b610118610113366004612b8c565b61033c565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610149610144366004612c1f565b61064c565b005b61017e610159366004612c1f565b67ffffffffffffffff166000908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161012d565b60025461017e906001600160a01b031681565b6101496101b7366004612c1f565b61072a565b6000546101189067ffffffffffffffff1681565b6101e36101de366004612c1f565b6108b4565b60405161012d9190612c64565b6102816101fe366004612cee565b6001602081815260009283526040928390208351808501855281546001600160a01b03908116825293820154818401528451808601909552600282015490931684526003810154918401919091526004810154600582015460068301546007909301549394939192909167ffffffffffffffff811690600160401b900460ff1687565b60405161012d9796959493929190612d07565b6102a76102a2366004612c1f565b6109dc565b604051901515815260200161012d565b6101496102c5366004612d7f565b610a04565b6101496102d8366004612e24565b610fbb565b60045461017e906001600160a01b031681565b60035461017e906001600160a01b031681565b60055461017e906001600160a01b031681565b610149610324366004612eb7565b61154b565b610149610337366004612f13565b6116f5565b6002546000906001600160a01b0316331461039e5760405162461bcd60e51b815260206004820152601060248201527f4f4e4c595f524f4c4c55505f4348414c0000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160028082526060820183526000926020830190803683370190505090506103f46103cf60208b018b612fb8565b6103ef8a60005b608002018036038101906103ea9190613079565b611f09565b611fb2565b8160008151811061040757610407612fa2565b602090810291909101015261043689600160200201602081019061042b9190612fb8565b6103ef8a60016103d6565b8160018151811061044957610449612fa2565b6020908102919091010152600080548190819061046f9067ffffffffffffffff16613128565b825467ffffffffffffffff8083166101009490940a848102910219909116179092559091506104a0576104a061314f565b67ffffffffffffffff81166000908152600160205260408120600581018d9055906104db6104d6368d90038d0160808e01613079565b6120b7565b905060026104ef60408e0160208f01612fb8565b600281111561050057610500612c3a565b148061052f5750600061052361051e368e90038e0160808f01613079565b6120cc565b67ffffffffffffffff16115b15610542578061053e81613128565b9150505b6007820180546040805180820182526001600160a01b038d811680835260209283018d905260028801805473ffffffffffffffffffffffffffffffffffffffff199081169092179055600388018d905583518085018552918e16808352919092018b905286549091161785556001850189905542600486015567ffffffffffffffff84811668ffffffffffffffffff1990931692909217600160401b179092559051908416907f76604fe17af46c9b5f53ffe99ff23e0f655dab91886b07ac1fc0254319f7145a9061061a908e9060808201906131ad565b60405180910390a26106398360008c67ffffffffffffffff16876120db565b5090925050505b98975050505050505050565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff16600281111561068657610686612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906106c65760405162461bcd60e51b815260040161039591906131c9565b506106d0816109dc565b61071c5760405162461bcd60e51b815260206004820152601060248201527f54494d454f55545f444541444c494e45000000000000000000000000000000006044820152606401610395565b610727816000612172565b50565b6002546001600160a01b031633146107845760405162461bcd60e51b815260206004820152601060248201527f4e4f545f5245535f5245434549564552000000000000000000000000000000006044820152606401610395565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff1660028111156107be576107be612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906107fe5760405162461bcd60e51b815260040161039591906131c9565b5067ffffffffffffffff81166000818152600160208190526040808320805473ffffffffffffffffffffffffffffffffffffffff1990811682559281018490556002810180549093169092556003808301849055600483018490556005830184905560068301939093556007909101805468ffffffffffffffffff19169055517ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40916108a991613217565b60405180910390a250565b6040805161012081018252600060e0820181815261010083018290528252825180840184528181526020808201839052830152918101829052606081018290526080810182905260a0810182905260c081019190915267ffffffffffffffff82811660009081526001602081815260409283902083516101208101855281546001600160a01b0390811660e0830190815294830154610100830152938152845180860186526002808401549095168152600383015481850152928101929092526004810154938201939093526005830154606082015260068301546080820152600783015493841660a08201529260c0840191600160401b90910460ff16908111156109c2576109c2612c3a565b60028111156109d3576109d3612c3a565b90525092915050565b67ffffffffffffffff811660009081526001602052604081206109fe906122c8565b92915050565b67ffffffffffffffff8416600090815260016020526040812080548692869290916001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b610a85846109dc565b15610ad25760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b6000826002811115610ae657610ae6612c3a565b03610b535760006007820154600160401b900460ff166002811115610b0d57610b0d612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b81525090610b4d5760405162461bcd60e51b815260040161039591906131c9565b50610c70565b6001826002811115610b6757610b67612c3a565b03610be05760016007820154600160401b900460ff166002811115610b8e57610b8e612c3a565b14610bdb5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b610c70565b6002826002811115610bf457610bf4612c3a565b03610c685760026007820154600160401b900460ff166002811115610c1b57610c1b612c3a565b14610bdb5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b610c7061314f565b610cbe83356020850135610c876040870187613231565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506122e092505050565b816006015414610d105760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b6002610d1f6040850185613231565b90501080610d4a57506001610d376040850185613231565b610d429291506132a0565b836060013510155b15610d975760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b600080610da389612317565b9150915060018111610df75760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610395565b806028811115610e05575060285b610e108160016132b3565b8814610e5e5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f44454752454500000000000000000000000000000000000000006044820152606401610395565b50610ea88989896000818110610e7657610e76612fa2565b602002919091013590508a8a610e8d6001826132a0565b818110610e9c57610e9c612fa2565b905060200201356123a7565b610ee78a83838b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506120db92505050565b50600090505b6007820154600160401b900460ff166002811115610f0d57610f0d612c3a565b03610f185750610fb2565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154610f4890426132a0565b81602001818151610f5991906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b50505050505050565b67ffffffffffffffff84166000908152600160205260409020805485918591600291906001600160a01b031633146110355760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b61103e846109dc565b1561108b5760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b600082600281111561109f5761109f612c3a565b0361110c5760006007820154600160401b900460ff1660028111156110c6576110c6612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906111065760405162461bcd60e51b815260040161039591906131c9565b50611229565b600182600281111561112057611120612c3a565b036111995760016007820154600160401b900460ff16600281111561114757611147612c3a565b146111945760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611229565b60028260028111156111ad576111ad612c3a565b036112215760026007820154600160401b900460ff1660028111156111d4576111d4612c3a565b146111945760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61122961314f565b61124083356020850135610c876040870187613231565b8160060154146112925760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026112a16040850185613231565b905010806112cc575060016112b96040850185613231565b6112c49291506132a0565b836060013510155b156113195760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b67ffffffffffffffff88166000908152600160205260408120908061133d8a612317565b9092509050600181146113925760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b506005805460408051606081018252600786015467ffffffffffffffff1681526004546001600160a01b03908116602083015293860154818301526000939092169163b5112fd29185906113e8908f018f613231565b8f606001358181106113fc576113fc612fa2565b905060200201358d8d6040518663ffffffff1660e01b81526004016114259594939291906132c6565b602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190613328565b905061147560408b018b613231565b61148460608d013560016132b3565b81811061149357611493612fa2565b9050602002013581036114e85760405162461bcd60e51b815260206004820152600c60248201527f53414d455f4f53505f454e4400000000000000000000000000000000000000006044820152606401610395565b60405167ffffffffffffffff8c16907fc2cc42e04ff8c36de71c6a2937ea9f161dd0dd9e175f00caa26e5200643c781e90600090a261153f8b67ffffffffffffffff16600090815260016020526040812060060155565b5060009150610eed9050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115e95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610395565b6002546001600160a01b0316156116425760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e495400000000000000000000000000000000000000006044820152606401610395565b6001600160a01b0384166116985760405162461bcd60e51b815260206004820152601260248201527f4e4f5f524553554c545f524543454956455200000000000000000000000000006044820152606401610395565b600280546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556003805494861694821694909417909355600480549285169284169290921790915560058054919093169116179055565b67ffffffffffffffff8516600090815260016020819052604090912080548792879290916001600160a01b031633146117705760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b611779846109dc565b156117c65760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b60008260028111156117da576117da612c3a565b036118475760006007820154600160401b900460ff16600281111561180157611801612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906118415760405162461bcd60e51b815260040161039591906131c9565b50611964565b600182600281111561185b5761185b612c3a565b036118d45760016007820154600160401b900460ff16600281111561188257611882612c3a565b146118cf5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611964565b60028260028111156118e8576118e8612c3a565b0361195c5760026007820154600160401b900460ff16600281111561190f5761190f612c3a565b146118cf5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61196461314f565b61197b83356020850135610c876040870187613231565b8160060154146119cd5760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026119dc6040850185613231565b90501080611a07575060016119f46040850185613231565b6119ff9291506132a0565b836060013510155b15611a545760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b6001851015611aa55760405162461bcd60e51b815260206004820152601360248201527f4348414c4c454e47455f544f4f5f53484f5254000000000000000000000000006044820152606401610395565b65080000000000851115611afb5760405162461bcd60e51b815260206004820152601260248201527f4348414c4c454e47455f544f4f5f4c4f4e4700000000000000000000000000006044820152606401610395565b611b3d88611b1d611b0f60208b018b612fb8565b8960005b6020020135611fb2565b611b38611b3060408c0160208d01612fb8565b8a6001611b13565b6123a7565b67ffffffffffffffff891660009081526001602052604081209080611b618b612317565b9150915080600114611bb55760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b6001611bc460208c018c612fb8565b6002811115611bd557611bd5612c3a565b14611ca057611bea60408b0160208c01612fb8565b6002811115611bfb57611bfb612c3a565b611c0860208c018c612fb8565b6002811115611c1957611c19612c3a565b148015611c2a5750883560208a0135145b611c765760405162461bcd60e51b815260206004820152600d60248201527f48414c5445445f4348414e4745000000000000000000000000000000000000006044820152606401610395565b611c988c67ffffffffffffffff16600090815260016020526040812060060155565b505050611e38565b6002611cb260408c0160208d01612fb8565b6002811115611cc357611cc3612c3a565b03611d1c57883560208a013514611d1c5760405162461bcd60e51b815260206004820152600c60248201527f4552524f525f4348414e474500000000000000000000000000000000000000006044820152606401610395565b6040805160028082526060820183526000926020830190803683375050506005850154909150611d4e908b35906124a2565b81600081518110611d6157611d61612fa2565b6020908102919091010152611d8f8b6001602002016020810190611d859190612fb8565b60208c013561268a565b81600181518110611da257611da2612fa2565b60209081029190910101526007840180547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668020000000000000000179055611def8d60008b846120db565b8c67ffffffffffffffff167f24e032e170243bbea97e140174b22dc7e54fb85925afbf52c70e001cd6af16db84604051611e2b91815260200190565b60405180910390a2505050505b60006007820154600160401b900460ff166002811115611e5a57611e5a612c3a565b03611e655750611eff565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154611e9590426132a0565b81602001818151611ea691906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b5050505050505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d015b604051602081830303815290604052805190602001209050919050565b60006001836002811115611fc857611fc8612c3a565b0361201e576040517f426c6f636b2073746174653a00000000000000000000000000000000000000006020820152602c8101839052604c015b6040516020818303038152906040528051906020012090506109fe565b600283600281111561203257612032612c3a565b0361206f576040517f426c6f636b2073746174652c206572726f7265643a0000000000000000000000602082015260358101839052605501612001565b60405162461bcd60e51b815260206004820152601060248201527f4241445f424c4f434b5f535441545553000000000000000000000000000000006044820152606401610395565b6020810151600090815b602002015192915050565b602081015160009060016120c1565b60018210156120ec576120ec61314f565b6002815110156120fe576120fe61314f565b600061210b8484846122e0565b67ffffffffffffffff8616600081815260016020526040908190206006018390555191925082917f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689061216390889088908890613341565b60405180910390a35050505050565b67ffffffffffffffff8216600081815260016020819052604080832060028082018054835473ffffffffffffffffffffffffffffffffffffffff19808216865596850188905595811690915560038301869055600480840187905560058401879055600684019690965560078301805468ffffffffffffffffff19169055905492517f0357aa49000000000000000000000000000000000000000000000000000000008152948501959095526001600160a01b03948516602485018190529285166044850181905290949293909290911690630357aa4990606401600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050508467ffffffffffffffff167ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40856040516122b99190613217565b60405180910390a25050505050565b60018101546000906122d983612727565b1192915050565b60008383836040516020016122f793929190613396565b6040516020818303038152906040528051906020012090505b9392505050565b60008080600161232a6040860186613231565b6123359291506132a0565b90506123458160208601356133ee565b9150612355606085013583613402565b6123609085356132b3565b925060026123716040860186613231565b61237c9291506132a0565b8460600135036123a157612394816020860135613419565b61239e90836132b3565b91505b50915091565b816123b56040850185613231565b85606001358181106123c9576123c9612fa2565b905060200201351461241d5760405162461bcd60e51b815260206004820152600b60248201527f57524f4e475f53544152540000000000000000000000000000000000000000006044820152606401610395565b8061242b6040850185613231565b61243a606087013560016132b3565b81811061244957612449612fa2565b905060200201350361249d5760405162461bcd60e51b815260206004820152600860248201527f53414d455f454e440000000000000000000000000000000000000000000000006044820152606401610395565b505050565b60408051600380825260808201909252600091829190816020015b60408051808201909152600080825260208201528152602001906001900390816124bd57505060408051808201825260008082526020918201819052825180840190935260048352908201529091508160008151811061251f5761251f612fa2565b60200260200101819052506125626000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8160018151811061257557612575612fa2565b60200260200101819052506125b86000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b816002815181106125cb576125cb612fa2565b602090810291909101810191909152604080518083018252838152815180830190925280825260009282019290925261261b60408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061267d81612739565b9998505050505050505050565b600060018360028111156126a0576126a0612c3a565b036126dd576040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101839052605101612001565b60028360028111156126f1576126f1612c3a565b0361206f576040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603001612001565b60008160040154426109fe91906132a0565b6000808251600281111561274f5761274f612c3a565b03612829576127618260200151612926565b61276e8360400151612926565b61277b84606001516129bc565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc01611f95565b60018251600281111561283e5761283e612c3a565b036128815760808201516040517f4d616368696e652066696e69736865643a00000000000000000000000000000060208201526031810191909152605101611f95565b60028251600281111561289657612896612c3a565b036128d95760808201516040517f4d616368696e65206572726f7265643a0000000000000000000000000000000060208201526030810191909152605001611f95565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f53544154555300000000000000000000000000000000006044820152606401610395565b919050565b60208101518151515160005b818110156129b557835161294f9061294a9083612a60565b612a98565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806129ad9061342d565b915050612932565b5050919050565b602081015160005b825151811015612a5a576129f4836000015182815181106129e7576129e7612fa2565b6020026020010151612ab5565b6040517f537461636b206672616d6520737461636b3a000000000000000000000000000060208201526032810191909152605281018390526072016040516020818303038152906040528051906020012091508080612a529061342d565b9150506129c4565b50919050565b60408051808201909152600080825260208201528251805183908110612a8857612a88612fa2565b6020026020010151905092915050565b600081600001518260200151604051602001611f95929190613465565b6000612ac48260000151612a98565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b9091166070820152607401611f95565b80604081018310156109fe57600080fd5b803567ffffffffffffffff8116811461292157600080fd5b6001600160a01b038116811461072757600080fd5b600080600080600080600080610200898b031215612ba957600080fd5b88359750612bba8a60208b01612b4e565b965061016089018a811115612bce57600080fd5b60608a019650612bdd81612b5f565b955050610180890135612bef81612b77565b93506101a0890135612c0081612b77565b979a96995094979396929592945050506101c0820135916101e0013590565b600060208284031215612c3157600080fd5b61231082612b5f565b634e487b7160e01b600052602160045260246000fd5b60038110612c6057612c60612c3a565b9052565b815180516001600160a01b0316825260209081015190820152610120810160208381015180516001600160a01b031660408501529081015160608401525060408301516080830152606083015160a0830152608083015160c083015267ffffffffffffffff60a08401511660e083015260c0830151612ce7610100840182612c50565b5092915050565b600060208284031215612d0057600080fd5b5035919050565b87516001600160a01b0316815260208089015190820152610120810187516001600160a01b03166040830152602088015160608301528660808301528560a08301528460c083015267ffffffffffffffff841660e0830152610640610100830184612c50565b600060808284031215612a5a57600080fd5b60008060008060608587031215612d9557600080fd5b612d9e85612b5f565b9350602085013567ffffffffffffffff80821115612dbb57600080fd5b612dc788838901612d6d565b94506040870135915080821115612ddd57600080fd5b818701915087601f830112612df157600080fd5b813581811115612e0057600080fd5b8860208260051b8501011115612e1557600080fd5b95989497505060200194505050565b60008060008060608587031215612e3a57600080fd5b612e4385612b5f565b9350602085013567ffffffffffffffff80821115612e6057600080fd5b612e6c88838901612d6d565b94506040870135915080821115612e8257600080fd5b818701915087601f830112612e9657600080fd5b813581811115612ea557600080fd5b886020828501011115612e1557600080fd5b60008060008060808587031215612ecd57600080fd5b8435612ed881612b77565b93506020850135612ee881612b77565b92506040850135612ef881612b77565b91506060850135612f0881612b77565b939692955090935050565b600080600080600060e08688031215612f2b57600080fd5b612f3486612b5f565b9450602086013567ffffffffffffffff811115612f5057600080fd5b612f5c88828901612d6d565b945050612f6c8760408801612b4e565b9250612f7b8760808801612b4e565b9497939650919460c0013592915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fca57600080fd5b81356003811061231057600080fd5b6040805190810167ffffffffffffffff81118282101715612ffc57612ffc612f8c565b60405290565b600082601f83011261301357600080fd5b6040516040810181811067ffffffffffffffff8211171561303657613036612f8c565b806040525080604084018581111561304d57600080fd5b845b8181101561306e5761306081612b5f565b83526020928301920161304f565b509195945050505050565b60006080828403121561308b57600080fd5b6040516040810181811067ffffffffffffffff821117156130ae576130ae612f8c565b604052601f830184136130c057600080fd5b6130c8612fd9565b8060408501868111156130da57600080fd5b855b818110156130f45780358452602093840193016130dc565b508184526131028782613002565b6020850152509195945050505050565b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff80831681810361314557613145613112565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b6040818337604082016040820160005b60028110156131a65767ffffffffffffffff61319083612b5f565b1683526020928301929190910190600101613175565b5050505050565b61010081016131bc8285613165565b6123106080830184613165565b600060208083528351808285015260005b818110156131f6578581018301518582016040015282016131da565b506000604082860101526040601f19601f8301168501019250505092915050565b602081016004831061322b5761322b612c3a565b91905290565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261326657600080fd5b83018035915067ffffffffffffffff82111561328157600080fd5b6020019150600581901b360382131561329957600080fd5b9250929050565b818103818111156109fe576109fe613112565b808201808211156109fe576109fe613112565b855181526001600160a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561333a57600080fd5b5051919050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156133885784518352938301939183019160010161336c565b509098975050505050505050565b83815260006020848184015260408301845182860160005b828110156133ca578151845292840192908401906001016133ae565b509198975050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826133fd576133fd6133d8565b500490565b80820281158282048414176109fe576109fe613112565b600082613428576134286133d8565b500690565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345e5761345e613112565b5060010190565b7f56616c75653a0000000000000000000000000000000000000000000000000000815260006007841061349a5761349a612c3a565b5060f89290921b600683015260078201526027019056fea2646970667358221220d04ca55860b54b03c4b3af853440ba120cd1f18ed49db9c326868f7d55425bf364736f6c63430008110033", } // OldChallengeManagerABI is the input ABI used to generate the binding from. diff --git a/solgen/go/librariesgen/librariesgen.go b/solgen/go/librariesgen/librariesgen.go index dde9fbec4..231e995ca 100644 --- a/solgen/go/librariesgen/librariesgen.go +++ b/solgen/go/librariesgen/librariesgen.go @@ -32,7 +32,7 @@ var ( // AddressAliasHelperMetaData contains all meta data concerning the AddressAliasHelper contract. var AddressAliasHelperMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200274468d8af1a36d9d4b98694c681da3c2c699de43a978ba4bf4190e90fee1cc64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b1c7c1eed6308a3167edcc47c3ecd54d20200159e384b2fa53f8ed918ceaeee64736f6c63430008110033", } // AddressAliasHelperABI is the input ABI used to generate the binding from. @@ -205,7 +205,7 @@ func (_AddressAliasHelper *AddressAliasHelperTransactorRaw) Transact(opts *bind. // AdminFallbackProxyMetaData contains all meta data concerning the AdminFallbackProxy contract. var AdminFallbackProxyMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b50610245806100206000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b61015b565b565b6000600436101561009b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336100a661017f565b73ffffffffffffffffffffffffffffffffffffffff16036100ce576100c96101bf565b6100d6565b6100d66101e7565b905073ffffffffffffffffffffffffffffffffffffffff81163b610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5441524745545f4e4f545f434f4e5452414354000000000000000000000000006044820152606401610092565b919050565b3660008037600080366000845af43d6000803e80801561017a573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101a3565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6101a356fea264697066735822122079db84a24ce52436423818d6427891ec09c0063d50228fc3ed3e49bc0d180d5c64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50610245806100206000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b61015b565b565b6000600436101561009b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336100a661017f565b73ffffffffffffffffffffffffffffffffffffffff16036100ce576100c96101bf565b6100d6565b6100d66101e7565b905073ffffffffffffffffffffffffffffffffffffffff81163b610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5441524745545f4e4f545f434f4e5452414354000000000000000000000000006044820152606401610092565b919050565b3660008037600080366000845af43d6000803e80801561017a573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101a3565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6101a356fea26469706673582212203170ab15fbcb10688949c192cd5e26073e1877dee31cd823a939d33a39fc1a6e64736f6c63430008110033", } // AdminFallbackProxyABI is the input ABI used to generate the binding from. @@ -987,7 +987,7 @@ func (_AdminFallbackProxy *AdminFallbackProxyFilterer) ParseUpgradedSecondary(lo // ArbitrumCheckerMetaData contains all meta data concerning the ArbitrumChecker contract. var ArbitrumCheckerMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122088f0f10a349caa75ac705621e66061a51e4a864400c471ac25ca30d141b1fb5264736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040c6bb794acf80741366e0fd21ce6d4bc9275edf89631a495ced7d2c12534ada64736f6c63430008110033", } // ArbitrumCheckerABI is the input ABI used to generate the binding from. @@ -1160,7 +1160,7 @@ func (_ArbitrumChecker *ArbitrumCheckerTransactorRaw) Transact(opts *bind.Transa // CryptographyPrimitivesMetaData contains all meta data concerning the CryptographyPrimitives contract. var CryptographyPrimitivesMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f1825c30b183f222548264d973da80fdb28b52ae34fc25bd175f80f59d96e76e64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cf259683d0f53e6866060206401ed3afb138c743830ab040df6197c5b8f3cc8e64736f6c63430008110033", } // CryptographyPrimitivesABI is the input ABI used to generate the binding from. @@ -3355,10 +3355,223 @@ func (_IGasRefunder *IGasRefunderTransactorSession) OnGasSpent(spender common.Ad return _IGasRefunder.Contract.OnGasSpent(&_IGasRefunder.TransactOpts, spender, gasUsed, calldataSize) } +// IReader4844MetaData contains all meta data concerning the IReader4844 contract. +var IReader4844MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"getBlobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataHashes\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// IReader4844ABI is the input ABI used to generate the binding from. +// Deprecated: Use IReader4844MetaData.ABI instead. +var IReader4844ABI = IReader4844MetaData.ABI + +// IReader4844 is an auto generated Go binding around an Ethereum contract. +type IReader4844 struct { + IReader4844Caller // Read-only binding to the contract + IReader4844Transactor // Write-only binding to the contract + IReader4844Filterer // Log filterer for contract events +} + +// IReader4844Caller is an auto generated read-only Go binding around an Ethereum contract. +type IReader4844Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReader4844Transactor is an auto generated write-only Go binding around an Ethereum contract. +type IReader4844Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReader4844Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IReader4844Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReader4844Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IReader4844Session struct { + Contract *IReader4844 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IReader4844CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IReader4844CallerSession struct { + Contract *IReader4844Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IReader4844TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IReader4844TransactorSession struct { + Contract *IReader4844Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IReader4844Raw is an auto generated low-level Go binding around an Ethereum contract. +type IReader4844Raw struct { + Contract *IReader4844 // Generic contract binding to access the raw methods on +} + +// IReader4844CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IReader4844CallerRaw struct { + Contract *IReader4844Caller // Generic read-only contract binding to access the raw methods on +} + +// IReader4844TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IReader4844TransactorRaw struct { + Contract *IReader4844Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewIReader4844 creates a new instance of IReader4844, bound to a specific deployed contract. +func NewIReader4844(address common.Address, backend bind.ContractBackend) (*IReader4844, error) { + contract, err := bindIReader4844(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IReader4844{IReader4844Caller: IReader4844Caller{contract: contract}, IReader4844Transactor: IReader4844Transactor{contract: contract}, IReader4844Filterer: IReader4844Filterer{contract: contract}}, nil +} + +// NewIReader4844Caller creates a new read-only instance of IReader4844, bound to a specific deployed contract. +func NewIReader4844Caller(address common.Address, caller bind.ContractCaller) (*IReader4844Caller, error) { + contract, err := bindIReader4844(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IReader4844Caller{contract: contract}, nil +} + +// NewIReader4844Transactor creates a new write-only instance of IReader4844, bound to a specific deployed contract. +func NewIReader4844Transactor(address common.Address, transactor bind.ContractTransactor) (*IReader4844Transactor, error) { + contract, err := bindIReader4844(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IReader4844Transactor{contract: contract}, nil +} + +// NewIReader4844Filterer creates a new log filterer instance of IReader4844, bound to a specific deployed contract. +func NewIReader4844Filterer(address common.Address, filterer bind.ContractFilterer) (*IReader4844Filterer, error) { + contract, err := bindIReader4844(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IReader4844Filterer{contract: contract}, nil +} + +// bindIReader4844 binds a generic wrapper to an already deployed contract. +func bindIReader4844(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IReader4844MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IReader4844 *IReader4844Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IReader4844.Contract.IReader4844Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IReader4844 *IReader4844Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IReader4844.Contract.IReader4844Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IReader4844 *IReader4844Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IReader4844.Contract.IReader4844Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IReader4844 *IReader4844CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IReader4844.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IReader4844 *IReader4844TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IReader4844.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IReader4844 *IReader4844TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IReader4844.Contract.contract.Transact(opts, method, params...) +} + +// GetBlobBaseFee is a free data retrieval call binding the contract method 0x1f6d6ef7. +// +// Solidity: function getBlobBaseFee() view returns(uint256) +func (_IReader4844 *IReader4844Caller) GetBlobBaseFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IReader4844.contract.Call(opts, &out, "getBlobBaseFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetBlobBaseFee is a free data retrieval call binding the contract method 0x1f6d6ef7. +// +// Solidity: function getBlobBaseFee() view returns(uint256) +func (_IReader4844 *IReader4844Session) GetBlobBaseFee() (*big.Int, error) { + return _IReader4844.Contract.GetBlobBaseFee(&_IReader4844.CallOpts) +} + +// GetBlobBaseFee is a free data retrieval call binding the contract method 0x1f6d6ef7. +// +// Solidity: function getBlobBaseFee() view returns(uint256) +func (_IReader4844 *IReader4844CallerSession) GetBlobBaseFee() (*big.Int, error) { + return _IReader4844.Contract.GetBlobBaseFee(&_IReader4844.CallOpts) +} + +// GetDataHashes is a free data retrieval call binding the contract method 0xe83a2d82. +// +// Solidity: function getDataHashes() view returns(bytes32[]) +func (_IReader4844 *IReader4844Caller) GetDataHashes(opts *bind.CallOpts) ([][32]byte, error) { + var out []interface{} + err := _IReader4844.contract.Call(opts, &out, "getDataHashes") + + if err != nil { + return *new([][32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][32]byte)).(*[][32]byte) + + return out0, err + +} + +// GetDataHashes is a free data retrieval call binding the contract method 0xe83a2d82. +// +// Solidity: function getDataHashes() view returns(bytes32[]) +func (_IReader4844 *IReader4844Session) GetDataHashes() ([][32]byte, error) { + return _IReader4844.Contract.GetDataHashes(&_IReader4844.CallOpts) +} + +// GetDataHashes is a free data retrieval call binding the contract method 0xe83a2d82. +// +// Solidity: function getDataHashes() view returns(bytes32[]) +func (_IReader4844 *IReader4844CallerSession) GetDataHashes() ([][32]byte, error) { + return _IReader4844.Contract.GetDataHashes(&_IReader4844.CallOpts) +} + // MerkleLibMetaData contains all meta data concerning the MerkleLib contract. var MerkleLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207645fa9528c6fa661fff7f22099413f7c95bcbed0dbb89948e348514544066be64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d8ba33cb85457acc7fa0a70694265877c906b0737c0d44f7640ca6c62470c3c864736f6c63430008110033", } // MerkleLibABI is the input ABI used to generate the binding from. diff --git a/solgen/go/mocksgen/mocksgen.go b/solgen/go/mocksgen/mocksgen.go index 7bd1146d4..33ad20197 100644 --- a/solgen/go/mocksgen/mocksgen.go +++ b/solgen/go/mocksgen/mocksgen.go @@ -48,6 +48,14 @@ type GlobalState struct { U64Vals [2]uint64 } +// IBridgeTimeBounds is an auto generated low-level Go binding around an user-defined struct. +type IBridgeTimeBounds struct { + MinTimestamp uint64 + MaxTimestamp uint64 + MinBlockNumber uint64 + MaxBlockNumber uint64 +} + // ISequencerInboxMaxTimeVariation is an auto generated low-level Go binding around an user-defined struct. type ISequencerInboxMaxTimeVariation struct { DelayBlocks *big.Int @@ -56,14 +64,6 @@ type ISequencerInboxMaxTimeVariation struct { FutureSeconds *big.Int } -// ISequencerInboxTimeBounds is an auto generated low-level Go binding around an user-defined struct. -type ISequencerInboxTimeBounds struct { - MinTimestamp uint64 - MaxTimestamp uint64 - MinBlockNumber uint64 - MaxBlockNumber uint64 -} - // OldChallengeLibChallenge is an auto generated low-level Go binding around an user-defined struct. type OldChallengeLibChallenge struct { Current OldChallengeLibParticipant @@ -91,8 +91,8 @@ type OldChallengeLibSegmentSelection struct { // BridgeStubMetaData contains all meta data concerning the BridgeStub contract. var BridgeStubMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610da0806100206000396000f3fe6080604052600436106101745760003560e01c80639e5d4c49116100cb578063cee3d7281161007f578063e77145f411610059578063e77145f41461020e578063eca067ad14610465578063ee35f3271461047a57600080fd5b8063cee3d72814610406578063d5719dc214610425578063e76f5c8d1461044557600080fd5b8063ae60bd13116100b0578063ae60bd1314610362578063c4d66de81461039e578063cb23bcb5146103e857600080fd5b80639e5d4c4914610314578063ab5d89431461034257600080fd5b80635fca4a161161012d5780638db5993b116101075780638db5993b146102a9578063919cc706146102bc578063945e1147146102dc57600080fd5b80635fca4a16146102305780637a88b1071461024657806386598a561461026957600080fd5b8063413b35bd1161015e578063413b35bd146101bd57806347fb24c5146101ee5780634f61f8501461021057600080fd5b806284120c1461017957806316bf55791461019d575b600080fd5b34801561018557600080fd5b506006545b6040519081526020015b60405180910390f35b3480156101a957600080fd5b5061018a6101b8366004610b04565b61049a565b3480156101c957600080fd5b506101de6101d8366004610b35565b50600190565b6040519015158152602001610194565b3480156101fa57600080fd5b5061020e610209366004610b59565b6104bb565b005b34801561021c57600080fd5b5061020e61022b366004610b35565b61070c565b34801561023c57600080fd5b5061018a60085481565b34801561025257600080fd5b5061018a610261366004610b97565b600092915050565b34801561027557600080fd5b50610289610284366004610bc3565b61076d565b604080519485526020850193909352918301526060820152608001610194565b61018a6102b7366004610bf5565b6108c2565b3480156102c857600080fd5b5061020e6102d7366004610b35565b61093a565b3480156102e857600080fd5b506102fc6102f7366004610b04565b610982565b6040516001600160a01b039091168152602001610194565b34801561032057600080fd5b5061033461032f366004610c3c565b6109ac565b604051610194929190610cc5565b34801561034e57600080fd5b506004546102fc906001600160a01b031681565b34801561036e57600080fd5b506101de61037d366004610b35565b6001600160a01b031660009081526020819052604090206001015460ff1690565b3480156103aa57600080fd5b5061020e6103b9366004610b35565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3480156103f457600080fd5b506001546001600160a01b03166102fc565b34801561041257600080fd5b5061020e610421366004610b59565b5050565b34801561043157600080fd5b5061018a610440366004610b04565b6109fa565b34801561045157600080fd5b506102fc610460366004610b04565b610a0a565b34801561047157600080fd5b5060055461018a565b34801561048657600080fd5b506007546102fc906001600160a01b031681565b600681815481106104aa57600080fd5b600091825260209091200154905081565b6001600160a01b03821660008181526020818152604091829020600181015492518515158152909360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036105265750505050565b82156105c157604080518082018252600280548252600160208084018281526001600160a01b038a166000818152928390529582209451855551938201805460ff1916941515949094179093558154908101825591527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805473ffffffffffffffffffffffffffffffffffffffff19169091179055610706565b600280546105d190600190610d1d565b815481106105e1576105e1610d3e565b6000918252602090912001548254600280546001600160a01b0390931692909190811061061057610610610d3e565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600080600285600001548154811061065d5761065d610d3e565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061069357610693610d54565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b038616825281905260408120908155600101805460ff191690555b50505050565b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b600080600080856008541415801561078457508515155b8015610791575060085415155b156107db576008546040517fe2051feb0000000000000000000000000000000000000000000000000000000081526004810191909152602481018790526044015b60405180910390fd5b60088590556006549350831561081957600680546107fb90600190610d1d565b8154811061080b5761080b610d3e565b906000526020600020015492505b861561084a57600561082c600189610d1d565b8154811061083c5761083c610d3e565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018190559398929750909550919350915050565b3360009081526020819052604081206001015460ff166109245760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f46524f4d5f494e424f5800000000000000000000000000000000000060448201526064016107d2565b610932848443424887610a1a565b949350505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526064016107d2565b6003818154811061099257600080fd5b6000918252602090912001546001600160a01b0316905081565b60405162461bcd60e51b815260206004820152601c60248201527f4e4f545f494d504c454d454e5445445f455845435554455f43414c4c0000000060448201526000906060906064016107d2565b600581815481106104aa57600080fd5b6002818154811061099257600080fd5b60055460408051600060208083018290526021830182905260358301829052603d8301829052604583018290526065830182905260858084018790528451808503909101815260a59093019093528151919092012090919060008215610aa5576005610a87600185610d1d565b81548110610a9757610a97610d3e565b906000526020600020015490505b6005610ab18284610ad5565b81546001810183556000928352602090922090910155509098975050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600060208284031215610b1657600080fd5b5035919050565b6001600160a01b0381168114610b3257600080fd5b50565b600060208284031215610b4757600080fd5b8135610b5281610b1d565b9392505050565b60008060408385031215610b6c57600080fd5b8235610b7781610b1d565b915060208301358015158114610b8c57600080fd5b809150509250929050565b60008060408385031215610baa57600080fd5b8235610bb581610b1d565b946020939093013593505050565b60008060008060808587031215610bd957600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215610c0a57600080fd5b833560ff81168114610c1b57600080fd5b92506020840135610c2b81610b1d565b929592945050506040919091013590565b60008060008060608587031215610c5257600080fd5b8435610c5d81610b1d565b935060208501359250604085013567ffffffffffffffff80821115610c8157600080fd5b818701915087601f830112610c9557600080fd5b813581811115610ca457600080fd5b886020828501011115610cb657600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b81811015610cfb57858101830151858201606001528201610cdf565b506000606082860101526060601f19601f830116850101925050509392505050565b81810381811115610afe57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209afc73f0d4ec7d2c939dc494cebad63b12b3dd9a1655577d8102c76ab888aea864736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610ea4806100206000396000f3fe6080604052600436106101745760003560e01c80639e5d4c49116100cb578063cee3d7281161007f578063e77145f411610059578063e77145f41461020d578063eca067ad1461040d578063ee35f3271461042257600080fd5b8063cee3d728146103b2578063d5719dc2146103cd578063e76f5c8d146103ed57600080fd5b8063ae60bd13116100b0578063ae60bd1314610361578063c4d66de8146102bb578063cb23bcb51461039d57600080fd5b80639e5d4c4914610313578063ab5d89431461034157600080fd5b80635fca4a161161012d5780638db5993b116101075780638db5993b146102a8578063919cc706146102bb578063945e1147146102db57600080fd5b80635fca4a161461022f5780637a88b1071461024557806386598a561461026857600080fd5b8063413b35bd1161015e578063413b35bd146101bd57806347fb24c5146101ed5780634f61f8501461020f57600080fd5b806284120c1461017957806316bf55791461019d575b600080fd5b34801561018557600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101a957600080fd5b5061018a6101b8366004610bae565b610442565b3480156101c957600080fd5b506101dd6101d8366004610bdf565b610463565b6040519015158152602001610194565b3480156101f957600080fd5b5061020d610208366004610c03565b6104b3565b005b34801561021b57600080fd5b5061020d61022a366004610bdf565b610701565b34801561023b57600080fd5b5061018a60075481565b34801561025157600080fd5b5061018a610260366004610c41565b600092915050565b34801561027457600080fd5b50610288610283366004610c6d565b610762565b604080519485526020850193909352918301526060820152608001610194565b61018a6102b6366004610c9f565b6108b2565b3480156102c757600080fd5b5061020d6102d6366004610bdf565b61092a565b3480156102e757600080fd5b506102fb6102f6366004610bae565b610972565b6040516001600160a01b039091168152602001610194565b34801561031f57600080fd5b5061033361032e366004610ce6565b61099c565b604051610194929190610d93565b34801561034d57600080fd5b506003546102fb906001600160a01b031681565b34801561036d57600080fd5b506101dd61037c366004610bdf565b6001600160a01b031660009081526020819052604090206001015460ff1690565b3480156103a957600080fd5b506102fb610463565b3480156103be57600080fd5b5061020d6102d6366004610c03565b3480156103d957600080fd5b5061018a6103e8366004610bae565b610a38565b3480156103f957600080fd5b506102fb610408366004610bae565b610a48565b34801561041957600080fd5b5060045461018a565b34801561042e57600080fd5b506006546102fb906001600160a01b031681565b6005818154811061045257600080fd5b600091825260209091200154905081565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526000906064015b60405180910390fd5b6001600160a01b03821660008181526020818152604091829020600181015492518515158152909360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a28215158115150361051e5750505050565b82156105b75760408051808201825260018054825260208083018281526001600160a01b0389166000818152928390529482209351845551928201805460ff1916931515939093179092558054808201825591527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601805473ffffffffffffffffffffffffffffffffffffffff191690911790556106fb565b600180546105c6908290610dcf565b815481106105d6576105d6610df0565b6000918252602090912001548254600180546001600160a01b0390931692909190811061060557610605610df0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600080600185600001548154811061065257610652610df0565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600180548061068857610688610e06565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b038616825281905260408120908155600101805460ff191690555b50505050565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b600080600080856007541415801561077957508515155b8015610786575060075415155b156107cb576007546040517fe2051feb0000000000000000000000000000000000000000000000000000000081526004810191909152602481018790526044016104aa565b60078590556005549350831561080957600580546107eb90600190610dcf565b815481106107fb576107fb610df0565b906000526020600020015492505b861561083a57600461081c600189610dcf565b8154811061082c5761082c610df0565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190559398929750909550919350915050565b3360009081526020819052604081206001015460ff166109145760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f46524f4d5f494e424f5800000000000000000000000000000000000060448201526064016104aa565b610922848443424887610a58565b949350505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526064016104aa565b6002818154811061098257600080fd5b6000918252602090912001546001600160a01b0316905081565b600060606109e1868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b1392505050565b60405191935091506001600160a01b0387169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610a2790899089908990610e1c565b60405180910390a394509492505050565b6004818154811061045257600080fd5b6001818154811061098257600080fd5b60045460408051600060208083018290526021830182905260358301829052603d8301829052604583018290526065830182905260858084018790528451808503909101815260a59093019093528151919092012090919060008215610ae3576004610ac5600185610dcf565b81548110610ad557610ad5610df0565b906000526020600020015490505b6004610aef8284610b7f565b81546001810183556000928352602090922090910155509098975050505050505050565b60006060846001600160a01b03168484604051610b309190610e52565b60006040518083038185875af1925050503d8060008114610b6d576040519150601f19603f3d011682016040523d82523d6000602084013e610b72565b606091505b5090969095509350505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b600060208284031215610bc057600080fd5b5035919050565b6001600160a01b0381168114610bdc57600080fd5b50565b600060208284031215610bf157600080fd5b8135610bfc81610bc7565b9392505050565b60008060408385031215610c1657600080fd5b8235610c2181610bc7565b915060208301358015158114610c3657600080fd5b809150509250929050565b60008060408385031215610c5457600080fd5b8235610c5f81610bc7565b946020939093013593505050565b60008060008060808587031215610c8357600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215610cb457600080fd5b833560ff81168114610cc557600080fd5b92506020840135610cd581610bc7565b929592945050506040919091013590565b60008060008060608587031215610cfc57600080fd5b8435610d0781610bc7565b935060208501359250604085013567ffffffffffffffff80821115610d2b57600080fd5b818701915087601f830112610d3f57600080fd5b813581811115610d4e57600080fd5b886020828501011115610d6057600080fd5b95989497505060200194505050565b60005b83811015610d8a578181015183820152602001610d72565b50506000910152565b82151581526040602082015260008251806040840152610dba816060850160208701610d6f565b601f01601f1916919091016060019392505050565b81810381811115610ba857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251610e64818460208701610d6f565b919091019291505056fea2646970667358221220e2c1c53e06bad5d822eb0b18e9737000be23c5d7b2b76f2b157fbf8ae188cef064736f6c63430008110033", } // BridgeStubABI is the input ABI used to generate the binding from. @@ -479,41 +479,38 @@ func (_BridgeStub *BridgeStubCallerSession) DelayedMessageCount() (*big.Int, err return _BridgeStub.Contract.DelayedMessageCount(&_BridgeStub.CallOpts) } -// ExecuteCall is a free data retrieval call binding the contract method 0x9e5d4c49. +// Initialize is a free data retrieval call binding the contract method 0xc4d66de8. // -// Solidity: function executeCall(address , uint256 , bytes ) pure returns(bool, bytes) -func (_BridgeStub *BridgeStubCaller) ExecuteCall(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 []byte) (bool, []byte, error) { +// Solidity: function initialize(address ) pure returns() +func (_BridgeStub *BridgeStubCaller) Initialize(opts *bind.CallOpts, arg0 common.Address) error { var out []interface{} - err := _BridgeStub.contract.Call(opts, &out, "executeCall", arg0, arg1, arg2) + err := _BridgeStub.contract.Call(opts, &out, "initialize", arg0) if err != nil { - return *new(bool), *new([]byte), err + return err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - out1 := *abi.ConvertType(out[1], new([]byte)).(*[]byte) - - return out0, out1, err + return err } -// ExecuteCall is a free data retrieval call binding the contract method 0x9e5d4c49. +// Initialize is a free data retrieval call binding the contract method 0xc4d66de8. // -// Solidity: function executeCall(address , uint256 , bytes ) pure returns(bool, bytes) -func (_BridgeStub *BridgeStubSession) ExecuteCall(arg0 common.Address, arg1 *big.Int, arg2 []byte) (bool, []byte, error) { - return _BridgeStub.Contract.ExecuteCall(&_BridgeStub.CallOpts, arg0, arg1, arg2) +// Solidity: function initialize(address ) pure returns() +func (_BridgeStub *BridgeStubSession) Initialize(arg0 common.Address) error { + return _BridgeStub.Contract.Initialize(&_BridgeStub.CallOpts, arg0) } -// ExecuteCall is a free data retrieval call binding the contract method 0x9e5d4c49. +// Initialize is a free data retrieval call binding the contract method 0xc4d66de8. // -// Solidity: function executeCall(address , uint256 , bytes ) pure returns(bool, bytes) -func (_BridgeStub *BridgeStubCallerSession) ExecuteCall(arg0 common.Address, arg1 *big.Int, arg2 []byte) (bool, []byte, error) { - return _BridgeStub.Contract.ExecuteCall(&_BridgeStub.CallOpts, arg0, arg1, arg2) +// Solidity: function initialize(address ) pure returns() +func (_BridgeStub *BridgeStubCallerSession) Initialize(arg0 common.Address) error { + return _BridgeStub.Contract.Initialize(&_BridgeStub.CallOpts, arg0) } // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function rollup() view returns(address) +// Solidity: function rollup() pure returns(address) func (_BridgeStub *BridgeStubCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _BridgeStub.contract.Call(opts, &out, "rollup") @@ -530,14 +527,14 @@ func (_BridgeStub *BridgeStubCaller) Rollup(opts *bind.CallOpts) (common.Address // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function rollup() view returns(address) +// Solidity: function rollup() pure returns(address) func (_BridgeStub *BridgeStubSession) Rollup() (common.Address, error) { return _BridgeStub.Contract.Rollup(&_BridgeStub.CallOpts) } // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function rollup() view returns(address) +// Solidity: function rollup() pure returns(address) func (_BridgeStub *BridgeStubCallerSession) Rollup() (common.Address, error) { return _BridgeStub.Contract.Rollup(&_BridgeStub.CallOpts) } @@ -787,25 +784,25 @@ func (_BridgeStub *BridgeStubTransactorSession) EnqueueSequencerMessage(dataHash return _BridgeStub.Contract.EnqueueSequencerMessage(&_BridgeStub.TransactOpts, dataHash, afterDelayedMessagesRead, prevMessageCount, newMessageCount) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // -// Solidity: function initialize(address rollup_) returns() -func (_BridgeStub *BridgeStubTransactor) Initialize(opts *bind.TransactOpts, rollup_ common.Address) (*types.Transaction, error) { - return _BridgeStub.contract.Transact(opts, "initialize", rollup_) +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_BridgeStub *BridgeStubTransactor) ExecuteCall(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _BridgeStub.contract.Transact(opts, "executeCall", to, value, data) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // -// Solidity: function initialize(address rollup_) returns() -func (_BridgeStub *BridgeStubSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _BridgeStub.Contract.Initialize(&_BridgeStub.TransactOpts, rollup_) +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_BridgeStub *BridgeStubSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _BridgeStub.Contract.ExecuteCall(&_BridgeStub.TransactOpts, to, value, data) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// ExecuteCall is a paid mutator transaction binding the contract method 0x9e5d4c49. // -// Solidity: function initialize(address rollup_) returns() -func (_BridgeStub *BridgeStubTransactorSession) Initialize(rollup_ common.Address) (*types.Transaction, error) { - return _BridgeStub.Contract.Initialize(&_BridgeStub.TransactOpts, rollup_) +// Solidity: function executeCall(address to, uint256 value, bytes data) returns(bool success, bytes returnData) +func (_BridgeStub *BridgeStubTransactorSession) ExecuteCall(to common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _BridgeStub.Contract.ExecuteCall(&_BridgeStub.TransactOpts, to, value, data) } // SetDelayedInbox is a paid mutator transaction binding the contract method 0x47fb24c5. @@ -1475,6 +1472,140 @@ func (_BridgeStub *BridgeStubFilterer) ParseOutboxToggle(log types.Log) (*Bridge return event, nil } +// BridgeStubRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the BridgeStub contract. +type BridgeStubRollupUpdatedIterator struct { + Event *BridgeStubRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeStubRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeStubRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeStubRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeStubRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeStubRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeStubRollupUpdated represents a RollupUpdated event raised by the BridgeStub contract. +type BridgeStubRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeStub *BridgeStubFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*BridgeStubRollupUpdatedIterator, error) { + + logs, sub, err := _BridgeStub.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &BridgeStubRollupUpdatedIterator{contract: _BridgeStub.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeStub *BridgeStubFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *BridgeStubRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _BridgeStub.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeStubRollupUpdated) + if err := _BridgeStub.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeStub *BridgeStubFilterer) ParseRollupUpdated(log types.Log) (*BridgeStubRollupUpdated, error) { + event := new(BridgeStubRollupUpdated) + if err := _BridgeStub.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // BridgeStubSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the BridgeStub contract. type BridgeStubSequencerInboxUpdatedIterator struct { Event *BridgeStubSequencerInboxUpdated // Event containing the contract specifics and raw log @@ -1611,8 +1742,8 @@ func (_BridgeStub *BridgeStubFilterer) ParseSequencerInboxUpdated(log types.Log) // BridgeUnproxiedMetaData contains all meta data concerning the BridgeUnproxied contract. var BridgeUnproxiedMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b50600580546001600160a01b03199081166001600160a01b031790915560088054909116331790556080516119d961005e60003960008181610b660152610f9401526119d96000f3fe60806040526004361061017f5760003560e01c80639e5d4c49116100d6578063d5719dc21161007f578063eca067ad11610059578063eca067ad14610457578063ee35f3271461046c578063f81ff3b31461048c57600080fd5b8063d5719dc214610417578063e76f5c8d14610437578063e77145f41461023457600080fd5b8063c4d66de8116100b0578063c4d66de8146103b7578063cb23bcb5146103d7578063cee3d728146103f757600080fd5b80639e5d4c4914610337578063ab5d894314610365578063ae60bd131461037a57600080fd5b80635fca4a16116101385780638db5993b116101125780638db5993b146102cc578063919cc706146102df578063945e1147146102ff57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028c57600080fd5b8063413b35bd11610169578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a8575b600080fd5b34801561019057600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c33660046116da565b6104ac565b3480156101d457600080fd5b506102046101e336600461170b565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f36600461172f565b6104cd565b005b34801561024257600080fd5b5061023461025136600461170b565b6107d3565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b5061019561028736600461176d565b6108fe565b34801561029857600080fd5b506102ac6102a7366004611799565b61095f565b60408051948552602085019390935291830152606082015260800161019f565b6101956102da3660046117cb565b610af8565b3480156102eb57600080fd5b506102346102fa36600461170b565b610b5c565b34801561030b57600080fd5b5061031f61031a3660046116da565b610ca1565b6040516001600160a01b03909116815260200161019f565b34801561034357600080fd5b50610357610352366004611812565b610ccb565b60405161019f92919061189b565b34801561037157600080fd5b5061031f610e78565b34801561038657600080fd5b5061020461039536600461170b565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103c357600080fd5b506102346103d236600461170b565b610ebb565b3480156103e357600080fd5b5060085461031f906001600160a01b031681565b34801561040357600080fd5b5061023461041236600461172f565b6110ab565b34801561042357600080fd5b506101956104323660046116da565b611419565b34801561044357600080fd5b5061031f6104523660046116da565b611429565b34801561046357600080fd5b50600654610195565b34801561047857600080fd5b5060095461031f906001600160a01b031681565b34801561049857600080fd5b506102346104a73660046116da565b611439565b600781815481106104bc57600080fd5b600091825260209091200154905081565b6008546001600160a01b0316331461059c5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d91906118f3565b9050336001600160a01b0382161461059a57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106085750505050565b82156106a357604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600380546106b390600190611910565b815481106106c3576106c3611931565b6000918252602090912001548254600380546001600160a01b039093169290919081106106f2576106f2611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061074057610740611931565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600380548061077657610776611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6008546001600160a01b0316331461089d5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085391906118f3565b9050336001600160a01b0382161461089b57600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b6009546000906001600160a01b03163314610947576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610956600d8443424887611508565b90505b92915050565b6009546000908190819081906001600160a01b031633146109ae576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b85600a54141580156109bf57508515155b80156109cc5750600a5415155b15610a1157600a546040517fe2051feb000000000000000000000000000000000000000000000000000000008152600481019190915260248101879052604401610591565b600a85905560075493508315610a4f5760078054610a3190600190611910565b81548110610a4157610a41611931565b906000526020600020015492505b8615610a80576006610a62600189611910565b81548110610a7257610a72611931565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b3360009081526001602081905260408220015460ff16610b46576040517fb6c60ea3000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610b54848443424887611508565b949350505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bfa5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610c70576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610591565b50506008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60048181548110610cb157600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610d1c576040517f32ea82ab000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b8215801590610d3357506001600160a01b0386163b155b15610d75576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610591565b6005805473ffffffffffffffffffffffffffffffffffffffff19811633179091556040516001600160a01b03918216918816908790610db7908890889061195d565b60006040518083038185875af1925050503d8060008114610df4576040519150601f19603f3d011682016040523d82523d6000602084013e610df9565b606091505b506005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610e66908a908a908a9061196d565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000018101610eb657600091505090565b919050565b600054610100900460ff1615808015610edb5750600054600160ff909116105b80610ef55750303b158015610ef5575060005460ff166001145b610f675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610591565b6000805460ff191660011790558015610f8a576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110285760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556008805490911691841691909117905580156107cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6008546001600160a01b031633146111755760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906118f3565b9050336001600160a01b0382161461117357600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b038316016111e2576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610591565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a28215158115150361124f5750505050565b82156112eb57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600480546112fb90600190611910565b8154811061130b5761130b611931565b6000918252602090912001548254600480546001600160a01b0390931692909190811061133a5761133a611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460026000600485600001548154811061138857611388611931565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806113be576113be611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104bc57600080fd5b60038181548110610cb157600080fd5b6008546001600160a01b031633146115035760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b991906118f3565b9050336001600160a01b0382161461150157600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b600a55565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a5909201909252805191012060009190600082156116055760066115e7600185611910565b815481106115f7576115f7611931565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b6000602082840312156116ec57600080fd5b5035919050565b6001600160a01b038116811461170857600080fd5b50565b60006020828403121561171d57600080fd5b8135611728816116f3565b9392505050565b6000806040838503121561174257600080fd5b823561174d816116f3565b91506020830135801515811461176257600080fd5b809150509250929050565b6000806040838503121561178057600080fd5b823561178b816116f3565b946020939093013593505050565b600080600080608085870312156117af57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156117e057600080fd5b833560ff811681146117f157600080fd5b92506020840135611801816116f3565b929592945050506040919091013590565b6000806000806060858703121561182857600080fd5b8435611833816116f3565b935060208501359250604085013567ffffffffffffffff8082111561185757600080fd5b818701915087601f83011261186b57600080fd5b81358181111561187a57600080fd5b88602082850101111561188c57600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b818110156118d1578581018301518582016060015282016118b5565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561190557600080fd5b8151611728816116f3565b8181038181111561095957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220141a4ccb62f810380b79eaa024f3f8acbf2f1a6f2416a607c2f42eac3755735364736f6c63430008110033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerMessageNumber\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"InvalidOutboxSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotSequencerInbox\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMsgCount\",\"type\":\"uint256\"}],\"name\":\"setSequencerReportedSubMessageCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50600580546001600160a01b03199081166001600160a01b03179091556008805490911633179055608051611a716100576000396000610f2a0152611a716000f3fe60806040526004361061017f5760003560e01c80639e5d4c49116100d6578063d5719dc21161007f578063eca067ad11610059578063eca067ad14610457578063ee35f3271461046c578063f81ff3b31461048c57600080fd5b8063d5719dc214610417578063e76f5c8d14610437578063e77145f41461023457600080fd5b8063c4d66de8116100b0578063c4d66de8146103b7578063cb23bcb5146103d7578063cee3d728146103f757600080fd5b80639e5d4c4914610337578063ab5d894314610365578063ae60bd131461037a57600080fd5b80635fca4a16116101385780638db5993b116101125780638db5993b146102cc578063919cc706146102df578063945e1147146102ff57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028c57600080fd5b8063413b35bd11610169578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a8575b600080fd5b34801561019057600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c3366004611761565b6104ac565b3480156101d457600080fd5b506102046101e336600461178f565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f3660046117b3565b6104cd565b005b34801561024257600080fd5b5061023461025136600461178f565b6107d3565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b506101956102873660046117f1565b6108ff565b34801561029857600080fd5b506102ac6102a736600461181d565b610960565b60408051948552602085019390935291830152606082015260800161019f565b6101956102da36600461184f565b610af9565b3480156102eb57600080fd5b506102346102fa36600461178f565b610b0f565b34801561030b57600080fd5b5061031f61031a366004611761565b610c34565b6040516001600160a01b03909116815260200161019f565b34801561034357600080fd5b50610357610352366004611896565b610c5e565b60405161019f929190611943565b34801561037157600080fd5b5061031f610df4565b34801561038657600080fd5b5061020461039536600461178f565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103c357600080fd5b506102346103d236600461178f565b610e37565b3480156103e357600080fd5b5060085461031f906001600160a01b031681565b34801561040357600080fd5b506102346104123660046117b3565b61105b565b34801561042357600080fd5b50610195610432366004611761565b6113c9565b34801561044357600080fd5b5061031f610452366004611761565b6113d9565b34801561046357600080fd5b50600654610195565b34801561047857600080fd5b5060095461031f906001600160a01b031681565b34801561049857600080fd5b506102346104a7366004611761565b6113e9565b600781815481106104bc57600080fd5b600091825260209091200154905081565b6008546001600160a01b0316331461059c5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d919061197f565b9050336001600160a01b0382161461059a57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106085750505050565b82156106a357604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600380546106b39060019061199c565b815481106106c3576106c36119bd565b6000918252602090912001548254600380546001600160a01b039093169290919081106106f2576106f26119bd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600160006003856000015481548110610740576107406119bd565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610776576107766119d3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6008546001600160a01b0316331461089d5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610853919061197f565b9050336001600160a01b0382161461089b57600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a906020015b60405180910390a150565b6009546000906001600160a01b03163314610948576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610957600d84434248876114b8565b90505b92915050565b6009546000908190819081906001600160a01b031633146109af576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b85600a54141580156109c057508515155b80156109cd5750600a5415155b15610a1257600a546040517fe2051feb000000000000000000000000000000000000000000000000000000008152600481019190915260248101879052604401610591565b600a85905560075493508315610a505760078054610a329060019061199c565b81548110610a4257610a426119bd565b906000526020600020015492505b8615610a81576006610a6360018961199c565b81548110610a7357610a736119bd565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b6000610b078484843461168a565b949350505050565b6008546001600160a01b03163314610bd95760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f919061197f565b9050336001600160a01b03821614610bd757600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a906020016108f4565b60048181548110610c4457600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610caf576040517f32ea82ab000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b8215801590610cc657506001600160a01b0386163b155b15610d08576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610591565b6005805473ffffffffffffffffffffffffffffffffffffffff1981163317909155604080516020601f87018190048102820181019092528581526001600160a01b0390921691610d76918991899189908990819084018382808284376000920191909152506116f292505050565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610de2908a908a908a906119e9565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000018101610e3257600091505090565b919050565b600054610100900460ff1615808015610e575750600054600160ff909116105b80610e715750303b158015610e71575060005460ff166001145b610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610591565b6000805460ff191660011790558015610f20576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556008805490911691841691909117905580156107cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6008546001600160a01b031633146111255760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db919061197f565b9050336001600160a01b0382161461112357600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b03831601611192576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610591565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a2821515811515036111ff5750505050565b821561129b57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600480546112ab9060019061199c565b815481106112bb576112bb6119bd565b6000918252602090912001548254600480546001600160a01b039093169290919081106112ea576112ea6119bd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600260006004856000015481548110611338576113386119bd565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600480548061136e5761136e6119d3565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104bc57600080fd5b60038181548110610c4457600080fd5b6008546001600160a01b031633146114b35760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611469919061197f565b9050336001600160a01b038216146114b157600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b600a55565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a5909201909252805191012060009190600082156115b557600661159760018561199c565b815481106115a7576115a76119bd565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b3360009081526001602081905260408220015460ff166116d8576040517fb6c60ea3000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b60006116e88686434248896114b8565b9695505050505050565b60006060846001600160a01b0316848460405161170f9190611a1f565b60006040518083038185875af1925050503d806000811461174c576040519150601f19603f3d011682016040523d82523d6000602084013e611751565b606091505b5090969095509350505050565b50565b60006020828403121561177357600080fd5b5035919050565b6001600160a01b038116811461175e57600080fd5b6000602082840312156117a157600080fd5b81356117ac8161177a565b9392505050565b600080604083850312156117c657600080fd5b82356117d18161177a565b9150602083013580151581146117e657600080fd5b809150509250929050565b6000806040838503121561180457600080fd5b823561180f8161177a565b946020939093013593505050565b6000806000806080858703121561183357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561186457600080fd5b833560ff8116811461187557600080fd5b925060208401356118858161177a565b929592945050506040919091013590565b600080600080606085870312156118ac57600080fd5b84356118b78161177a565b935060208501359250604085013567ffffffffffffffff808211156118db57600080fd5b818701915087601f8301126118ef57600080fd5b8135818111156118fe57600080fd5b88602082850101111561191057600080fd5b95989497505060200194505050565b60005b8381101561193a578181015183820152602001611922565b50506000910152565b8215158152604060208201526000825180604084015261196a81606085016020870161191f565b601f01601f1916919091016060019392505050565b60006020828403121561199157600080fd5b81516117ac8161177a565b8181038181111561095a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251611a3181846020870161191f565b919091019291505056fea2646970667358221220e40a5934fd1424aa8e65621b0aa4b73113f78b84b3f873b9da68a49496c86f8564736f6c63430008110033", } // BridgeUnproxiedABI is the input ABI used to generate the binding from. @@ -3123,6 +3254,140 @@ func (_BridgeUnproxied *BridgeUnproxiedFilterer) ParseOutboxToggle(log types.Log return event, nil } +// BridgeUnproxiedRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the BridgeUnproxied contract. +type BridgeUnproxiedRollupUpdatedIterator struct { + Event *BridgeUnproxiedRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeUnproxiedRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeUnproxiedRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeUnproxiedRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeUnproxiedRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeUnproxiedRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeUnproxiedRollupUpdated represents a RollupUpdated event raised by the BridgeUnproxied contract. +type BridgeUnproxiedRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeUnproxied *BridgeUnproxiedFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*BridgeUnproxiedRollupUpdatedIterator, error) { + + logs, sub, err := _BridgeUnproxied.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &BridgeUnproxiedRollupUpdatedIterator{contract: _BridgeUnproxied.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeUnproxied *BridgeUnproxiedFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *BridgeUnproxiedRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _BridgeUnproxied.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeUnproxiedRollupUpdated) + if err := _BridgeUnproxied.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeUnproxied *BridgeUnproxiedFilterer) ParseRollupUpdated(log types.Log) (*BridgeUnproxiedRollupUpdated, error) { + event := new(BridgeUnproxiedRollupUpdated) + if err := _BridgeUnproxied.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // BridgeUnproxiedSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the BridgeUnproxied contract. type BridgeUnproxiedSequencerInboxUpdatedIterator struct { Event *BridgeUnproxiedSequencerInboxUpdated // Event containing the contract specifics and raw log @@ -3452,8 +3717,8 @@ func (_IWETH9 *IWETH9TransactorSession) Withdraw(_amount *big.Int) (*types.Trans // InboxStubMetaData contains all meta data concerning the InboxStub contract. var InboxStubMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b506201cccc608052608051610b25610033600039600061035f0152610b256000f3fe6080604052600436106101695760003560e01c80636e6e8a6a116100cb578063b75436bb1161007f578063e78cea9211610059578063e78cea92146102fb578063e8eb1dc31461034d578063ee35f3271461038157600080fd5b8063b75436bb146102bd578063c474d2c5146102dd578063e6bd12cf1461025e57600080fd5b80638456cb59116100b05780638456cb59146101c15780638a631aa614610287578063a66b327d146102a257600080fd5b80636e6e8a6a1461025057806370665f141461026c57600080fd5b80635075788b116101225780635e916758116101075780635e91675814610242578063679b6ded1461025057806367ef3ab81461025e57600080fd5b80635075788b1461016e5780635c975abb1461020057600080fd5b80633f4ba83a116101535780633f4ba83a146101c1578063439370b1146101d8578063485cc955146101e057600080fd5b8062f723821461016e5780631fe927cf146101a1575b600080fd5b34801561017a57600080fd5b5061018e610189366004610717565b6103ae565b6040519081526020015b60405180910390f35b3480156101ad57600080fd5b5061018e6101bc366004610794565b6103fe565b3480156101cd57600080fd5b506101d66104a9565b005b61018e6103ae565b3480156101ec57600080fd5b506101d66101fb3660046107d6565b6104f1565b34801561020c57600080fd5b506001546102329074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610198565b61018e61018936600461080f565b61018e610189366004610879565b61018e61018936600461091e565b34801561027857600080fd5b5061018e610189366004610991565b34801561029357600080fd5b5061018e6101893660046109de565b3480156102ae57600080fd5b5061018e610189366004610a33565b3480156102c957600080fd5b5061018e6102d8366004610794565b61059f565b3480156102e957600080fd5b506101d66102f8366004610a55565b50565b34801561030757600080fd5b506000546103289073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610198565b34801561035957600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038d57600080fd5b506001546103289073ffffffffffffffffffffffffffffffffffffffff1681565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526000906064015b60405180910390fd5b600033321461044f5760405162461bcd60e51b815260206004820152600b60248201527f6f726967696e206f6e6c7900000000000000000000000000000000000000000060448201526064016103f5565b60006104746003338686604051610467929190610a79565b60405180910390206105fb565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a29392505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f5420494d504c454d454e544544000000000000000000000000000000000060448201526064016103f5565b60005473ffffffffffffffffffffffffffffffffffffffff16156105575760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e4954000000000000000000000000000000000000000060448201526064016103f5565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000806105b86003338686604051610467929190610a79565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b85856040516105ec929190610a89565b60405180910390a29392505050565b600080546040517f8db5993b00000000000000000000000000000000000000000000000000000000815260ff8616600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526044820185905290911690638db5993b90349060640160206040518083038185885af115801561067f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106a49190610ad6565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102f857600080fd5b60008083601f8401126106e057600080fd5b50813567ffffffffffffffff8111156106f857600080fd5b60208301915083602082850101111561071057600080fd5b9250929050565b600080600080600080600060c0888a03121561073257600080fd5b8735965060208801359550604088013594506060880135610752816106ac565b93506080880135925060a088013567ffffffffffffffff81111561077557600080fd5b6107818a828b016106ce565b989b979a50959850939692959293505050565b600080602083850312156107a757600080fd5b823567ffffffffffffffff8111156107be57600080fd5b6107ca858286016106ce565b90969095509350505050565b600080604083850312156107e957600080fd5b82356107f4816106ac565b91506020830135610804816106ac565b809150509250929050565b60008060008060006080868803121561082757600080fd5b85359450602086013593506040860135610840816106ac565b9250606086013567ffffffffffffffff81111561085c57600080fd5b610868888289016106ce565b969995985093965092949392505050565b60008060008060008060008060006101008a8c03121561089857600080fd5b89356108a3816106ac565b985060208a0135975060408a0135965060608a01356108c1816106ac565b955060808a01356108d1816106ac565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff8111156108fb57600080fd5b6109078c828d016106ce565b915080935050809150509295985092959850929598565b60008060008060008060a0878903121561093757600080fd5b8635955060208701359450604087013593506060870135610957816106ac565b9250608087013567ffffffffffffffff81111561097357600080fd5b61097f89828a016106ce565b979a9699509497509295939492505050565b600080600080600060a086880312156109a957600080fd5b8535945060208601359350604086013592506060860135915060808601356109d0816106ac565b809150509295509295909350565b60008060008060008060a087890312156109f757600080fd5b86359550602087013594506040870135610a10816106ac565b935060608701359250608087013567ffffffffffffffff81111561097357600080fd5b60008060408385031215610a4657600080fd5b50508035926020909101359150565b600060208284031215610a6757600080fd5b8135610a72816106ac565b9392505050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600060208284031215610ae857600080fd5b505191905056fea2646970667358221220f8da381333a9b8c35e37ed8b1a839ce828de7fd76680407be8b5050ca86c5ca364736f6c63430008110033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"calculateRetryableSubmissionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedContractTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendL1FundedUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2Message\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"messageData\",\"type\":\"bytes\"}],\"name\":\"sendL2MessageFromOrigin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransaction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"sendUnsignedTransactionToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"sendWithdrawEthToFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"name\":\"setAllowList\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setAllowListEnabled\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"unsafeCreateRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b506201cccc608052608051610dee61003360003960006103fb0152610dee6000f3fe6080604052600436106101a05760003560e01c80638456cb59116100e1578063c474d2c51161008a578063e78cea9211610064578063e78cea92146103bc578063e8eb1dc3146103e9578063ee35f3271461041d578063efeadb6d1461044a57600080fd5b8063c474d2c51461037e578063e3de72a51461039c578063e6bd12cf146102aa57600080fd5b8063a66b327d116100bb578063a66b327d14610328578063b75436bb14610343578063babcc5391461036357600080fd5b80638456cb591461021d5780638a631aa6146102d35780638b3240a0146102ee57600080fd5b80635075788b1161014e578063679b6ded11610128578063679b6ded1461029c57806367ef3ab8146102aa5780636e6e8a6a1461029c57806370665f14146102b857600080fd5b80635075788b146101a55780635c975abb1461025c5780635e9167581461028e57600080fd5b80633f4ba83a1161017f5780633f4ba83a1461021d578063439370b114610234578063485cc9551461023c57600080fd5b8062f72382146101a55780631fe927cf146101d857806322bd5c1c146101f8575b600080fd5b3480156101b157600080fd5b506101c56101c0366004610816565b610465565b6040519081526020015b60405180910390f35b3480156101e457600080fd5b506101c56101f3366004610893565b6104b5565b34801561020457600080fd5b5061020d610465565b60405190151581526020016101cf565b34801561022957600080fd5b50610232610560565b005b6101c5610465565b34801561024857600080fd5b506102326102573660046108d5565b6105a8565b34801561026857600080fd5b5060015461020d9074010000000000000000000000000000000000000000900460ff1681565b6101c56101c036600461090e565b6101c56101c0366004610978565b6101c56101c0366004610a1d565b3480156102c457600080fd5b506101c56101c0366004610a90565b3480156102df57600080fd5b506101c56101c0366004610add565b3480156102fa57600080fd5b50610303610465565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cf565b34801561033457600080fd5b506101c56101c0366004610b32565b34801561034f57600080fd5b506101c561035e366004610893565b610656565b34801561036f57600080fd5b5061020d6101c0366004610b54565b34801561038a57600080fd5b50610232610399366004610b54565b50565b3480156103a857600080fd5b506102326103b7366004610c83565b6106b2565b3480156103c857600080fd5b506000546103039073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f557600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561042957600080fd5b506001546103039073ffffffffffffffffffffffffffffffffffffffff1681565b34801561045657600080fd5b506102326103b7366004610d45565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526000906064015b60405180910390fd5b60003332146105065760405162461bcd60e51b815260206004820152600b60248201527f6f726967696e206f6e6c7900000000000000000000000000000000000000000060448201526064016104ac565b600061052b600333868660405161051e929190610d60565b60405180910390206106fa565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a29392505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f5420494d504c454d454e544544000000000000000000000000000000000060448201526064016104ac565b60005473ffffffffffffffffffffffffffffffffffffffff161561060e5760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e4954000000000000000000000000000000000000000060448201526064016104ac565b50600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008061066f600333868660405161051e929190610d60565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b85856040516106a3929190610d70565b60405180910390a29392505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494d504c454d454e544544000000000000000000000000000000000060448201526064016104ac565b600080546040517f8db5993b00000000000000000000000000000000000000000000000000000000815260ff8616600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526044820185905290911690638db5993b90349060640160206040518083038185885af115801561077e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107a39190610d9f565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461039957600080fd5b60008083601f8401126107df57600080fd5b50813567ffffffffffffffff8111156107f757600080fd5b60208301915083602082850101111561080f57600080fd5b9250929050565b600080600080600080600060c0888a03121561083157600080fd5b8735965060208801359550604088013594506060880135610851816107ab565b93506080880135925060a088013567ffffffffffffffff81111561087457600080fd5b6108808a828b016107cd565b989b979a50959850939692959293505050565b600080602083850312156108a657600080fd5b823567ffffffffffffffff8111156108bd57600080fd5b6108c9858286016107cd565b90969095509350505050565b600080604083850312156108e857600080fd5b82356108f3816107ab565b91506020830135610903816107ab565b809150509250929050565b60008060008060006080868803121561092657600080fd5b8535945060208601359350604086013561093f816107ab565b9250606086013567ffffffffffffffff81111561095b57600080fd5b610967888289016107cd565b969995985093965092949392505050565b60008060008060008060008060006101008a8c03121561099757600080fd5b89356109a2816107ab565b985060208a0135975060408a0135965060608a01356109c0816107ab565b955060808a01356109d0816107ab565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff8111156109fa57600080fd5b610a068c828d016107cd565b915080935050809150509295985092959850929598565b60008060008060008060a08789031215610a3657600080fd5b8635955060208701359450604087013593506060870135610a56816107ab565b9250608087013567ffffffffffffffff811115610a7257600080fd5b610a7e89828a016107cd565b979a9699509497509295939492505050565b600080600080600060a08688031215610aa857600080fd5b853594506020860135935060408601359250606086013591506080860135610acf816107ab565b809150509295509295909350565b60008060008060008060a08789031215610af657600080fd5b86359550602087013594506040870135610b0f816107ab565b935060608701359250608087013567ffffffffffffffff811115610a7257600080fd5b60008060408385031215610b4557600080fd5b50508035926020909101359150565b600060208284031215610b6657600080fd5b8135610b71816107ab565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610bd057610bd0610b78565b604052919050565b600067ffffffffffffffff821115610bf257610bf2610b78565b5060051b60200190565b80358015158114610c0c57600080fd5b919050565b600082601f830112610c2257600080fd5b81356020610c37610c3283610bd8565b610ba7565b82815260059290921b84018101918181019086841115610c5657600080fd5b8286015b84811015610c7857610c6b81610bfc565b8352918301918301610c5a565b509695505050505050565b60008060408385031215610c9657600080fd5b823567ffffffffffffffff80821115610cae57600080fd5b818501915085601f830112610cc257600080fd5b81356020610cd2610c3283610bd8565b82815260059290921b84018101918181019089841115610cf157600080fd5b948201945b83861015610d18578535610d09816107ab565b82529482019490820190610cf6565b96505086013592505080821115610d2e57600080fd5b50610d3b85828601610c11565b9150509250929050565b600060208284031215610d5757600080fd5b610b7182610bfc565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215610db157600080fd5b505191905056fea264697066735822122005587dcefa7d96e7d4aeb458571b911be942514db24b65b36f37b34336f7215664736f6c63430008110033", } // InboxStubABI is the input ABI used to generate the binding from. @@ -3623,27 +3888,58 @@ func (_InboxStub *InboxStubTransactorRaw) Transact(opts *bind.TransactOpts, meth return _InboxStub.Contract.contract.Transact(opts, method, params...) } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. // -// Solidity: function bridge() view returns(address) -func (_InboxStub *InboxStubCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function allowListEnabled() pure returns(bool) +func (_InboxStub *InboxStubCaller) AllowListEnabled(opts *bind.CallOpts) (bool, error) { var out []interface{} - err := _InboxStub.contract.Call(opts, &out, "bridge") + err := _InboxStub.contract.Call(opts, &out, "allowListEnabled") if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. // -// Solidity: function bridge() view returns(address) -func (_InboxStub *InboxStubSession) Bridge() (common.Address, error) { +// Solidity: function allowListEnabled() pure returns(bool) +func (_InboxStub *InboxStubSession) AllowListEnabled() (bool, error) { + return _InboxStub.Contract.AllowListEnabled(&_InboxStub.CallOpts) +} + +// AllowListEnabled is a free data retrieval call binding the contract method 0x22bd5c1c. +// +// Solidity: function allowListEnabled() pure returns(bool) +func (_InboxStub *InboxStubCallerSession) AllowListEnabled() (bool, error) { + return _InboxStub.Contract.AllowListEnabled(&_InboxStub.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_InboxStub *InboxStubCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_InboxStub *InboxStubSession) Bridge() (common.Address, error) { return _InboxStub.Contract.Bridge(&_InboxStub.CallOpts) } @@ -3685,6 +3981,68 @@ func (_InboxStub *InboxStubCallerSession) CalculateRetryableSubmissionFee(arg0 * return _InboxStub.Contract.CalculateRetryableSubmissionFee(&_InboxStub.CallOpts, arg0, arg1) } +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() pure returns(address) +func (_InboxStub *InboxStubCaller) GetProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "getProxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() pure returns(address) +func (_InboxStub *InboxStubSession) GetProxyAdmin() (common.Address, error) { + return _InboxStub.Contract.GetProxyAdmin(&_InboxStub.CallOpts) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0x8b3240a0. +// +// Solidity: function getProxyAdmin() pure returns(address) +func (_InboxStub *InboxStubCallerSession) GetProxyAdmin() (common.Address, error) { + return _InboxStub.Contract.GetProxyAdmin(&_InboxStub.CallOpts) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) pure returns(bool) +func (_InboxStub *InboxStubCaller) IsAllowed(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "isAllowed", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) pure returns(bool) +func (_InboxStub *InboxStubSession) IsAllowed(arg0 common.Address) (bool, error) { + return _InboxStub.Contract.IsAllowed(&_InboxStub.CallOpts, arg0) +} + +// IsAllowed is a free data retrieval call binding the contract method 0xbabcc539. +// +// Solidity: function isAllowed(address ) pure returns(bool) +func (_InboxStub *InboxStubCallerSession) IsAllowed(arg0 common.Address) (bool, error) { + return _InboxStub.Contract.IsAllowed(&_InboxStub.CallOpts, arg0) +} + // MaxDataSize is a free data retrieval call binding the contract method 0xe8eb1dc3. // // Solidity: function maxDataSize() view returns(uint256) @@ -3838,6 +4196,68 @@ func (_InboxStub *InboxStubCallerSession) SendUnsignedTransaction(arg0 *big.Int, return _InboxStub.Contract.SendUnsignedTransaction(&_InboxStub.CallOpts, arg0, arg1, arg2, arg3, arg4, arg5) } +// SendUnsignedTransactionToFork is a free data retrieval call binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) pure returns(uint256) +func (_InboxStub *InboxStubCaller) SendUnsignedTransactionToFork(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*big.Int, error) { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "sendUnsignedTransactionToFork", arg0, arg1, arg2, arg3, arg4, arg5) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SendUnsignedTransactionToFork is a free data retrieval call binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) pure returns(uint256) +func (_InboxStub *InboxStubSession) SendUnsignedTransactionToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*big.Int, error) { + return _InboxStub.Contract.SendUnsignedTransactionToFork(&_InboxStub.CallOpts, arg0, arg1, arg2, arg3, arg4, arg5) +} + +// SendUnsignedTransactionToFork is a free data retrieval call binding the contract method 0x00f72382. +// +// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) pure returns(uint256) +func (_InboxStub *InboxStubCallerSession) SendUnsignedTransactionToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*big.Int, error) { + return _InboxStub.Contract.SendUnsignedTransactionToFork(&_InboxStub.CallOpts, arg0, arg1, arg2, arg3, arg4, arg5) +} + +// SendWithdrawEthToFork is a free data retrieval call binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) pure returns(uint256) +func (_InboxStub *InboxStubCaller) SendWithdrawEthToFork(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*big.Int, error) { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "sendWithdrawEthToFork", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SendWithdrawEthToFork is a free data retrieval call binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) pure returns(uint256) +func (_InboxStub *InboxStubSession) SendWithdrawEthToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*big.Int, error) { + return _InboxStub.Contract.SendWithdrawEthToFork(&_InboxStub.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// SendWithdrawEthToFork is a free data retrieval call binding the contract method 0x70665f14. +// +// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) pure returns(uint256) +func (_InboxStub *InboxStubCallerSession) SendWithdrawEthToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*big.Int, error) { + return _InboxStub.Contract.SendWithdrawEthToFork(&_InboxStub.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + // SequencerInbox is a free data retrieval call binding the contract method 0xee35f327. // // Solidity: function sequencerInbox() view returns(address) @@ -3869,6 +4289,64 @@ func (_InboxStub *InboxStubCallerSession) SequencerInbox() (common.Address, erro return _InboxStub.Contract.SequencerInbox(&_InboxStub.CallOpts) } +// SetAllowList is a free data retrieval call binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] , bool[] ) pure returns() +func (_InboxStub *InboxStubCaller) SetAllowList(opts *bind.CallOpts, arg0 []common.Address, arg1 []bool) error { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "setAllowList", arg0, arg1) + + if err != nil { + return err + } + + return err + +} + +// SetAllowList is a free data retrieval call binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] , bool[] ) pure returns() +func (_InboxStub *InboxStubSession) SetAllowList(arg0 []common.Address, arg1 []bool) error { + return _InboxStub.Contract.SetAllowList(&_InboxStub.CallOpts, arg0, arg1) +} + +// SetAllowList is a free data retrieval call binding the contract method 0xe3de72a5. +// +// Solidity: function setAllowList(address[] , bool[] ) pure returns() +func (_InboxStub *InboxStubCallerSession) SetAllowList(arg0 []common.Address, arg1 []bool) error { + return _InboxStub.Contract.SetAllowList(&_InboxStub.CallOpts, arg0, arg1) +} + +// SetAllowListEnabled is a free data retrieval call binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool ) pure returns() +func (_InboxStub *InboxStubCaller) SetAllowListEnabled(opts *bind.CallOpts, arg0 bool) error { + var out []interface{} + err := _InboxStub.contract.Call(opts, &out, "setAllowListEnabled", arg0) + + if err != nil { + return err + } + + return err + +} + +// SetAllowListEnabled is a free data retrieval call binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool ) pure returns() +func (_InboxStub *InboxStubSession) SetAllowListEnabled(arg0 bool) error { + return _InboxStub.Contract.SetAllowListEnabled(&_InboxStub.CallOpts, arg0) +} + +// SetAllowListEnabled is a free data retrieval call binding the contract method 0xefeadb6d. +// +// Solidity: function setAllowListEnabled(bool ) pure returns() +func (_InboxStub *InboxStubCallerSession) SetAllowListEnabled(arg0 bool) error { + return _InboxStub.Contract.SetAllowListEnabled(&_InboxStub.CallOpts, arg0) +} + // Unpause is a free data retrieval call binding the contract method 0x3f4ba83a. // // Solidity: function unpause() pure returns() @@ -4087,48 +4565,6 @@ func (_InboxStub *InboxStubTransactorSession) SendL2MessageFromOrigin(messageDat return _InboxStub.Contract.SendL2MessageFromOrigin(&_InboxStub.TransactOpts, messageData) } -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. -// -// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) returns(uint256) -func (_InboxStub *InboxStubTransactor) SendUnsignedTransactionToFork(opts *bind.TransactOpts, arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*types.Transaction, error) { - return _InboxStub.contract.Transact(opts, "sendUnsignedTransactionToFork", arg0, arg1, arg2, arg3, arg4, arg5) -} - -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. -// -// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) returns(uint256) -func (_InboxStub *InboxStubSession) SendUnsignedTransactionToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*types.Transaction, error) { - return _InboxStub.Contract.SendUnsignedTransactionToFork(&_InboxStub.TransactOpts, arg0, arg1, arg2, arg3, arg4, arg5) -} - -// SendUnsignedTransactionToFork is a paid mutator transaction binding the contract method 0x00f72382. -// -// Solidity: function sendUnsignedTransactionToFork(uint256 , uint256 , uint256 , address , uint256 , bytes ) returns(uint256) -func (_InboxStub *InboxStubTransactorSession) SendUnsignedTransactionToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 common.Address, arg4 *big.Int, arg5 []byte) (*types.Transaction, error) { - return _InboxStub.Contract.SendUnsignedTransactionToFork(&_InboxStub.TransactOpts, arg0, arg1, arg2, arg3, arg4, arg5) -} - -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. -// -// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) returns(uint256) -func (_InboxStub *InboxStubTransactor) SendWithdrawEthToFork(opts *bind.TransactOpts, arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*types.Transaction, error) { - return _InboxStub.contract.Transact(opts, "sendWithdrawEthToFork", arg0, arg1, arg2, arg3, arg4) -} - -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. -// -// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) returns(uint256) -func (_InboxStub *InboxStubSession) SendWithdrawEthToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*types.Transaction, error) { - return _InboxStub.Contract.SendWithdrawEthToFork(&_InboxStub.TransactOpts, arg0, arg1, arg2, arg3, arg4) -} - -// SendWithdrawEthToFork is a paid mutator transaction binding the contract method 0x70665f14. -// -// Solidity: function sendWithdrawEthToFork(uint256 , uint256 , uint256 , uint256 , address ) returns(uint256) -func (_InboxStub *InboxStubTransactorSession) SendWithdrawEthToFork(arg0 *big.Int, arg1 *big.Int, arg2 *big.Int, arg3 *big.Int, arg4 common.Address) (*types.Transaction, error) { - return _InboxStub.Contract.SendWithdrawEthToFork(&_InboxStub.TransactOpts, arg0, arg1, arg2, arg3, arg4) -} - // UnsafeCreateRetryableTicket is a paid mutator transaction binding the contract method 0x6e6e8a6a. // // Solidity: function unsafeCreateRetryableTicket(address , uint256 , uint256 , address , address , uint256 , uint256 , bytes ) payable returns(uint256) @@ -4442,7 +4878,7 @@ func (_InboxStub *InboxStubFilterer) ParseInboxMessageDeliveredFromOrigin(log ty // MerkleTreeAccessMetaData contains all meta data concerning the MerkleTreeAccess contract. var MerkleTreeAccessMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"me\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"subtreeRoot\",\"type\":\"bytes32\"}],\"name\":\"appendCompleteSubTree\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"me\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"}],\"name\":\"appendLeaf\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"leastSignificantBit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endSize\",\"type\":\"uint256\"}],\"name\":\"maximumAppendBetween\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"mostSignificantBit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"me\",\"type\":\"bytes32[]\"}],\"name\":\"root\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rootHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyInclusionProof\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"preRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"postRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"postSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"preExpansion\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyPrefixProof\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506116b8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c22c47a41161005b578063c22c47a4146100ff578063ca11325314610112578063d230d23f14610125578063e6bcbc651461013857600080fd5b80635fb9c3d41461008d57806367905a7e146100a25780636bd58993146100cb578063bc2f0640146100de575b600080fd5b6100a061009b3660046112de565b61014b565b005b6100b56100b0366004611367565b610161565b6040516100c291906113b5565b60405180910390f35b6100a06100d93660046113f9565b610178565b6100f16100ec366004611453565b61018a565b6040519081526020016100c2565b6100b561010d366004611475565b61019f565b6100f16101203660046114ba565b6101ab565b6100f16101333660046114f7565b6101b6565b6100f16101463660046114f7565b6101c1565b6101598686868686866101cc565b505050505050565b606061016e8484846104f4565b90505b9392505050565b61018484848484610a7e565b50505050565b60006101968383610b0b565b90505b92915050565b60606101968383610c00565b600061019982610c36565b600061019982610dd6565b600061019982610e3f565b600085116102215760405162461bcd60e51b815260206004820152601460248201527f5072652d73697a652063616e6e6f74206265203000000000000000000000000060448201526064015b60405180910390fd5b8561022b83610c36565b146102785760405162461bcd60e51b815260206004820152601b60248201527f50726520657870616e73696f6e20726f6f74206d69736d6174636800000000006044820152606401610218565b8461028283610f85565b146102f55760405162461bcd60e51b815260206004820152602160248201527f5072652073697a6520646f6573206e6f74206d6174636820657870616e73696f60448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610218565b8285106103445760405162461bcd60e51b815260206004820181905260248201527f5072652073697a65206e6f74206c657373207468616e20706f73742073697a656044820152606401610218565b60008590506000806103598560008751610fe0565b90505b8583101561041c5760006103708488610b0b565b9050845183106103c25760405162461bcd60e51b815260206004820152601260248201527f496e646578206f7574206f662072616e676500000000000000000000000000006044820152606401610218565b6103e682828786815181106103d9576103d9611510565b60200260200101516104f4565b91506001811b6103f6818661153c565b9450878511156104085761040861154f565b8361041281611565565b945050505061035c565b8661042682610c36565b146104995760405162461bcd60e51b815260206004820152602260248201527f506f737420657870616e73696f6e20726f6f74206e6f7420657175616c20706f60448201527f73740000000000000000000000000000000000000000000000000000000000006064820152608401610218565b835182146104e95760405162461bcd60e51b815260206004820152601660248201527f496e636f6d706c6574652070726f6f66207573616765000000000000000000006044820152606401610218565b505050505050505050565b6060604083106105465760405162461bcd60e51b815260206004820152600e60248201527f4c6576656c20746f6f20686967680000000000000000000000000000000000006044820152606401610218565b60008290036105975760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420617070656e6420656d707479207375627472656500000000006044820152606401610218565b6040845111156105e95760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c617267650000000000006044820152606401610218565b83516000036106685760006105ff84600161153c565b67ffffffffffffffff8111156106175761061761121a565b604051908082528060200260200182016040528015610640578160200160208202803683370190505b5090508281858151811061065657610656611510565b60209081029190910101529050610171565b835183106106de5760405162461bcd60e51b815260206004820152603560248201527f4c6576656c2067726561746572207468616e2068696768657374206c6576656c60448201527f206f662063757272656e7420657870616e73696f6e00000000000000000000006064820152608401610218565b8160006106ea86610f85565b905060006106f9866002611663565b610703908361153c565b9050600061071083610e3f565b61071983610e3f565b1161076757875167ffffffffffffffff8111156107385761073861121a565b604051908082528060200260200182016040528015610761578160200160208202803683370190505b506107b7565b875161077490600161153c565b67ffffffffffffffff81111561078c5761078c61121a565b6040519080825280602002602001820160405280156107b5578160200160208202803683370190505b505b905060408151111561080b5760405162461bcd60e51b815260206004820152601c60248201527f417070656e642063726561746573206f76657273697a652074726565000000006044820152606401610218565b60005b88518110156109c757878110156108b55788818151811061083157610831611510565b60200260200101516000801b146108b05760405162461bcd60e51b815260206004820152602260248201527f417070656e642061626f7665206c65617374207369676e69666963616e74206260448201527f69740000000000000000000000000000000000000000000000000000000000006064820152608401610218565b6109b5565b60008590036108fb578881815181106108d0576108d0611510565b60200260200101518282815181106108ea576108ea611510565b6020026020010181815250506109b5565b88818151811061090d5761090d611510565b60200260200101516000801b03610945578482828151811061093157610931611510565b6020908102919091010152600094506109b5565b6000801b82828151811061095b5761095b611510565b60200260200101818152505088818151811061097957610979611510565b60200260200101518560405160200161099c929190918252602082015260400190565b6040516020818303038152906040528051906020012094505b806109bf81611565565b91505061080e565b5083156109fb578381600183516109de919061166f565b815181106109ee576109ee611510565b6020026020010181815250505b8060018251610a0a919061166f565b81518110610a1a57610a1a611510565b60200260200101516000801b03610a735760405162461bcd60e51b815260206004820152600f60248201527f4c61737420656e747279207a65726f00000000000000000000000000000000006044820152606401610218565b979650505050505050565b6000610ab3828486604051602001610a9891815260200190565b6040516020818303038152906040528051906020012061115f565b9050808514610b045760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420696e636c7573696f6e2070726f6f660000000000000000006044820152606401610218565b5050505050565b6000818310610b5c5760405162461bcd60e51b815260206004820152601760248201527f5374617274206e6f74206c657373207468616e20656e640000000000000000006044820152606401610218565b6000610b69838518610e3f565b905060006001610b79838261153c565b6001901b610b87919061166f565b90508481168482168115610ba957610b9e82610dd6565b945050505050610199565b8015610bb857610b9e81610e3f565b60405162461bcd60e51b815260206004820152601b60248201527f426f7468207920616e64207a2063616e6e6f74206265207a65726f00000000006044820152606401610218565b606061019683600084604051602001610c1b91815260200190565b604051602081830303815290604052805190602001206104f4565b600080825111610c885760405162461bcd60e51b815260206004820152601660248201527f456d707479206d65726b6c6520657870616e73696f6e000000000000000000006044820152606401610218565b604082511115610cda5760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c617267650000000000006044820152606401610218565b6000805b8351811015610dcf576000848281518110610cfb57610cfb611510565b60200260200101519050826000801b03610d67578015610d625780925060018551610d26919061166f565b8214610d6257604051610d49908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b610dbc565b8015610d86576040805160208101839052908101849052606001610d49565b604051610da3908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b5080610dc781611565565b915050610cde565b5092915050565b6000808211610e275760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e742062697473000000006044820152606401610218565b60008280610e3660018261166f565b16189050610171815b600081600003610e915760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e742062697473000000006044820152606401610218565b7001000000000000000000000000000000008210610ebc57608091821c91610eb9908261153c565b90505b680100000000000000008210610edf57604091821c91610edc908261153c565b90505b6401000000008210610efe57602091821c91610efb908261153c565b90505b620100008210610f1b57601091821c91610f18908261153c565b90505b6101008210610f3757600891821c91610f34908261153c565b90505b60108210610f5257600491821c91610f4f908261153c565b90505b60048210610f6d57600291821c91610f6a908261153c565b90505b60028210610f805761019960018261153c565b919050565b600080805b8351811015610dcf57838181518110610fa557610fa5611510565b60200260200101516000801b14610fce57610fc1816002611663565b610fcb908361153c565b91505b80610fd881611565565b915050610f8a565b60608183106110315760405162461bcd60e51b815260206004820152601760248201527f5374617274206e6f74206c657373207468616e20656e640000000000000000006044820152606401610218565b83518211156110a85760405162461bcd60e51b815260206004820152602160248201527f456e64206e6f74206c657373206f7220657175616c207468616e206c656e677460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610218565b60006110b4848461166f565b67ffffffffffffffff8111156110cc576110cc61121a565b6040519080825280602002602001820160405280156110f5578160200160208202803683370190505b509050835b838110156111565785818151811061111457611114611510565b6020026020010151828683611129919061166f565b8151811061113957611139611510565b60209081029190910101528061114e81611565565b9150506110fa565b50949350505050565b82516000906101008111156111ab576040517ffdac331e000000000000000000000000000000000000000000000000000000008152600481018290526101006024820152604401610218565b8260005b828110156112105760008782815181106111cb576111cb611510565b60200260200101519050816001901b87166000036111f757826000528060205260406000209250611207565b8060005282602052604060002092505b506001016111af565b5095945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261124157600080fd5b8135602067ffffffffffffffff8083111561125e5761125e61121a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112a1576112a161121a565b6040529384528581018301938381019250878511156112bf57600080fd5b83870191505b84821015610a73578135835291830191908301906112c5565b60008060008060008060c087890312156112f757600080fd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff8082111561132b57600080fd5b6113378a838b01611230565b935060a089013591508082111561134d57600080fd5b5061135a89828a01611230565b9150509295509295509295565b60008060006060848603121561137c57600080fd5b833567ffffffffffffffff81111561139357600080fd5b61139f86828701611230565b9660208601359650604090950135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156113ed578351835292840192918401916001016113d1565b50909695505050505050565b6000806000806080858703121561140f57600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561143b57600080fd5b61144787828801611230565b91505092959194509250565b6000806040838503121561146657600080fd5b50508035926020909101359150565b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b6114ab85828601611230565b95602094909401359450505050565b6000602082840312156114cc57600080fd5b813567ffffffffffffffff8111156114e357600080fd5b6114ef84828501611230565b949350505050565b60006020828403121561150957600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561019957610199611526565b634e487b7160e01b600052600160045260246000fd5b6000600019820361157857611578611526565b5060010190565b600181815b808511156115ba5781600019048211156115a0576115a0611526565b808516156115ad57918102915b93841c9390800290611584565b509250929050565b6000826115d157506001610199565b816115de57506000610199565b81600181146115f457600281146115fe5761161a565b6001915050610199565b60ff84111561160f5761160f611526565b50506001821b610199565b5060208310610133831016604e8410600b841016171561163d575081810a610199565b611647838361157f565b806000190482111561165b5761165b611526565b029392505050565b600061019683836115c2565b818103818111156101995761019961152656fea26469706673582212201be68179b8150b0e6e98432b65f5bcc0fdc3aa1c9e909985a65d4f229c41b37264736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506116b8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c22c47a41161005b578063c22c47a4146100ff578063ca11325314610112578063d230d23f14610125578063e6bcbc651461013857600080fd5b80635fb9c3d41461008d57806367905a7e146100a25780636bd58993146100cb578063bc2f0640146100de575b600080fd5b6100a061009b3660046112de565b61014b565b005b6100b56100b0366004611367565b610161565b6040516100c291906113b5565b60405180910390f35b6100a06100d93660046113f9565b610178565b6100f16100ec366004611453565b61018a565b6040519081526020016100c2565b6100b561010d366004611475565b61019f565b6100f16101203660046114ba565b6101ab565b6100f16101333660046114f7565b6101b6565b6100f16101463660046114f7565b6101c1565b6101598686868686866101cc565b505050505050565b606061016e8484846104f4565b90505b9392505050565b61018484848484610a7e565b50505050565b60006101968383610b0b565b90505b92915050565b60606101968383610c00565b600061019982610c36565b600061019982610dd6565b600061019982610e3f565b600085116102215760405162461bcd60e51b815260206004820152601460248201527f5072652d73697a652063616e6e6f74206265203000000000000000000000000060448201526064015b60405180910390fd5b8561022b83610c36565b146102785760405162461bcd60e51b815260206004820152601b60248201527f50726520657870616e73696f6e20726f6f74206d69736d6174636800000000006044820152606401610218565b8461028283610f85565b146102f55760405162461bcd60e51b815260206004820152602160248201527f5072652073697a6520646f6573206e6f74206d6174636820657870616e73696f60448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610218565b8285106103445760405162461bcd60e51b815260206004820181905260248201527f5072652073697a65206e6f74206c657373207468616e20706f73742073697a656044820152606401610218565b60008590506000806103598560008751610fe0565b90505b8583101561041c5760006103708488610b0b565b9050845183106103c25760405162461bcd60e51b815260206004820152601260248201527f496e646578206f7574206f662072616e676500000000000000000000000000006044820152606401610218565b6103e682828786815181106103d9576103d9611510565b60200260200101516104f4565b91506001811b6103f6818661153c565b9450878511156104085761040861154f565b8361041281611565565b945050505061035c565b8661042682610c36565b146104995760405162461bcd60e51b815260206004820152602260248201527f506f737420657870616e73696f6e20726f6f74206e6f7420657175616c20706f60448201527f73740000000000000000000000000000000000000000000000000000000000006064820152608401610218565b835182146104e95760405162461bcd60e51b815260206004820152601660248201527f496e636f6d706c6574652070726f6f66207573616765000000000000000000006044820152606401610218565b505050505050505050565b6060604083106105465760405162461bcd60e51b815260206004820152600e60248201527f4c6576656c20746f6f20686967680000000000000000000000000000000000006044820152606401610218565b60008290036105975760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f7420617070656e6420656d707479207375627472656500000000006044820152606401610218565b6040845111156105e95760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c617267650000000000006044820152606401610218565b83516000036106685760006105ff84600161153c565b67ffffffffffffffff8111156106175761061761121a565b604051908082528060200260200182016040528015610640578160200160208202803683370190505b5090508281858151811061065657610656611510565b60209081029190910101529050610171565b835183106106de5760405162461bcd60e51b815260206004820152603560248201527f4c6576656c2067726561746572207468616e2068696768657374206c6576656c60448201527f206f662063757272656e7420657870616e73696f6e00000000000000000000006064820152608401610218565b8160006106ea86610f85565b905060006106f9866002611663565b610703908361153c565b9050600061071083610e3f565b61071983610e3f565b1161076757875167ffffffffffffffff8111156107385761073861121a565b604051908082528060200260200182016040528015610761578160200160208202803683370190505b506107b7565b875161077490600161153c565b67ffffffffffffffff81111561078c5761078c61121a565b6040519080825280602002602001820160405280156107b5578160200160208202803683370190505b505b905060408151111561080b5760405162461bcd60e51b815260206004820152601c60248201527f417070656e642063726561746573206f76657273697a652074726565000000006044820152606401610218565b60005b88518110156109c757878110156108b55788818151811061083157610831611510565b60200260200101516000801b146108b05760405162461bcd60e51b815260206004820152602260248201527f417070656e642061626f7665206c65617374207369676e69666963616e74206260448201527f69740000000000000000000000000000000000000000000000000000000000006064820152608401610218565b6109b5565b60008590036108fb578881815181106108d0576108d0611510565b60200260200101518282815181106108ea576108ea611510565b6020026020010181815250506109b5565b88818151811061090d5761090d611510565b60200260200101516000801b03610945578482828151811061093157610931611510565b6020908102919091010152600094506109b5565b6000801b82828151811061095b5761095b611510565b60200260200101818152505088818151811061097957610979611510565b60200260200101518560405160200161099c929190918252602082015260400190565b6040516020818303038152906040528051906020012094505b806109bf81611565565b91505061080e565b5083156109fb578381600183516109de919061166f565b815181106109ee576109ee611510565b6020026020010181815250505b8060018251610a0a919061166f565b81518110610a1a57610a1a611510565b60200260200101516000801b03610a735760405162461bcd60e51b815260206004820152600f60248201527f4c61737420656e747279207a65726f00000000000000000000000000000000006044820152606401610218565b979650505050505050565b6000610ab3828486604051602001610a9891815260200190565b6040516020818303038152906040528051906020012061115f565b9050808514610b045760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420696e636c7573696f6e2070726f6f660000000000000000006044820152606401610218565b5050505050565b6000818310610b5c5760405162461bcd60e51b815260206004820152601760248201527f5374617274206e6f74206c657373207468616e20656e640000000000000000006044820152606401610218565b6000610b69838518610e3f565b905060006001610b79838261153c565b6001901b610b87919061166f565b90508481168482168115610ba957610b9e82610dd6565b945050505050610199565b8015610bb857610b9e81610e3f565b60405162461bcd60e51b815260206004820152601b60248201527f426f7468207920616e64207a2063616e6e6f74206265207a65726f00000000006044820152606401610218565b606061019683600084604051602001610c1b91815260200190565b604051602081830303815290604052805190602001206104f4565b600080825111610c885760405162461bcd60e51b815260206004820152601660248201527f456d707479206d65726b6c6520657870616e73696f6e000000000000000000006044820152606401610218565b604082511115610cda5760405162461bcd60e51b815260206004820152601a60248201527f4d65726b6c6520657870616e73696f6e20746f6f206c617267650000000000006044820152606401610218565b6000805b8351811015610dcf576000848281518110610cfb57610cfb611510565b60200260200101519050826000801b03610d67578015610d625780925060018551610d26919061166f565b8214610d6257604051610d49908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b610dbc565b8015610d86576040805160208101839052908101849052606001610d49565b604051610da3908490600090602001918252602082015260400190565b6040516020818303038152906040528051906020012092505b5080610dc781611565565b915050610cde565b5092915050565b6000808211610e275760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e742062697473000000006044820152606401610218565b60008280610e3660018261166f565b16189050610171815b600081600003610e915760405162461bcd60e51b815260206004820152601c60248201527f5a65726f20686173206e6f207369676e69666963616e742062697473000000006044820152606401610218565b7001000000000000000000000000000000008210610ebc57608091821c91610eb9908261153c565b90505b680100000000000000008210610edf57604091821c91610edc908261153c565b90505b6401000000008210610efe57602091821c91610efb908261153c565b90505b620100008210610f1b57601091821c91610f18908261153c565b90505b6101008210610f3757600891821c91610f34908261153c565b90505b60108210610f5257600491821c91610f4f908261153c565b90505b60048210610f6d57600291821c91610f6a908261153c565b90505b60028210610f805761019960018261153c565b919050565b600080805b8351811015610dcf57838181518110610fa557610fa5611510565b60200260200101516000801b14610fce57610fc1816002611663565b610fcb908361153c565b91505b80610fd881611565565b915050610f8a565b60608183106110315760405162461bcd60e51b815260206004820152601760248201527f5374617274206e6f74206c657373207468616e20656e640000000000000000006044820152606401610218565b83518211156110a85760405162461bcd60e51b815260206004820152602160248201527f456e64206e6f74206c657373206f7220657175616c207468616e206c656e677460448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610218565b60006110b4848461166f565b67ffffffffffffffff8111156110cc576110cc61121a565b6040519080825280602002602001820160405280156110f5578160200160208202803683370190505b509050835b838110156111565785818151811061111457611114611510565b6020026020010151828683611129919061166f565b8151811061113957611139611510565b60209081029190910101528061114e81611565565b9150506110fa565b50949350505050565b82516000906101008111156111ab576040517ffdac331e000000000000000000000000000000000000000000000000000000008152600481018290526101006024820152604401610218565b8260005b828110156112105760008782815181106111cb576111cb611510565b60200260200101519050816001901b87166000036111f757826000528060205260406000209250611207565b8060005282602052604060002092505b506001016111af565b5095945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261124157600080fd5b8135602067ffffffffffffffff8083111561125e5761125e61121a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156112a1576112a161121a565b6040529384528581018301938381019250878511156112bf57600080fd5b83870191505b84821015610a73578135835291830191908301906112c5565b60008060008060008060c087890312156112f757600080fd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff8082111561132b57600080fd5b6113378a838b01611230565b935060a089013591508082111561134d57600080fd5b5061135a89828a01611230565b9150509295509295509295565b60008060006060848603121561137c57600080fd5b833567ffffffffffffffff81111561139357600080fd5b61139f86828701611230565b9660208601359650604090950135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156113ed578351835292840192918401916001016113d1565b50909695505050505050565b6000806000806080858703121561140f57600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561143b57600080fd5b61144787828801611230565b91505092959194509250565b6000806040838503121561146657600080fd5b50508035926020909101359150565b6000806040838503121561148857600080fd5b823567ffffffffffffffff81111561149f57600080fd5b6114ab85828601611230565b95602094909401359450505050565b6000602082840312156114cc57600080fd5b813567ffffffffffffffff8111156114e357600080fd5b6114ef84828501611230565b949350505050565b60006020828403121561150957600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561019957610199611526565b634e487b7160e01b600052600160045260246000fd5b6000600019820361157857611578611526565b5060010190565b600181815b808511156115ba5781600019048211156115a0576115a0611526565b808516156115ad57918102915b93841c9390800290611584565b509250929050565b6000826115d157506001610199565b816115de57506000610199565b81600181146115f457600281146115fe5761161a565b6001915050610199565b60ff84111561160f5761160f611526565b50506001821b610199565b5060208310610133831016604e8410600b841016171561163d575081810a610199565b611647838361157f565b806000190482111561165b5761165b611526565b029392505050565b600061019683836115c2565b818103818111156101995761019961152656fea2646970667358221220a6d50f65e0e149b4b2bbedeafad4adc7111572363fd0c082845b5ec52afa8ac264736f6c63430008110033", } // MerkleTreeAccessABI is the input ABI used to generate the binding from. @@ -4856,23 +5292,23 @@ func (_MerkleTreeAccess *MerkleTreeAccessCallerSession) VerifyPrefixProof(preRoo return _MerkleTreeAccess.Contract.VerifyPrefixProof(&_MerkleTreeAccess.CallOpts, preRoot, preSize, postRoot, postSize, preExpansion, proof) } -// MockResultReceiverMetaData contains all meta data concerning the MockResultReceiver contract. -var MockResultReceiverMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIOldChallengeManager\",\"name\":\"manager_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"challengeIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"loser\",\"type\":\"address\"}],\"name\":\"ChallengeCompleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"challengeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"challengeIndex_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"winner_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loser_\",\"type\":\"address\"}],\"name\":\"completeChallenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot_\",\"type\":\"bytes32\"},{\"internalType\":\"enumMachineStatus[2]\",\"name\":\"startAndEndMachineStatuses_\",\"type\":\"uint8[2]\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState[2]\",\"name\":\"startAndEndGlobalStates_\",\"type\":\"tuple[2]\"},{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"asserter_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"asserterTimeLeft_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengerTimeLeft_\",\"type\":\"uint256\"}],\"name\":\"createChallenge\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"contractIOldChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"winner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516105a33803806105a383398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610510806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063d685374811610050578063d685374814610102578063dfbf53ae14610119578063e82898b31461013957600080fd5b80630357aa491461007757806314eab5e71461008c578063481c6a75146100bd575b600080fd5b61008a6100853660046102c2565b610159565b005b61009f61009a366004610317565b6101e4565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6000546100dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b4565b61010b60035481565b6040519081526020016100b4565b6001546100dd9073ffffffffffffffffffffffffffffffffffffffff1681565b6002546100dd9073ffffffffffffffffffffffffffffffffffffffff1681565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff85811691821790935560028054909216928416928317909155600385905560405185907f88cb1f3fe351f3ac338db9c36bff1ece1750423c7ae6dfc427cd194b1c69b12790600090a4505050565b600080546040517f14eab5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906314eab5e790610249908c908c908c908c908c908c908c908c9060040161041c565b6020604051808303816000875af1158015610268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028c91906104b6565b9998505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146102bd57600080fd5b919050565b6000806000606084860312156102d757600080fd5b833592506102e760208501610299565b91506102f560408501610299565b90509250925092565b67ffffffffffffffff8116811461031457600080fd5b50565b600080600080600080600080610200898b03121561033457600080fd5b88359750606089018a81111561034957600080fd5b60208a0197506101608a018b81111561036157600080fd5b9096503561036e816102fe565b945061037d6101808a01610299565b935061038c6101a08a01610299565b92506101c089013591506101e089013590509295985092959890939650565b806000805b60028082106103bf5750610415565b604080858837848101908701845b838110156103fe5782356103e0816102fe565b67ffffffffffffffff168252602092830192909101906001016103cd565b5050506080958601959390930192506001016103b0565b5050505050565b888152610200810160208083018a6000805b600281101561045757823560038110610445578283fd5b8452928401929184019160010161042e565b505050505061046960608301896103ab565b67ffffffffffffffff9690961661016082015273ffffffffffffffffffffffffffffffffffffffff948516610180820152929093166101a08301526101c08201526101e001529392505050565b6000602082840312156104c857600080fd5b81516104d3816102fe565b939250505056fea264697066735822122095ba5692462c6a732219217fec0dd005e653c93ce915b9ac924d19848263e40964736f6c63430008110033", +// MockRollupEventInboxMetaData contains all meta data concerning the MockRollupEventInbox contract. +var MockRollupEventInboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b506080516109ae6100366000396000818160e801526102a701526109ae6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b6100746100843660046107a2565b61029d565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c63660046107c6565b610491565b60005461009c906001600160a01b031681565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101815760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146101f7576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610178565b60008054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361033b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610178565b6000546001600160a01b03161561037e576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166103be576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b031633146104eb5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610178565b806105385760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610178565b6001806105436106c4565b156105b857606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab919061085f565b6105b59082610878565b90505b600085838387876040516020016105d39594939291906108b8565b60408051808303601f190181529082905260008054825160208401207f8db5993b000000000000000000000000000000000000000000000000000000008552600b6004860152602485018390526044850152919350916001600160a01b0390911690638db5993b906064016020604051808303816000875af115801561065d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610681919061085f565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b39190610929565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491610730919061095c565b600060405180830381855afa9150503d806000811461076b576040519150601f19603f3d011682016040523d82523d6000602084013e610770565b606091505b5091509150818015610783575080516020145b9250505090565b6001600160a01b038116811461079f57600080fd5b50565b6000602082840312156107b457600080fd5b81356107bf8161078a565b9392505050565b6000806000604084860312156107db57600080fd5b83359250602084013567ffffffffffffffff808211156107fa57600080fd5b818601915086601f83011261080e57600080fd5b81358181111561081d57600080fd5b87602082850101111561082f57600080fd5b6020830194508093505050509250925092565b60006020828403121561085457600080fd5b81516107bf8161078a565b60006020828403121561087157600080fd5b5051919050565b808201808211156108b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b83811015610920578181015183820152602001610908565b50506000910152565b6020815260008251806020840152610948816040850160208701610905565b601f01601f19169190910160400192915050565b6000825161096e818460208701610905565b919091019291505056fea264697066735822122084aa4c0aabe240d26915dda00a8d853524f4af3aafbd7e5eff2f5c13674b3a6564736f6c63430008110033", } -// MockResultReceiverABI is the input ABI used to generate the binding from. -// Deprecated: Use MockResultReceiverMetaData.ABI instead. -var MockResultReceiverABI = MockResultReceiverMetaData.ABI +// MockRollupEventInboxABI is the input ABI used to generate the binding from. +// Deprecated: Use MockRollupEventInboxMetaData.ABI instead. +var MockRollupEventInboxABI = MockRollupEventInboxMetaData.ABI -// MockResultReceiverBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use MockResultReceiverMetaData.Bin instead. -var MockResultReceiverBin = MockResultReceiverMetaData.Bin +// MockRollupEventInboxBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use MockRollupEventInboxMetaData.Bin instead. +var MockRollupEventInboxBin = MockRollupEventInboxMetaData.Bin -// DeployMockResultReceiver deploys a new Ethereum contract, binding an instance of MockResultReceiver to it. -func DeployMockResultReceiver(auth *bind.TransactOpts, backend bind.ContractBackend, manager_ common.Address) (common.Address, *types.Transaction, *MockResultReceiver, error) { - parsed, err := MockResultReceiverMetaData.GetAbi() +// DeployMockRollupEventInbox deploys a new Ethereum contract, binding an instance of MockRollupEventInbox to it. +func DeployMockRollupEventInbox(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MockRollupEventInbox, error) { + parsed, err := MockRollupEventInboxMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err } @@ -4880,111 +5316,111 @@ func DeployMockResultReceiver(auth *bind.TransactOpts, backend bind.ContractBack return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockResultReceiverBin), backend, manager_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockRollupEventInboxBin), backend) if err != nil { return common.Address{}, nil, nil, err } - return address, tx, &MockResultReceiver{MockResultReceiverCaller: MockResultReceiverCaller{contract: contract}, MockResultReceiverTransactor: MockResultReceiverTransactor{contract: contract}, MockResultReceiverFilterer: MockResultReceiverFilterer{contract: contract}}, nil + return address, tx, &MockRollupEventInbox{MockRollupEventInboxCaller: MockRollupEventInboxCaller{contract: contract}, MockRollupEventInboxTransactor: MockRollupEventInboxTransactor{contract: contract}, MockRollupEventInboxFilterer: MockRollupEventInboxFilterer{contract: contract}}, nil } -// MockResultReceiver is an auto generated Go binding around an Ethereum contract. -type MockResultReceiver struct { - MockResultReceiverCaller // Read-only binding to the contract - MockResultReceiverTransactor // Write-only binding to the contract - MockResultReceiverFilterer // Log filterer for contract events +// MockRollupEventInbox is an auto generated Go binding around an Ethereum contract. +type MockRollupEventInbox struct { + MockRollupEventInboxCaller // Read-only binding to the contract + MockRollupEventInboxTransactor // Write-only binding to the contract + MockRollupEventInboxFilterer // Log filterer for contract events } -// MockResultReceiverCaller is an auto generated read-only Go binding around an Ethereum contract. -type MockResultReceiverCaller struct { +// MockRollupEventInboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type MockRollupEventInboxCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// MockResultReceiverTransactor is an auto generated write-only Go binding around an Ethereum contract. -type MockResultReceiverTransactor struct { +// MockRollupEventInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MockRollupEventInboxTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// MockResultReceiverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type MockResultReceiverFilterer struct { +// MockRollupEventInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MockRollupEventInboxFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// MockResultReceiverSession is an auto generated Go binding around an Ethereum contract, +// MockRollupEventInboxSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type MockResultReceiverSession struct { - Contract *MockResultReceiver // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type MockRollupEventInboxSession struct { + Contract *MockRollupEventInbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// MockResultReceiverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// MockRollupEventInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type MockResultReceiverCallerSession struct { - Contract *MockResultReceiverCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type MockRollupEventInboxCallerSession struct { + Contract *MockRollupEventInboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// MockResultReceiverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// MockRollupEventInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type MockResultReceiverTransactorSession struct { - Contract *MockResultReceiverTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type MockRollupEventInboxTransactorSession struct { + Contract *MockRollupEventInboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// MockResultReceiverRaw is an auto generated low-level Go binding around an Ethereum contract. -type MockResultReceiverRaw struct { - Contract *MockResultReceiver // Generic contract binding to access the raw methods on +// MockRollupEventInboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type MockRollupEventInboxRaw struct { + Contract *MockRollupEventInbox // Generic contract binding to access the raw methods on } -// MockResultReceiverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type MockResultReceiverCallerRaw struct { - Contract *MockResultReceiverCaller // Generic read-only contract binding to access the raw methods on +// MockRollupEventInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MockRollupEventInboxCallerRaw struct { + Contract *MockRollupEventInboxCaller // Generic read-only contract binding to access the raw methods on } -// MockResultReceiverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type MockResultReceiverTransactorRaw struct { - Contract *MockResultReceiverTransactor // Generic write-only contract binding to access the raw methods on +// MockRollupEventInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MockRollupEventInboxTransactorRaw struct { + Contract *MockRollupEventInboxTransactor // Generic write-only contract binding to access the raw methods on } -// NewMockResultReceiver creates a new instance of MockResultReceiver, bound to a specific deployed contract. -func NewMockResultReceiver(address common.Address, backend bind.ContractBackend) (*MockResultReceiver, error) { - contract, err := bindMockResultReceiver(address, backend, backend, backend) +// NewMockRollupEventInbox creates a new instance of MockRollupEventInbox, bound to a specific deployed contract. +func NewMockRollupEventInbox(address common.Address, backend bind.ContractBackend) (*MockRollupEventInbox, error) { + contract, err := bindMockRollupEventInbox(address, backend, backend, backend) if err != nil { return nil, err } - return &MockResultReceiver{MockResultReceiverCaller: MockResultReceiverCaller{contract: contract}, MockResultReceiverTransactor: MockResultReceiverTransactor{contract: contract}, MockResultReceiverFilterer: MockResultReceiverFilterer{contract: contract}}, nil + return &MockRollupEventInbox{MockRollupEventInboxCaller: MockRollupEventInboxCaller{contract: contract}, MockRollupEventInboxTransactor: MockRollupEventInboxTransactor{contract: contract}, MockRollupEventInboxFilterer: MockRollupEventInboxFilterer{contract: contract}}, nil } -// NewMockResultReceiverCaller creates a new read-only instance of MockResultReceiver, bound to a specific deployed contract. -func NewMockResultReceiverCaller(address common.Address, caller bind.ContractCaller) (*MockResultReceiverCaller, error) { - contract, err := bindMockResultReceiver(address, caller, nil, nil) +// NewMockRollupEventInboxCaller creates a new read-only instance of MockRollupEventInbox, bound to a specific deployed contract. +func NewMockRollupEventInboxCaller(address common.Address, caller bind.ContractCaller) (*MockRollupEventInboxCaller, error) { + contract, err := bindMockRollupEventInbox(address, caller, nil, nil) if err != nil { return nil, err } - return &MockResultReceiverCaller{contract: contract}, nil + return &MockRollupEventInboxCaller{contract: contract}, nil } -// NewMockResultReceiverTransactor creates a new write-only instance of MockResultReceiver, bound to a specific deployed contract. -func NewMockResultReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*MockResultReceiverTransactor, error) { - contract, err := bindMockResultReceiver(address, nil, transactor, nil) +// NewMockRollupEventInboxTransactor creates a new write-only instance of MockRollupEventInbox, bound to a specific deployed contract. +func NewMockRollupEventInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*MockRollupEventInboxTransactor, error) { + contract, err := bindMockRollupEventInbox(address, nil, transactor, nil) if err != nil { return nil, err } - return &MockResultReceiverTransactor{contract: contract}, nil + return &MockRollupEventInboxTransactor{contract: contract}, nil } -// NewMockResultReceiverFilterer creates a new log filterer instance of MockResultReceiver, bound to a specific deployed contract. -func NewMockResultReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*MockResultReceiverFilterer, error) { - contract, err := bindMockResultReceiver(address, nil, nil, filterer) +// NewMockRollupEventInboxFilterer creates a new log filterer instance of MockRollupEventInbox, bound to a specific deployed contract. +func NewMockRollupEventInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*MockRollupEventInboxFilterer, error) { + contract, err := bindMockRollupEventInbox(address, nil, nil, filterer) if err != nil { return nil, err } - return &MockResultReceiverFilterer{contract: contract}, nil + return &MockRollupEventInboxFilterer{contract: contract}, nil } -// bindMockResultReceiver binds a generic wrapper to an already deployed contract. -func bindMockResultReceiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := MockResultReceiverMetaData.GetAbi() +// bindMockRollupEventInbox binds a generic wrapper to an already deployed contract. +func bindMockRollupEventInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MockRollupEventInboxMetaData.GetAbi() if err != nil { return nil, err } @@ -4995,77 +5431,77 @@ func bindMockResultReceiver(address common.Address, caller bind.ContractCaller, // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_MockResultReceiver *MockResultReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _MockResultReceiver.Contract.MockResultReceiverCaller.contract.Call(opts, result, method, params...) +func (_MockRollupEventInbox *MockRollupEventInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockRollupEventInbox.Contract.MockRollupEventInboxCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_MockResultReceiver *MockResultReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _MockResultReceiver.Contract.MockResultReceiverTransactor.contract.Transfer(opts) +func (_MockRollupEventInbox *MockRollupEventInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.MockRollupEventInboxTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_MockResultReceiver *MockResultReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _MockResultReceiver.Contract.MockResultReceiverTransactor.contract.Transact(opts, method, params...) +func (_MockRollupEventInbox *MockRollupEventInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.MockRollupEventInboxTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_MockResultReceiver *MockResultReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _MockResultReceiver.Contract.contract.Call(opts, result, method, params...) +func (_MockRollupEventInbox *MockRollupEventInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockRollupEventInbox.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_MockResultReceiver *MockResultReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _MockResultReceiver.Contract.contract.Transfer(opts) +func (_MockRollupEventInbox *MockRollupEventInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_MockResultReceiver *MockResultReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _MockResultReceiver.Contract.contract.Transact(opts, method, params...) +func (_MockRollupEventInbox *MockRollupEventInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.contract.Transact(opts, method, params...) } -// ChallengeIndex is a free data retrieval call binding the contract method 0xd6853748. +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. // -// Solidity: function challengeIndex() view returns(uint256) -func (_MockResultReceiver *MockResultReceiverCaller) ChallengeIndex(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function bridge() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _MockResultReceiver.contract.Call(opts, &out, "challengeIndex") + err := _MockRollupEventInbox.contract.Call(opts, &out, "bridge") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// ChallengeIndex is a free data retrieval call binding the contract method 0xd6853748. +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. // -// Solidity: function challengeIndex() view returns(uint256) -func (_MockResultReceiver *MockResultReceiverSession) ChallengeIndex() (*big.Int, error) { - return _MockResultReceiver.Contract.ChallengeIndex(&_MockResultReceiver.CallOpts) +// Solidity: function bridge() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxSession) Bridge() (common.Address, error) { + return _MockRollupEventInbox.Contract.Bridge(&_MockRollupEventInbox.CallOpts) } -// ChallengeIndex is a free data retrieval call binding the contract method 0xd6853748. +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. // -// Solidity: function challengeIndex() view returns(uint256) -func (_MockResultReceiver *MockResultReceiverCallerSession) ChallengeIndex() (*big.Int, error) { - return _MockResultReceiver.Contract.ChallengeIndex(&_MockResultReceiver.CallOpts) +// Solidity: function bridge() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxCallerSession) Bridge() (common.Address, error) { + return _MockRollupEventInbox.Contract.Bridge(&_MockRollupEventInbox.CallOpts) } -// Loser is a free data retrieval call binding the contract method 0xe82898b3. +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function loser() view returns(address) -func (_MockResultReceiver *MockResultReceiverCaller) Loser(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function rollup() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _MockResultReceiver.contract.Call(opts, &out, "loser") + err := _MockRollupEventInbox.contract.Call(opts, &out, "rollup") if err != nil { return *new(common.Address), err @@ -5077,127 +5513,86 @@ func (_MockResultReceiver *MockResultReceiverCaller) Loser(opts *bind.CallOpts) } -// Loser is a free data retrieval call binding the contract method 0xe82898b3. -// -// Solidity: function loser() view returns(address) -func (_MockResultReceiver *MockResultReceiverSession) Loser() (common.Address, error) { - return _MockResultReceiver.Contract.Loser(&_MockResultReceiver.CallOpts) -} - -// Loser is a free data retrieval call binding the contract method 0xe82898b3. -// -// Solidity: function loser() view returns(address) -func (_MockResultReceiver *MockResultReceiverCallerSession) Loser() (common.Address, error) { - return _MockResultReceiver.Contract.Loser(&_MockResultReceiver.CallOpts) -} - -// Manager is a free data retrieval call binding the contract method 0x481c6a75. -// -// Solidity: function manager() view returns(address) -func (_MockResultReceiver *MockResultReceiverCaller) Manager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _MockResultReceiver.contract.Call(opts, &out, "manager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Manager is a free data retrieval call binding the contract method 0x481c6a75. +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function manager() view returns(address) -func (_MockResultReceiver *MockResultReceiverSession) Manager() (common.Address, error) { - return _MockResultReceiver.Contract.Manager(&_MockResultReceiver.CallOpts) +// Solidity: function rollup() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxSession) Rollup() (common.Address, error) { + return _MockRollupEventInbox.Contract.Rollup(&_MockRollupEventInbox.CallOpts) } -// Manager is a free data retrieval call binding the contract method 0x481c6a75. +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // -// Solidity: function manager() view returns(address) -func (_MockResultReceiver *MockResultReceiverCallerSession) Manager() (common.Address, error) { - return _MockResultReceiver.Contract.Manager(&_MockResultReceiver.CallOpts) +// Solidity: function rollup() view returns(address) +func (_MockRollupEventInbox *MockRollupEventInboxCallerSession) Rollup() (common.Address, error) { + return _MockRollupEventInbox.Contract.Rollup(&_MockRollupEventInbox.CallOpts) } -// Winner is a free data retrieval call binding the contract method 0xdfbf53ae. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function winner() view returns(address) -func (_MockResultReceiver *MockResultReceiverCaller) Winner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _MockResultReceiver.contract.Call(opts, &out, "winner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - +// Solidity: function initialize(address _bridge) returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _MockRollupEventInbox.contract.Transact(opts, "initialize", _bridge) } -// Winner is a free data retrieval call binding the contract method 0xdfbf53ae. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function winner() view returns(address) -func (_MockResultReceiver *MockResultReceiverSession) Winner() (common.Address, error) { - return _MockResultReceiver.Contract.Winner(&_MockResultReceiver.CallOpts) +// Solidity: function initialize(address _bridge) returns() +func (_MockRollupEventInbox *MockRollupEventInboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.Initialize(&_MockRollupEventInbox.TransactOpts, _bridge) } -// Winner is a free data retrieval call binding the contract method 0xdfbf53ae. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function winner() view returns(address) -func (_MockResultReceiver *MockResultReceiverCallerSession) Winner() (common.Address, error) { - return _MockResultReceiver.Contract.Winner(&_MockResultReceiver.CallOpts) +// Solidity: function initialize(address _bridge) returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.Initialize(&_MockRollupEventInbox.TransactOpts, _bridge) } -// CompleteChallenge is a paid mutator transaction binding the contract method 0x0357aa49. +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. // -// Solidity: function completeChallenge(uint256 challengeIndex_, address winner_, address loser_) returns() -func (_MockResultReceiver *MockResultReceiverTransactor) CompleteChallenge(opts *bind.TransactOpts, challengeIndex_ *big.Int, winner_ common.Address, loser_ common.Address) (*types.Transaction, error) { - return _MockResultReceiver.contract.Transact(opts, "completeChallenge", challengeIndex_, winner_, loser_) +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactor) RollupInitialized(opts *bind.TransactOpts, chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _MockRollupEventInbox.contract.Transact(opts, "rollupInitialized", chainId, chainConfig) } -// CompleteChallenge is a paid mutator transaction binding the contract method 0x0357aa49. +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. // -// Solidity: function completeChallenge(uint256 challengeIndex_, address winner_, address loser_) returns() -func (_MockResultReceiver *MockResultReceiverSession) CompleteChallenge(challengeIndex_ *big.Int, winner_ common.Address, loser_ common.Address) (*types.Transaction, error) { - return _MockResultReceiver.Contract.CompleteChallenge(&_MockResultReceiver.TransactOpts, challengeIndex_, winner_, loser_) +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_MockRollupEventInbox *MockRollupEventInboxSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.RollupInitialized(&_MockRollupEventInbox.TransactOpts, chainId, chainConfig) } -// CompleteChallenge is a paid mutator transaction binding the contract method 0x0357aa49. +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. // -// Solidity: function completeChallenge(uint256 challengeIndex_, address winner_, address loser_) returns() -func (_MockResultReceiver *MockResultReceiverTransactorSession) CompleteChallenge(challengeIndex_ *big.Int, winner_ common.Address, loser_ common.Address) (*types.Transaction, error) { - return _MockResultReceiver.Contract.CompleteChallenge(&_MockResultReceiver.TransactOpts, challengeIndex_, winner_, loser_) +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.RollupInitialized(&_MockRollupEventInbox.TransactOpts, chainId, chainConfig) } -// CreateChallenge is a paid mutator transaction binding the contract method 0x14eab5e7. +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // -// Solidity: function createChallenge(bytes32 wasmModuleRoot_, uint8[2] startAndEndMachineStatuses_, (bytes32[2],uint64[2])[2] startAndEndGlobalStates_, uint64 numBlocks, address asserter_, address challenger_, uint256 asserterTimeLeft_, uint256 challengerTimeLeft_) returns(uint64) -func (_MockResultReceiver *MockResultReceiverTransactor) CreateChallenge(opts *bind.TransactOpts, wasmModuleRoot_ [32]byte, startAndEndMachineStatuses_ [2]uint8, startAndEndGlobalStates_ [2]GlobalState, numBlocks uint64, asserter_ common.Address, challenger_ common.Address, asserterTimeLeft_ *big.Int, challengerTimeLeft_ *big.Int) (*types.Transaction, error) { - return _MockResultReceiver.contract.Transact(opts, "createChallenge", wasmModuleRoot_, startAndEndMachineStatuses_, startAndEndGlobalStates_, numBlocks, asserter_, challenger_, asserterTimeLeft_, challengerTimeLeft_) +// Solidity: function updateRollupAddress() returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockRollupEventInbox.contract.Transact(opts, "updateRollupAddress") } -// CreateChallenge is a paid mutator transaction binding the contract method 0x14eab5e7. +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // -// Solidity: function createChallenge(bytes32 wasmModuleRoot_, uint8[2] startAndEndMachineStatuses_, (bytes32[2],uint64[2])[2] startAndEndGlobalStates_, uint64 numBlocks, address asserter_, address challenger_, uint256 asserterTimeLeft_, uint256 challengerTimeLeft_) returns(uint64) -func (_MockResultReceiver *MockResultReceiverSession) CreateChallenge(wasmModuleRoot_ [32]byte, startAndEndMachineStatuses_ [2]uint8, startAndEndGlobalStates_ [2]GlobalState, numBlocks uint64, asserter_ common.Address, challenger_ common.Address, asserterTimeLeft_ *big.Int, challengerTimeLeft_ *big.Int) (*types.Transaction, error) { - return _MockResultReceiver.Contract.CreateChallenge(&_MockResultReceiver.TransactOpts, wasmModuleRoot_, startAndEndMachineStatuses_, startAndEndGlobalStates_, numBlocks, asserter_, challenger_, asserterTimeLeft_, challengerTimeLeft_) +// Solidity: function updateRollupAddress() returns() +func (_MockRollupEventInbox *MockRollupEventInboxSession) UpdateRollupAddress() (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.UpdateRollupAddress(&_MockRollupEventInbox.TransactOpts) } -// CreateChallenge is a paid mutator transaction binding the contract method 0x14eab5e7. +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // -// Solidity: function createChallenge(bytes32 wasmModuleRoot_, uint8[2] startAndEndMachineStatuses_, (bytes32[2],uint64[2])[2] startAndEndGlobalStates_, uint64 numBlocks, address asserter_, address challenger_, uint256 asserterTimeLeft_, uint256 challengerTimeLeft_) returns(uint64) -func (_MockResultReceiver *MockResultReceiverTransactorSession) CreateChallenge(wasmModuleRoot_ [32]byte, startAndEndMachineStatuses_ [2]uint8, startAndEndGlobalStates_ [2]GlobalState, numBlocks uint64, asserter_ common.Address, challenger_ common.Address, asserterTimeLeft_ *big.Int, challengerTimeLeft_ *big.Int) (*types.Transaction, error) { - return _MockResultReceiver.Contract.CreateChallenge(&_MockResultReceiver.TransactOpts, wasmModuleRoot_, startAndEndMachineStatuses_, startAndEndGlobalStates_, numBlocks, asserter_, challenger_, asserterTimeLeft_, challengerTimeLeft_) +// Solidity: function updateRollupAddress() returns() +func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { + return _MockRollupEventInbox.Contract.UpdateRollupAddress(&_MockRollupEventInbox.TransactOpts) } -// MockResultReceiverChallengeCompletedIterator is returned from FilterChallengeCompleted and is used to iterate over the raw logs and unpacked data for ChallengeCompleted events raised by the MockResultReceiver contract. -type MockResultReceiverChallengeCompletedIterator struct { - Event *MockResultReceiverChallengeCompleted // Event containing the contract specifics and raw log +// MockRollupEventInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the MockRollupEventInbox contract. +type MockRollupEventInboxInboxMessageDeliveredIterator struct { + Event *MockRollupEventInboxInboxMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -5211,7 +5606,7 @@ type MockResultReceiverChallengeCompletedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *MockResultReceiverChallengeCompletedIterator) Next() bool { +func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -5220,7 +5615,7 @@ func (it *MockResultReceiverChallengeCompletedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(MockResultReceiverChallengeCompleted) + it.Event = new(MockRollupEventInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -5235,7 +5630,7 @@ func (it *MockResultReceiverChallengeCompletedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(MockResultReceiverChallengeCompleted) + it.Event = new(MockRollupEventInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -5251,69 +5646,52 @@ func (it *MockResultReceiverChallengeCompletedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *MockResultReceiverChallengeCompletedIterator) Error() error { +func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *MockResultReceiverChallengeCompletedIterator) Close() error { +func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// MockResultReceiverChallengeCompleted represents a ChallengeCompleted event raised by the MockResultReceiver contract. -type MockResultReceiverChallengeCompleted struct { - ChallengeIndex *big.Int - Winner common.Address - Loser common.Address - Raw types.Log // Blockchain specific contextual infos +// MockRollupEventInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the MockRollupEventInbox contract. +type MockRollupEventInboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterChallengeCompleted is a free log retrieval operation binding the contract event 0x88cb1f3fe351f3ac338db9c36bff1ece1750423c7ae6dfc427cd194b1c69b127. +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event ChallengeCompleted(uint256 indexed challengeIndex, address indexed winner, address indexed loser) -func (_MockResultReceiver *MockResultReceiverFilterer) FilterChallengeCompleted(opts *bind.FilterOpts, challengeIndex []*big.Int, winner []common.Address, loser []common.Address) (*MockResultReceiverChallengeCompletedIterator, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*MockRollupEventInboxInboxMessageDeliveredIterator, error) { - var challengeIndexRule []interface{} - for _, challengeIndexItem := range challengeIndex { - challengeIndexRule = append(challengeIndexRule, challengeIndexItem) - } - var winnerRule []interface{} - for _, winnerItem := range winner { - winnerRule = append(winnerRule, winnerItem) - } - var loserRule []interface{} - for _, loserItem := range loser { - loserRule = append(loserRule, loserItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _MockResultReceiver.contract.FilterLogs(opts, "ChallengeCompleted", challengeIndexRule, winnerRule, loserRule) + logs, sub, err := _MockRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } - return &MockResultReceiverChallengeCompletedIterator{contract: _MockResultReceiver.contract, event: "ChallengeCompleted", logs: logs, sub: sub}, nil + return &MockRollupEventInboxInboxMessageDeliveredIterator{contract: _MockRollupEventInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil } -// WatchChallengeCompleted is a free log subscription operation binding the contract event 0x88cb1f3fe351f3ac338db9c36bff1ece1750423c7ae6dfc427cd194b1c69b127. +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event ChallengeCompleted(uint256 indexed challengeIndex, address indexed winner, address indexed loser) -func (_MockResultReceiver *MockResultReceiverFilterer) WatchChallengeCompleted(opts *bind.WatchOpts, sink chan<- *MockResultReceiverChallengeCompleted, challengeIndex []*big.Int, winner []common.Address, loser []common.Address) (event.Subscription, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *MockRollupEventInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { - var challengeIndexRule []interface{} - for _, challengeIndexItem := range challengeIndex { - challengeIndexRule = append(challengeIndexRule, challengeIndexItem) - } - var winnerRule []interface{} - for _, winnerItem := range winner { - winnerRule = append(winnerRule, winnerItem) - } - var loserRule []interface{} - for _, loserItem := range loser { - loserRule = append(loserRule, loserItem) + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) } - logs, sub, err := _MockResultReceiver.contract.WatchLogs(opts, "ChallengeCompleted", challengeIndexRule, winnerRule, loserRule) + logs, sub, err := _MockRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } @@ -5323,8 +5701,8 @@ func (_MockResultReceiver *MockResultReceiverFilterer) WatchChallengeCompleted(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(MockResultReceiverChallengeCompleted) - if err := _MockResultReceiver.contract.UnpackLog(event, "ChallengeCompleted", log); err != nil { + event := new(MockRollupEventInboxInboxMessageDelivered) + if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return err } event.Raw = log @@ -5345,147 +5723,291 @@ func (_MockResultReceiver *MockResultReceiverFilterer) WatchChallengeCompleted(o }), nil } -// ParseChallengeCompleted is a log parse operation binding the contract event 0x88cb1f3fe351f3ac338db9c36bff1ece1750423c7ae6dfc427cd194b1c69b127. +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event ChallengeCompleted(uint256 indexed challengeIndex, address indexed winner, address indexed loser) -func (_MockResultReceiver *MockResultReceiverFilterer) ParseChallengeCompleted(log types.Log) (*MockResultReceiverChallengeCompleted, error) { - event := new(MockResultReceiverChallengeCompleted) - if err := _MockResultReceiver.contract.UnpackLog(event, "ChallengeCompleted", log); err != nil { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*MockRollupEventInboxInboxMessageDelivered, error) { + event := new(MockRollupEventInboxInboxMessageDelivered) + if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// MockRollupEventInboxMetaData contains all meta data concerning the MockRollupEventInbox contract. -var MockRollupEventInboxMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516109ae6100366000396000818160e801526102a701526109ae6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b6100746100843660046107a2565b61029d565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c63660046107c6565b610491565b60005461009c906001600160a01b031681565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101815760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146101f7576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610178565b60008054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361033b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610178565b6000546001600160a01b03161561037e576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166103be576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b031633146104eb5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610178565b806105385760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610178565b6001806105436106c4565b156105b857606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab919061085f565b6105b59082610878565b90505b600085838387876040516020016105d39594939291906108b8565b60408051808303601f190181529082905260008054825160208401207f8db5993b000000000000000000000000000000000000000000000000000000008552600b6004860152602485018390526044850152919350916001600160a01b0390911690638db5993b906064016020604051808303816000875af115801561065d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610681919061085f565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b39190610929565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491610730919061095c565b600060405180830381855afa9150503d806000811461076b576040519150601f19603f3d011682016040523d82523d6000602084013e610770565b606091505b5091509150818015610783575080516020145b9250505090565b6001600160a01b038116811461079f57600080fd5b50565b6000602082840312156107b457600080fd5b81356107bf8161078a565b9392505050565b6000806000604084860312156107db57600080fd5b83359250602084013567ffffffffffffffff808211156107fa57600080fd5b818601915086601f83011261080e57600080fd5b81358181111561081d57600080fd5b87602082850101111561082f57600080fd5b6020830194508093505050509250925092565b60006020828403121561085457600080fd5b81516107bf8161078a565b60006020828403121561087157600080fd5b5051919050565b808201808211156108b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b83811015610920578181015183820152602001610908565b50506000910152565b6020815260008251806020840152610948816040850160208701610905565b601f01601f19169190910160400192915050565b6000825161096e818460208701610905565b919091019291505056fea264697066735822122096bdbc5d2765831a6b3c9d845e8d777e7a9467caa3cf248e3af74423775b19db64736f6c63430008110033", -} +// MockRollupEventInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the MockRollupEventInbox contract. +type MockRollupEventInboxInboxMessageDeliveredFromOriginIterator struct { + Event *MockRollupEventInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log -// MockRollupEventInboxABI is the input ABI used to generate the binding from. -// Deprecated: Use MockRollupEventInboxMetaData.ABI instead. -var MockRollupEventInboxABI = MockRollupEventInboxMetaData.ABI + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// MockRollupEventInboxBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use MockRollupEventInboxMetaData.Bin instead. -var MockRollupEventInboxBin = MockRollupEventInboxMetaData.Bin + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} -// DeployMockRollupEventInbox deploys a new Ethereum contract, binding an instance of MockRollupEventInbox to it. -func DeployMockRollupEventInbox(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MockRollupEventInbox, error) { - parsed, err := MockRollupEventInboxMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockRollupEventInboxBin), backend) - if err != nil { - return common.Address{}, nil, nil, err + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() } - return address, tx, &MockRollupEventInbox{MockRollupEventInboxCaller: MockRollupEventInboxCaller{contract: contract}, MockRollupEventInboxTransactor: MockRollupEventInboxTransactor{contract: contract}, MockRollupEventInboxFilterer: MockRollupEventInboxFilterer{contract: contract}}, nil } -// MockRollupEventInbox is an auto generated Go binding around an Ethereum contract. -type MockRollupEventInbox struct { - MockRollupEventInboxCaller // Read-only binding to the contract - MockRollupEventInboxTransactor // Write-only binding to the contract - MockRollupEventInboxFilterer // Log filterer for contract events +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail } -// MockRollupEventInboxCaller is an auto generated read-only Go binding around an Ethereum contract. -type MockRollupEventInboxCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// MockRollupEventInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. -type MockRollupEventInboxTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// MockRollupEventInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the MockRollupEventInbox contract. +type MockRollupEventInboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos } -// MockRollupEventInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type MockRollupEventInboxFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*MockRollupEventInboxInboxMessageDeliveredFromOriginIterator, error) { -// MockRollupEventInboxSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type MockRollupEventInboxSession struct { - Contract *MockRollupEventInbox // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } -// MockRollupEventInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type MockRollupEventInboxCallerSession struct { - Contract *MockRollupEventInboxCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session + logs, sub, err := _MockRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return &MockRollupEventInboxInboxMessageDeliveredFromOriginIterator{contract: _MockRollupEventInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil } -// MockRollupEventInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type MockRollupEventInboxTransactorSession struct { - Contract *MockRollupEventInboxTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *MockRollupEventInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { -// MockRollupEventInboxRaw is an auto generated low-level Go binding around an Ethereum contract. -type MockRollupEventInboxRaw struct { - Contract *MockRollupEventInbox // Generic contract binding to access the raw methods on + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _MockRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// MockRollupEventInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type MockRollupEventInboxCallerRaw struct { - Contract *MockRollupEventInboxCaller // Generic read-only contract binding to access the raw methods on +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_MockRollupEventInbox *MockRollupEventInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*MockRollupEventInboxInboxMessageDeliveredFromOrigin, error) { + event := new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// MockRollupEventInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type MockRollupEventInboxTransactorRaw struct { - Contract *MockRollupEventInboxTransactor // Generic write-only contract binding to access the raw methods on +// ProxyAdminForBindingMetaData contains all meta data concerning the ProxyAdminForBinding contract. +var ProxyAdminForBindingMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contractTransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractTransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractTransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"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\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractTransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractTransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea264697066735822122076d272eb6456a016cf2af94ef883f02aa3ffcaa0f2aeaae4c2d10b1a127ace0464736f6c63430008110033", } -// NewMockRollupEventInbox creates a new instance of MockRollupEventInbox, bound to a specific deployed contract. -func NewMockRollupEventInbox(address common.Address, backend bind.ContractBackend) (*MockRollupEventInbox, error) { - contract, err := bindMockRollupEventInbox(address, backend, backend, backend) +// ProxyAdminForBindingABI is the input ABI used to generate the binding from. +// Deprecated: Use ProxyAdminForBindingMetaData.ABI instead. +var ProxyAdminForBindingABI = ProxyAdminForBindingMetaData.ABI + +// ProxyAdminForBindingBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProxyAdminForBindingMetaData.Bin instead. +var ProxyAdminForBindingBin = ProxyAdminForBindingMetaData.Bin + +// DeployProxyAdminForBinding deploys a new Ethereum contract, binding an instance of ProxyAdminForBinding to it. +func DeployProxyAdminForBinding(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ProxyAdminForBinding, error) { + parsed, err := ProxyAdminForBindingMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ProxyAdminForBindingBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ProxyAdminForBinding{ProxyAdminForBindingCaller: ProxyAdminForBindingCaller{contract: contract}, ProxyAdminForBindingTransactor: ProxyAdminForBindingTransactor{contract: contract}, ProxyAdminForBindingFilterer: ProxyAdminForBindingFilterer{contract: contract}}, nil +} + +// ProxyAdminForBinding is an auto generated Go binding around an Ethereum contract. +type ProxyAdminForBinding struct { + ProxyAdminForBindingCaller // Read-only binding to the contract + ProxyAdminForBindingTransactor // Write-only binding to the contract + ProxyAdminForBindingFilterer // Log filterer for contract events +} + +// ProxyAdminForBindingCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProxyAdminForBindingCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminForBindingTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProxyAdminForBindingTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminForBindingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProxyAdminForBindingFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminForBindingSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProxyAdminForBindingSession struct { + Contract *ProxyAdminForBinding // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminForBindingCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProxyAdminForBindingCallerSession struct { + Contract *ProxyAdminForBindingCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProxyAdminForBindingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProxyAdminForBindingTransactorSession struct { + Contract *ProxyAdminForBindingTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminForBindingRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProxyAdminForBindingRaw struct { + Contract *ProxyAdminForBinding // Generic contract binding to access the raw methods on +} + +// ProxyAdminForBindingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProxyAdminForBindingCallerRaw struct { + Contract *ProxyAdminForBindingCaller // Generic read-only contract binding to access the raw methods on +} + +// ProxyAdminForBindingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProxyAdminForBindingTransactorRaw struct { + Contract *ProxyAdminForBindingTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProxyAdminForBinding creates a new instance of ProxyAdminForBinding, bound to a specific deployed contract. +func NewProxyAdminForBinding(address common.Address, backend bind.ContractBackend) (*ProxyAdminForBinding, error) { + contract, err := bindProxyAdminForBinding(address, backend, backend, backend) if err != nil { return nil, err } - return &MockRollupEventInbox{MockRollupEventInboxCaller: MockRollupEventInboxCaller{contract: contract}, MockRollupEventInboxTransactor: MockRollupEventInboxTransactor{contract: contract}, MockRollupEventInboxFilterer: MockRollupEventInboxFilterer{contract: contract}}, nil + return &ProxyAdminForBinding{ProxyAdminForBindingCaller: ProxyAdminForBindingCaller{contract: contract}, ProxyAdminForBindingTransactor: ProxyAdminForBindingTransactor{contract: contract}, ProxyAdminForBindingFilterer: ProxyAdminForBindingFilterer{contract: contract}}, nil } -// NewMockRollupEventInboxCaller creates a new read-only instance of MockRollupEventInbox, bound to a specific deployed contract. -func NewMockRollupEventInboxCaller(address common.Address, caller bind.ContractCaller) (*MockRollupEventInboxCaller, error) { - contract, err := bindMockRollupEventInbox(address, caller, nil, nil) +// NewProxyAdminForBindingCaller creates a new read-only instance of ProxyAdminForBinding, bound to a specific deployed contract. +func NewProxyAdminForBindingCaller(address common.Address, caller bind.ContractCaller) (*ProxyAdminForBindingCaller, error) { + contract, err := bindProxyAdminForBinding(address, caller, nil, nil) if err != nil { return nil, err } - return &MockRollupEventInboxCaller{contract: contract}, nil + return &ProxyAdminForBindingCaller{contract: contract}, nil } -// NewMockRollupEventInboxTransactor creates a new write-only instance of MockRollupEventInbox, bound to a specific deployed contract. -func NewMockRollupEventInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*MockRollupEventInboxTransactor, error) { - contract, err := bindMockRollupEventInbox(address, nil, transactor, nil) +// NewProxyAdminForBindingTransactor creates a new write-only instance of ProxyAdminForBinding, bound to a specific deployed contract. +func NewProxyAdminForBindingTransactor(address common.Address, transactor bind.ContractTransactor) (*ProxyAdminForBindingTransactor, error) { + contract, err := bindProxyAdminForBinding(address, nil, transactor, nil) if err != nil { return nil, err } - return &MockRollupEventInboxTransactor{contract: contract}, nil + return &ProxyAdminForBindingTransactor{contract: contract}, nil } -// NewMockRollupEventInboxFilterer creates a new log filterer instance of MockRollupEventInbox, bound to a specific deployed contract. -func NewMockRollupEventInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*MockRollupEventInboxFilterer, error) { - contract, err := bindMockRollupEventInbox(address, nil, nil, filterer) +// NewProxyAdminForBindingFilterer creates a new log filterer instance of ProxyAdminForBinding, bound to a specific deployed contract. +func NewProxyAdminForBindingFilterer(address common.Address, filterer bind.ContractFilterer) (*ProxyAdminForBindingFilterer, error) { + contract, err := bindProxyAdminForBinding(address, nil, nil, filterer) if err != nil { return nil, err } - return &MockRollupEventInboxFilterer{contract: contract}, nil + return &ProxyAdminForBindingFilterer{contract: contract}, nil } -// bindMockRollupEventInbox binds a generic wrapper to an already deployed contract. -func bindMockRollupEventInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := MockRollupEventInboxMetaData.GetAbi() +// bindProxyAdminForBinding binds a generic wrapper to an already deployed contract. +func bindProxyAdminForBinding(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProxyAdminForBindingMetaData.GetAbi() if err != nil { return nil, err } @@ -5496,46 +6018,46 @@ func bindMockRollupEventInbox(address common.Address, caller bind.ContractCaller // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_MockRollupEventInbox *MockRollupEventInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _MockRollupEventInbox.Contract.MockRollupEventInboxCaller.contract.Call(opts, result, method, params...) +func (_ProxyAdminForBinding *ProxyAdminForBindingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdminForBinding.Contract.ProxyAdminForBindingCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_MockRollupEventInbox *MockRollupEventInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.MockRollupEventInboxTransactor.contract.Transfer(opts) +func (_ProxyAdminForBinding *ProxyAdminForBindingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.ProxyAdminForBindingTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_MockRollupEventInbox *MockRollupEventInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.MockRollupEventInboxTransactor.contract.Transact(opts, method, params...) +func (_ProxyAdminForBinding *ProxyAdminForBindingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.ProxyAdminForBindingTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_MockRollupEventInbox *MockRollupEventInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _MockRollupEventInbox.Contract.contract.Call(opts, result, method, params...) +func (_ProxyAdminForBinding *ProxyAdminForBindingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdminForBinding.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_MockRollupEventInbox *MockRollupEventInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.contract.Transfer(opts) +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_MockRollupEventInbox *MockRollupEventInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.contract.Transact(opts, method, params...) +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.contract.Transact(opts, method, params...) } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. // -// Solidity: function bridge() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCaller) GetProxyAdmin(opts *bind.CallOpts, proxy common.Address) (common.Address, error) { var out []interface{} - err := _MockRollupEventInbox.contract.Call(opts, &out, "bridge") + err := _ProxyAdminForBinding.contract.Call(opts, &out, "getProxyAdmin", proxy) if err != nil { return *new(common.Address), err @@ -5547,26 +6069,26 @@ func (_MockRollupEventInbox *MockRollupEventInboxCaller) Bridge(opts *bind.CallO } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. // -// Solidity: function bridge() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxSession) Bridge() (common.Address, error) { - return _MockRollupEventInbox.Contract.Bridge(&_MockRollupEventInbox.CallOpts) +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) GetProxyAdmin(proxy common.Address) (common.Address, error) { + return _ProxyAdminForBinding.Contract.GetProxyAdmin(&_ProxyAdminForBinding.CallOpts, proxy) } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. // -// Solidity: function bridge() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxCallerSession) Bridge() (common.Address, error) { - return _MockRollupEventInbox.Contract.Bridge(&_MockRollupEventInbox.CallOpts) +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCallerSession) GetProxyAdmin(proxy common.Address) (common.Address, error) { + return _ProxyAdminForBinding.Contract.GetProxyAdmin(&_ProxyAdminForBinding.CallOpts, proxy) } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. // -// Solidity: function rollup() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCaller) GetProxyImplementation(opts *bind.CallOpts, proxy common.Address) (common.Address, error) { var out []interface{} - err := _MockRollupEventInbox.contract.Call(opts, &out, "rollup") + err := _ProxyAdminForBinding.contract.Call(opts, &out, "getProxyImplementation", proxy) if err != nil { return *new(common.Address), err @@ -5578,86 +6100,159 @@ func (_MockRollupEventInbox *MockRollupEventInboxCaller) Rollup(opts *bind.CallO } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. // -// Solidity: function rollup() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxSession) Rollup() (common.Address, error) { - return _MockRollupEventInbox.Contract.Rollup(&_MockRollupEventInbox.CallOpts) +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) GetProxyImplementation(proxy common.Address) (common.Address, error) { + return _ProxyAdminForBinding.Contract.GetProxyImplementation(&_ProxyAdminForBinding.CallOpts, proxy) } -// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. // -// Solidity: function rollup() view returns(address) -func (_MockRollupEventInbox *MockRollupEventInboxCallerSession) Rollup() (common.Address, error) { - return _MockRollupEventInbox.Contract.Rollup(&_MockRollupEventInbox.CallOpts) +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCallerSession) GetProxyImplementation(proxy common.Address) (common.Address, error) { + return _ProxyAdminForBinding.Contract.GetProxyImplementation(&_ProxyAdminForBinding.CallOpts, proxy) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function initialize(address _bridge) returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { - return _MockRollupEventInbox.contract.Transact(opts, "initialize", _bridge) +// Solidity: function owner() view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ProxyAdminForBinding.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function initialize(address _bridge) returns() -func (_MockRollupEventInbox *MockRollupEventInboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.Initialize(&_MockRollupEventInbox.TransactOpts, _bridge) +// Solidity: function owner() view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) Owner() (common.Address, error) { + return _ProxyAdminForBinding.Contract.Owner(&_ProxyAdminForBinding.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function initialize(address _bridge) returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.Initialize(&_MockRollupEventInbox.TransactOpts, _bridge) +// Solidity: function owner() view returns(address) +func (_ProxyAdminForBinding *ProxyAdminForBindingCallerSession) Owner() (common.Address, error) { + return _ProxyAdminForBinding.Contract.Owner(&_ProxyAdminForBinding.CallOpts) } -// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. // -// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactor) RollupInitialized(opts *bind.TransactOpts, chainId *big.Int, chainConfig string) (*types.Transaction, error) { - return _MockRollupEventInbox.contract.Transact(opts, "rollupInitialized", chainId, chainConfig) +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactor) ChangeProxyAdmin(opts *bind.TransactOpts, proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.contract.Transact(opts, "changeProxyAdmin", proxy, newAdmin) } -// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. // -// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() -func (_MockRollupEventInbox *MockRollupEventInboxSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.RollupInitialized(&_MockRollupEventInbox.TransactOpts, chainId, chainConfig) +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) ChangeProxyAdmin(proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.ChangeProxyAdmin(&_ProxyAdminForBinding.TransactOpts, proxy, newAdmin) } -// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. // -// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.RollupInitialized(&_MockRollupEventInbox.TransactOpts, chainId, chainConfig) +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorSession) ChangeProxyAdmin(proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.ChangeProxyAdmin(&_ProxyAdminForBinding.TransactOpts, proxy, newAdmin) } -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function updateRollupAddress() returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { - return _MockRollupEventInbox.contract.Transact(opts, "updateRollupAddress") +// Solidity: function renounceOwnership() returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdminForBinding.contract.Transact(opts, "renounceOwnership") } -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function updateRollupAddress() returns() -func (_MockRollupEventInbox *MockRollupEventInboxSession) UpdateRollupAddress() (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.UpdateRollupAddress(&_MockRollupEventInbox.TransactOpts) +// Solidity: function renounceOwnership() returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.RenounceOwnership(&_ProxyAdminForBinding.TransactOpts) } -// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function updateRollupAddress() returns() -func (_MockRollupEventInbox *MockRollupEventInboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { - return _MockRollupEventInbox.Contract.UpdateRollupAddress(&_MockRollupEventInbox.TransactOpts) +// Solidity: function renounceOwnership() returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.RenounceOwnership(&_ProxyAdminForBinding.TransactOpts) } -// MockRollupEventInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the MockRollupEventInbox contract. -type MockRollupEventInboxInboxMessageDeliveredIterator struct { - Event *MockRollupEventInboxInboxMessageDelivered // Event containing the contract specifics and raw log +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.TransferOwnership(&_ProxyAdminForBinding.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.TransferOwnership(&_ProxyAdminForBinding.TransactOpts, newOwner) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactor) Upgrade(opts *bind.TransactOpts, proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.contract.Transact(opts, "upgrade", proxy, implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) Upgrade(proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.Upgrade(&_ProxyAdminForBinding.TransactOpts, proxy, implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorSession) Upgrade(proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.Upgrade(&_ProxyAdminForBinding.TransactOpts, proxy, implementation) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactor) UpgradeAndCall(opts *bind.TransactOpts, proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdminForBinding.contract.Transact(opts, "upgradeAndCall", proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.UpgradeAndCall(&_ProxyAdminForBinding.TransactOpts, proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_ProxyAdminForBinding *ProxyAdminForBindingTransactorSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _ProxyAdminForBinding.Contract.UpgradeAndCall(&_ProxyAdminForBinding.TransactOpts, proxy, implementation, data) +} + +// ProxyAdminForBindingOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ProxyAdminForBinding contract. +type ProxyAdminForBindingOwnershipTransferredIterator struct { + Event *ProxyAdminForBindingOwnershipTransferred // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -5671,7 +6266,7 @@ type MockRollupEventInboxInboxMessageDeliveredIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Next() bool { +func (it *ProxyAdminForBindingOwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -5680,7 +6275,7 @@ func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(MockRollupEventInboxInboxMessageDelivered) + it.Event = new(ProxyAdminForBindingOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -5695,7 +6290,7 @@ func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(MockRollupEventInboxInboxMessageDelivered) + it.Event = new(ProxyAdminForBindingOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -5711,52 +6306,60 @@ func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Error() error { +func (it *ProxyAdminForBindingOwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *MockRollupEventInboxInboxMessageDeliveredIterator) Close() error { +func (it *ProxyAdminForBindingOwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// MockRollupEventInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the MockRollupEventInbox contract. -type MockRollupEventInboxInboxMessageDelivered struct { - MessageNum *big.Int - Data []byte - Raw types.Log // Blockchain specific contextual infos +// ProxyAdminForBindingOwnershipTransferred represents a OwnershipTransferred event raised by the ProxyAdminForBinding contract. +type ProxyAdminForBindingOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*MockRollupEventInboxInboxMessageDeliveredIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdminForBinding *ProxyAdminForBindingFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ProxyAdminForBindingOwnershipTransferredIterator, error) { - var messageNumRule []interface{} - for _, messageNumItem := range messageNum { - messageNumRule = append(messageNumRule, messageNumItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _MockRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _ProxyAdminForBinding.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &MockRollupEventInboxInboxMessageDeliveredIterator{contract: _MockRollupEventInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil + return &ProxyAdminForBindingOwnershipTransferredIterator{contract: _ProxyAdminForBinding.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *MockRollupEventInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdminForBinding *ProxyAdminForBindingFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ProxyAdminForBindingOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - var messageNumRule []interface{} - for _, messageNumItem := range messageNum { - messageNumRule = append(messageNumRule, messageNumItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _MockRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + logs, sub, err := _ProxyAdminForBinding.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -5766,8 +6369,8 @@ func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDeli select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(MockRollupEventInboxInboxMessageDelivered) - if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + event := new(ProxyAdminForBindingOwnershipTransferred) + if err := _ProxyAdminForBinding.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -5788,156 +6391,12 @@ func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDeli }), nil } -// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. -// -// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*MockRollupEventInboxInboxMessageDelivered, error) { - event := new(MockRollupEventInboxInboxMessageDelivered) - if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// MockRollupEventInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the MockRollupEventInbox contract. -type MockRollupEventInboxInboxMessageDeliveredFromOriginIterator struct { - Event *MockRollupEventInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *MockRollupEventInboxInboxMessageDeliveredFromOriginIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// MockRollupEventInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the MockRollupEventInbox contract. -type MockRollupEventInboxInboxMessageDeliveredFromOrigin struct { - MessageNum *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. -// -// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*MockRollupEventInboxInboxMessageDeliveredFromOriginIterator, error) { - - var messageNumRule []interface{} - for _, messageNumItem := range messageNum { - messageNumRule = append(messageNumRule, messageNumItem) - } - - logs, sub, err := _MockRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) - if err != nil { - return nil, err - } - return &MockRollupEventInboxInboxMessageDeliveredFromOriginIterator{contract: _MockRollupEventInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil -} - -// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. -// -// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *MockRollupEventInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { - - var messageNumRule []interface{} - for _, messageNumItem := range messageNum { - messageNumRule = append(messageNumRule, messageNumItem) - } - - logs, sub, err := _MockRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) - if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) -func (_MockRollupEventInbox *MockRollupEventInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*MockRollupEventInboxInboxMessageDeliveredFromOrigin, error) { - event := new(MockRollupEventInboxInboxMessageDeliveredFromOrigin) - if err := _MockRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdminForBinding *ProxyAdminForBindingFilterer) ParseOwnershipTransferred(log types.Log) (*ProxyAdminForBindingOwnershipTransferred, error) { + event := new(ProxyAdminForBindingOwnershipTransferred) + if err := _ProxyAdminForBinding.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log @@ -5946,8 +6405,8 @@ func (_MockRollupEventInbox *MockRollupEventInboxFilterer) ParseInboxMessageDeli // SequencerInboxStubMetaData contains all meta data concerning the SequencerInboxStub contract. var SequencerInboxStubMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sequencer_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"maxDataSize_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"AlreadyValidDASKeyset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataNotAuthenticated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedBackwards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedTooFar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeBlockTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeTimeTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectMessagePreimage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"NoSuchKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotBatchPoster\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structISequencerInbox.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumISequencerInbox.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"addInitMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValidKeyset\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"creationBlock\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x610100604052306080524660c05262000023620000c5602090811b62001ed217901c565b151560e0523480156200003557600080fd5b506040516200313a3803806200313a83398101604081905262000058916200017b565b60a052600180546001600160a01b039485166001600160a01b03199182161782556002805490911633179055815160045560208083015160055560408084015160065560609093015160075592909316600090815260039092529020805460ff1916909117905562000265565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b17905290516000918291829160649162000105919062000234565b600060405180830381855afa9150503d806000811462000142576040519150601f19603f3d011682016040523d82523d6000602084013e62000147565b606091505b50915091508180156200015b575080516020145b9250505090565b6001600160a01b03811681146200017857600080fd5b50565b60008060008084860360e08112156200019357600080fd5b8551620001a08162000162565b6020870151909550620001b38162000162565b93506080603f1982011215620001c857600080fd5b50604051608081016001600160401b0381118282101715620001fa57634e487b7160e01b600052604160045260246000fd5b6040908152868101518252606080880151602084015260808801519183019190915260a08701519082015260c09095015193969295505050565b6000825160005b818110156200025757602081860181015185830152016200023b565b506000920191825250919050565b60805160a05160c05160e051612e7f620002bb600039600081816116fb0152612186015260006113840152600081816104480152818161246a01526124bf0152600081816105470152610af30152612e7f6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637fa3a40e116100f9578063d9dd67ab11610097578063e78cea9211610071578063e78cea9214610430578063e8eb1dc314610443578063ebea461d1461046a578063f1981578146104a057600080fd5b8063d9dd67ab146103b2578063e0bc9729146103c5578063e5a358c8146103d857600080fd5b806396cc5c78116100d357806396cc5c7814610359578063b31761f814610361578063cb23bcb514610374578063d1ce8da81461039f57600080fd5b80637fa3a40e1461032a57806384420860146103335780638f111f3c1461034657600080fd5b80636633ae85116101665780636e7df3e7116101405780636e7df3e71461028d5780636f12b0c9146102a0578063715ea34b146102b357806371c3e6fe1461030757600080fd5b80636633ae851461024f5780636ae71f12146102625780636d46e9871461026a57600080fd5b80631f956632116101975780631f95663214610221578063258f04951461023457806327957a491461024757600080fd5b806306f13056146101be5780631637be48146101d95780631f7a92b21461020c575b600080fd5b6101c66104b3565b6040519081526020015b60405180910390f35b6101fc6101e7366004612737565b60009081526008602052604090205460ff1690565b60405190151581526020016101d0565b61021f61021a366004612768565b61053d565b005b61021f61022f3660046127b7565b610752565b6101c6610242366004612737565b61085f565b6101c6602881565b61021f61025d366004612737565b6108cc565b61021f610ae9565b6101fc6102783660046127f0565b60096020526000908152604090205460ff1681565b61021f61029b3660046127b7565b610c8c565b61021f6102ae36600461285d565b610d99565b6102e76102c1366004612737565b60086020526000908152604090205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101d0565b6101fc6103153660046127f0565b60036020526000908152604090205460ff1681565b6101c660005481565b61021f610341366004612737565b610fd0565b61021f6103543660046128c8565b61112a565b61021f611381565b61021f61036f366004612945565b611410565b600254610387906001600160a01b031681565b6040516001600160a01b0390911681526020016101d0565b61021f6103ad3660046129b9565b611517565b6101c66103c0366004612737565b61187b565b61021f6103d33660046128c8565b611908565b6103ff7f400000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016101d0565b600154610387906001600160a01b031681565b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6004546005546006546007546104809392919084565b6040805194855260208501939093529183015260608201526080016101d0565b61021f6104ae3660046129fb565b611a6f565b600154604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105389190612a6b565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105e05760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b031615610623576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610663576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107069190612a84565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790558035600455602081013560055560408101356006556060013560075550565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c99190612a84565b6001600160a01b0316336001600160a01b03161461080f57600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105d7565b6001600160a01b038216600090815260096020526040808220805460ff1916841515179055516004917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b600081815260086020908152604080832081518083019092525460ff811615158252610100900467ffffffffffffffff169181018290529082036108b85760405162f20c5d60e01b8152600481018490526024016105d7565b6020015167ffffffffffffffff1692915050565b6000816040516020016108e191815260200190565b60408051808303601f1901815290829052600154815160208301207f8db5993b000000000000000000000000000000000000000000000000000000008452600b6004850152600060248501819052604485019190915291935090916001600160a01b0390911690638db5993b906064016020604051808303816000875af1158015610970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109949190612a6b565b905080156109e45760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f44454c415945445f494e495400000000000000000000000060448201526064016105d7565b807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b83604051610a149190612ac5565b60405180910390a2600080610a296001611f98565b91509150600080600080610a438660016000806001611fdd565b935093509350935083600014610a9b5760405162461bcd60e51b815260206004820152601060248201527f414c52454144595f5345515f494e49540000000000000000000000000000000060448201526064016105d7565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548a6002604051610ad69493929190612af8565b60405180910390a4505050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b875760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105d7565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610be457604051631194af8760e11b81523360048201526001600160a01b03821660248201526044016105d7565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5b9190612a84565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190612a84565b6001600160a01b0316336001600160a01b031614610d4957600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105d7565b6001600160a01b038216600090815260036020526040808220805460ff1916841515179055516001917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b8060005a9050333214610dd8576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff16610e0857604051632dd9fc9760e01b815260040160405180910390fd5b600080610e16888888612434565b90925090506000808080610e2d868b8d8480611fdd565b93509350935093508c8414610e5f5760405163ac7411c960e01b815260048101859052602481018e90526044016105d7565b80838e7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548a6000604051610e9a9493929190612af8565b60405180910390a4505050506001600160a01b038416159150610fc79050573660006020610ec983601f612b83565b610ed39190612b96565b9050610200610ee3600283612c9c565b610eed9190612b96565b610ef8826006612cab565b610f029190612b83565b610f0c9084612b83565b9250333214610f1a57600091505b836001600160a01b031663e3db8a49335a610f359087612cc2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190612cd5565b5050505b50505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190612a84565b6001600160a01b0316336001600160a01b03161461108d57600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105d7565b60008181526008602052604090205460ff166110be5760405162f20c5d60e01b8152600481018290526024016105d7565b600081815260086020526040808220805460ff191690555182917f5cb4218b272fd214168ac43e90fb4d05d6c36f0b17ffb4c2dd07c234d744eb2a91a26040516003907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b8260005a9050333214611169576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff1661119957604051632dd9fc9760e01b815260040160405180910390fd5b6000806111a78a8a8a612434565b90925090508a81838b8b8a8a60008080806111c589888a8989611fdd565b93509350935093508a84141580156111df57506000198b14155b156112075760405163ac7411c960e01b815260048101859052602481018c90526044016105d7565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548f60006040516112429493929190612af8565b60405180910390a4505050506001600160a01b038b1615985061137697505050505050505057366000602061127883601f612b83565b6112829190612b96565b9050610200611292600283612c9c565b61129c9190612b96565b6112a7826006612cab565b6112b19190612b83565b6112bb9084612b83565b92503332146112c957600091505b836001600160a01b031663e3db8a49335a6112e49087612cc2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af115801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190612cd5565b5050505b505050505050505050565b467f0000000000000000000000000000000000000000000000000000000000000000036113da576040517fa301bb0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608081018252600180825260208201819052918101829052606001819052600481905560058190556006819055600755565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114879190612a84565b6001600160a01b0316336001600160a01b0316146114cd57600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105d7565b805160045560208101516005556040808201516006556060820151600755516000907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e908290a250565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190612a84565b6001600160a01b0316336001600160a01b0316146115d457600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105d7565b600082826040516115e6929190612cf2565b6040519081900381207ffe000000000000000000000000000000000000000000000000000000000000006020830152602182015260410160408051601f19818403018152919052805160209091012090507f800000000000000000000000000000000000000000000000000000000000000081186201000083106116ac5760405162461bcd60e51b815260206004820152601360248201527f6b657973657420697320746f6f206c617267650000000000000000000000000060448201526064016105d7565b60008181526008602052604090205460ff16156116f8576040517ffa2fddda000000000000000000000000000000000000000000000000000000008152600481018290526024016105d7565b437f0000000000000000000000000000000000000000000000000000000000000000156117855760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117829190612a6b565b90505b6040805180820182526001815267ffffffffffffffff8381166020808401918252600087815260089091528490209251835491517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009092169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff161761010091909216021790555182907fabca9b7986bc22ad0160eb0cb88ae75411eacfba4052af0b457a9335ef655722906118409088908890612d02565b60405180910390a26040516002907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a25050505050565b6001546040517f16bf5579000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b0316906316bf557990602401602060405180830381865afa1580156118de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119029190612a6b565b92915050565b8260005a3360009081526003602052604090205490915060ff1615801561193a57506002546001600160a01b03163314155b1561195857604051632dd9fc9760e01b815260040160405180910390fd5b6000806119668a8a8a612434565b909250905060008b82848b8a8a8680806119838787838888611fdd565b929c5090945092509050888a1480159061199f57506000198914155b156119c75760405163ac7411c960e01b8152600481018b9052602481018a90526044016105d7565b80838b7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d6001604051611a029493929190612af8565b60405180910390a4505050505050505050807ffe325ca1efe4c5c1062c981c3ee74b781debe4ea9440306a96d2a55759c66c208c8c604051611a45929190612d02565b60405180910390a25050506001600160a01b0382161561137657366000602061127883601f612b83565b6000548611611aaa576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611b8f8684611abe6020890189612d47565b611ace60408a0160208b01612d47565b611ad960018d612cc2565b6040805160f89690961b7fff000000000000000000000000000000000000000000000000000000000000001660208088019190915260609590951b6bffffffffffffffffffffffff1916602187015260c093841b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358801529290931b909116603d85015260458401526065830188905260858084018790528151808503909101815260a59093019052815191012090565b6004549091504390611ba46020880188612d47565b67ffffffffffffffff16611bb89190612b83565b10611bef576040517fad3515d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006544290611c046040880160208901612d47565b67ffffffffffffffff16611c189190612b83565b10611c4f576040517fc76d17e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001881115611cd8576001546001600160a01b031663d5719dc2611c7660028b612cc2565b6040518263ffffffff1660e01b8152600401611c9491815260200190565b602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd59190612a6b565b90505b60408051602080820184905281830185905282518083038401815260609092019092528051910120600180546001600160a01b03169063d5719dc290611d1e908c612cc2565b6040518263ffffffff1660e01b8152600401611d3c91815260200190565b602060405180830381865afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190612a6b565b14611db4576040517f13947fd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611dc08a611f98565b9150915060008a90506000600160009054906101000a90046001600160a01b03166001600160a01b0316635fca4a166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e429190612a6b565b9050600080548d83611e549190612b83565b611e5e9190612cc2565b9050600080600080611e74898860008989611fdd565b93509350935093508083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d6002604051611eb79493929190612af8565b60405180910390a45050505050505050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491611f3e9190612d71565b600060405180830381855afa9150503d8060008114611f79576040519150601f19603f3d011682016040523d82523d6000602084013e611f7e565b606091505b5091509150818015611f91575080516020145b9250505090565b6040805160808101825260008082526020820181905291810182905260608101829052600080611fc78561267c565b8151602090920191909120969095509350505050565b60008060008060005488101561201f576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663eca067ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120969190612a6b565b8811156120cf576040517f925f8bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f86598a56000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101889052606481018790526001600160a01b03909116906386598a56906084016080604051808303816000875af1158015612148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216c9190612d8d565b60008c9055929650909450925090508615612428573360607f0000000000000000000000000000000000000000000000000000000000000000156122f4576000606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f9190612a6b565b9050600061221d4883612b96565b905067ffffffffffffffff8111156122775760405162461bcd60e51b815260206004820152601160248201527f4c315f4741535f4e4f545f55494e54363400000000000000000000000000000060448201526064016105d7565b60408051426020820152606086901b6bffffffffffffffffffffffff191681830152605481018f9052607481018a905248609482015260c09290921b7fffffffffffffffff0000000000000000000000000000000000000000000000001660b48301528051609c81840301815260bc909201905291506123429050565b604080514260208201526bffffffffffffffffffffffff19606085901b1691810191909152605481018c90526074810187905248609482015260b40160405160208183030381529060405290505b600154815160208301206040517f7a88b1070000000000000000000000000000000000000000000000000000000081526000926001600160a01b031691637a88b107916123a79187916004016001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea9190612a6b565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b8360405161241c9190612ac5565b60405180910390a25050505b95509550955095915050565b604080516080810182526000808252602082018190529181018290526060810182905284846000612466826028612b83565b90507f00000000000000000000000000000000000000000000000000000000000000008111156124eb576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016105d7565b811580159061255757507f400000000000000000000000000000000000000000000000000000000000000080848460008161252857612528612d31565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561258e576040517f1f97007f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602182108015906125d85750828260008181106125ad576125ad612d31565b909101357f800000000000000000000000000000000000000000000000000000000000000016151590505b1561262c5760006125ed602160018587612dc3565b6125f691612ded565b60008181526008602052604090205490915060ff1661262a5760405162f20c5d60e01b8152600481018290526024016105d7565b505b6000806126388861267c565b915091506000828b8b60405160200161265393929190612e0b565b60408051808303601f1901815291905280516020909101209b919a509098505050505050505050565b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452838201839052838601839052838101839052855191820183905260288201839052603082018390526038820183905260c087901b7fffffffffffffffff00000000000000000000000000000000000000000000000016958201959095526048016040516020818303038152906040529050602881511461272e5761272e612e33565b94909350915050565b60006020828403121561274957600080fd5b5035919050565b6001600160a01b038116811461276557600080fd5b50565b60008082840360a081121561277c57600080fd5b833561278781612750565b92506080601f198201121561279b57600080fd5b506020830190509250929050565b801515811461276557600080fd5b600080604083850312156127ca57600080fd5b82356127d581612750565b915060208301356127e5816127a9565b809150509250929050565b60006020828403121561280257600080fd5b813561280d81612750565b9392505050565b60008083601f84011261282657600080fd5b50813567ffffffffffffffff81111561283e57600080fd5b60208301915083602082850101111561285657600080fd5b9250929050565b60008060008060006080868803121561287557600080fd5b85359450602086013567ffffffffffffffff81111561289357600080fd5b61289f88828901612814565b9095509350506040860135915060608601356128ba81612750565b809150509295509295909350565b600080600080600080600060c0888a0312156128e357600080fd5b87359650602088013567ffffffffffffffff81111561290157600080fd5b61290d8a828b01612814565b90975095505060408801359350606088013561292881612750565b969995985093969295946080840135945060a09093013592915050565b60006080828403121561295757600080fd5b6040516080810181811067ffffffffffffffff8211171561298857634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600080602083850312156129cc57600080fd5b823567ffffffffffffffff8111156129e357600080fd5b6129ef85828601612814565b90969095509350505050565b60008060008060008060e08789031215612a1457600080fd5b86359550602087013560ff81168114612a2c57600080fd5b94506080870188811115612a3f57600080fd5b60408801945035925060a0870135612a5681612750565b8092505060c087013590509295509295509295565b600060208284031215612a7d57600080fd5b5051919050565b600060208284031215612a9657600080fd5b815161280d81612750565b60005b83811015612abc578181015183820152602001612aa4565b50506000910152565b6020815260008251806020840152612ae4816040850160208701612aa1565b601f01601f19169190910160400192915050565b600060e08201905085825284602083015267ffffffffffffffff8085511660408401528060208601511660608401528060408601511660808401528060608601511660a08401525060038310612b5e57634e487b7160e01b600052602160045260246000fd5b8260c083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561190257611902612b6d565b600082612bb357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612bf3578160001904821115612bd957612bd9612b6d565b80851615612be657918102915b93841c9390800290612bbd565b509250929050565b600082612c0a57506001611902565b81612c1757506000611902565b8160018114612c2d5760028114612c3757612c53565b6001915050611902565b60ff841115612c4857612c48612b6d565b50506001821b611902565b5060208310610133831016604e8410600b8410161715612c76575081810a611902565b612c808383612bb8565b8060001904821115612c9457612c94612b6d565b029392505050565b600061280d60ff841683612bfb565b808202811582820484141761190257611902612b6d565b8181038181111561190257611902612b6d565b600060208284031215612ce757600080fd5b815161280d816127a9565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d5957600080fd5b813567ffffffffffffffff8116811461280d57600080fd5b60008251612d83818460208701612aa1565b9190910192915050565b60008060008060808587031215612da357600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008085851115612dd357600080fd5b83861115612de057600080fd5b5050820193919092039150565b8035602083101561190257600019602084900360031b1b1692915050565b60008451612e1d818460208901612aa1565b8201838582376000930192835250909392505050565b634e487b7160e01b600052600160045260246000fdfea26469706673582212204ceb4f2e165e63ccd67fa732eccb5f74c0d3e0a446c7b398cfb05213ac4df91364736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sequencer_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"maxDataSize_\",\"type\":\"uint256\"},{\"internalType\":\"contractIReader4844\",\"name\":\"reader4844_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isUsingFeeToken_\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"AlreadyValidDASKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadMaxTimeVariation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadPostUpgradeInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stored\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"received\",\"type\":\"uint256\"}],\"name\":\"BadSequencerNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataBlobsNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDataLength\",\"type\":\"uint256\"}],\"name\":\"DataTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedBackwards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelayedTooFar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Deprecated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeBlockTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceIncludeTimeTooSoon\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectMessagePreimage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"InitParamZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"name\":\"InvalidHeaderFlag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingDataHashes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NativeTokenMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"NoSuchKeyset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotBatchPoster\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NotBatchPosterManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotForked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotOrigin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidateKeyset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SequencerBatchData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchSequenceNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"afterAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxBlockNumber\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structIBridge.TimeBounds\",\"name\":\"timeBounds\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"enumIBridge.BatchDataLocation\",\"name\":\"dataLocation\",\"type\":\"uint8\"}],\"name\":\"SequencerBatchDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keysetHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"SetValidKeyset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BROTLI_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_AUTHENTICATED_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DATA_BLOB_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEADER_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREE_DAS_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_HEAVY_MESSAGE_HEADER_FLAG\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"\",\"type\":\"bytes1\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"addInitMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2Batch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromBlobs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sequenceNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"addSequencerL2BatchFromOrigin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchPosterManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dasKeySetInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValidKeyset\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"creationBlock\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint64[2]\",\"name\":\"l1BlockAndTime\",\"type\":\"uint64[2]\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"forceInclusion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"getKeysetCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"inboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"invalidateKeysetHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isBatchPoster\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isSequencer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUsingFeeToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"ksHash\",\"type\":\"bytes32\"}],\"name\":\"isValidKeysetHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDataSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxTimeVariation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reader4844\",\"outputs\":[{\"internalType\":\"contractIReader4844\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeDelayAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBatchPosterManager\",\"type\":\"address\"}],\"name\":\"setBatchPosterManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBatchPoster_\",\"type\":\"bool\"}],\"name\":\"setIsBatchPoster\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isSequencer_\",\"type\":\"bool\"}],\"name\":\"setIsSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation_\",\"type\":\"tuple\"}],\"name\":\"setMaxTimeVariation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keysetBytes\",\"type\":\"bytes\"}],\"name\":\"setValidKeyset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDelayedMessagesRead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x610160604052306080526202000060a05246610100526200002b620001bc602090811b620029a117901c565b1515610120523480156200003e57600080fd5b50604051620043a5380380620043a5833981016040819052620000619162000295565b8282828260e081815250506101205115620000a5576001600160a01b038216156200009f576040516386657a5360e01b815260040160405180910390fd5b620000ee565b6001600160a01b038216620000ee576040516380fc2c0360e01b815260206004820152600a60248201526914995859195c8d0e0d0d60b21b604482015260640160405180910390fd5b6001600160a01b0391821660c052151561014052600180549882166001600160a01b0319998a161781556002805490991633179098558551600a80546020808a01516040808c01516060909c01516001600160401b03908116600160c01b026001600160c01b039d8216600160801b029d909d166001600160801b0393821668010000000000000000026001600160801b031990961691909716179390931716939093179890981790559616600090815260039096525050509120805460ff191690921790915550620003a9565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620001fc919062000378565b600060405180830381855afa9150503d806000811462000239576040519150601f19603f3d011682016040523d82523d6000602084013e6200023e565b606091505b509150915081801562000252575080516020145b9250505090565b6001600160a01b03811681146200026f57600080fd5b50565b80516200027f8162000259565b919050565b805180151581146200027f57600080fd5b600080600080600080868803610120811215620002b157600080fd5b8751620002be8162000259565b6020890151909750620002d18162000259565b95506080603f1982011215620002e657600080fd5b50604051608081016001600160401b03811182821017156200031857634e487b7160e01b600052604160045260246000fd5b806040525060408801518152606088015160208201526080880151604082015260a088015160608201528094505060c087015192506200035b60e0880162000272565b91506200036c610100880162000284565b90509295509295509295565b6000825160005b818110156200039b57602081860181015185830152016200037f565b506000920191825250919050565b60805160a05160c05160e051610100516101205161014051613f466200045f60003960008181610532015281816108a901528181610e8a0152612f79015260008181610e280152818161219d0152612fbb015260008181611e36015261346b0152600081816106150152818161328901526132de0152600081816104e001528181610d2101528181612bc80152612ca301526000818161101e0152611a740152600081816107110152611b860152613f466000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c80637fa3a40e11610160578063cc2a1a0c116100d8578063e78cea921161008c578063ebea461d11610071578063ebea461d14610637578063f19815781461065f578063f60a50911461067257600080fd5b8063e78cea92146105fd578063e8eb1dc31461061057600080fd5b8063d9dd67ab116100bd578063d9dd67ab146105b0578063e0bc9729146105c3578063e5a358c8146105d657600080fd5b8063cc2a1a0c1461058a578063d1ce8da81461059d57600080fd5b806392d9f7821161012f57806396cc5c781161011457806396cc5c781461055c578063b31761f814610564578063cb23bcb51461057757600080fd5b806392d9f7821461052d57806395fcea781461055457600080fd5b80637fa3a40e146104bf57806384420860146104c85780638d910dde146104db5780638f111f3c1461051a57600080fd5b80632cbf74e51161020e5780636d46e987116101c25780636f12b0c9116101a75780636f12b0c914610435578063715ea34b1461044857806371c3e6fe1461049c57600080fd5b80636d46e987146103ff5780636e7df3e71461042257600080fd5b80636633ae85116101f35780636633ae85146103bd5780636ae71f12146103d05780636c890450146103d857600080fd5b80632cbf74e5146103835780633e5aa082146103aa57600080fd5b80631f7a92b2116102655780631ff647901161024a5780631ff6479014610355578063258f04951461036857806327957a491461037b57600080fd5b80631f7a92b21461032d5780631f9566321461034257600080fd5b806302c992751461029757806306f13056146102dc5780631637be48146102f257806316af91a714610325575b600080fd5b6102be7f200000000000000000000000000000000000000000000000000000000000000081565b6040516001600160f81b031990911681526020015b60405180910390f35b6102e461067d565b6040519081526020016102d3565b610315610300366004613635565b60009081526008602052604090205460ff1690565b60405190151581526020016102d3565b6102be600081565b61034061033b366004613666565b610707565b005b6103406103503660046136b5565b6109ed565b6103406103633660046136ee565b610b19565b6102e4610376366004613635565b610cb1565b6102e4602881565b6102be7f500000000000000000000000000000000000000000000000000000000000000081565b6103406103b8366004613712565b610d1e565b6103406103cb366004613635565b611124565b610340611341565b6102be7f080000000000000000000000000000000000000000000000000000000000000081565b61031561040d3660046136ee565b60096020526000908152604090205460ff1681565b6103406104303660046136b5565b611519565b6103406104433660046137a4565b611645565b61047c610456366004613635565b60086020526000908152604090205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016102d3565b6103156104aa3660046136ee565b60036020526000908152604090205460ff1681565b6102e460005481565b6103406104d6366004613635565b611677565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d3565b61034061052836600461380f565b6117ec565b6103157f000000000000000000000000000000000000000000000000000000000000000081565b610340611b7c565b610340611e33565b6103406105723660046138d3565b611eab565b600254610502906001600160a01b031681565b600b54610502906001600160a01b031681565b6103406105ab366004613939565b611fba565b6102e46105be366004613635565b61231d565b6103406105d136600461380f565b6123aa565b6102be7f400000000000000000000000000000000000000000000000000000000000000081565b600154610502906001600160a01b031681565b6102e47f000000000000000000000000000000000000000000000000000000000000000081565b61063f612512565b6040805194855260208501939093529183015260608201526080016102d3565b61034061066d36600461397b565b61254b565b6102be600160ff1b81565b600154604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa1580156106de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070291906139eb565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107aa5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b0316156107ed576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661082d576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610889575060408051601f3d908101601f1916820190925261088691810190613a04565b60015b156108a4576001600160a01b038116156108a257600191505b505b8015157f0000000000000000000000000000000000000000000000000000000000000000151514610901576040517fc3e31f8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038516908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190613a04565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556109e86109e3368490038401846138d3565b612a67565b505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a649190613a04565b6001600160a01b0316336001600160a01b031614158015610a905750600b546001600160a01b03163314155b15610ac9576040517f660b3b420000000000000000000000000000000000000000000000000000000081523360048201526024016107a1565b6001600160a01b038216600090815260096020526040808220805460ff1916841515179055516004917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190613a04565b6001600160a01b0316336001600160a01b031614610c5a5760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c159190613a04565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044016107a1565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556040516005907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b600081815260086020908152604080832081518083019092525460ff811615158252610100900467ffffffffffffffff16918101829052908203610d0a5760405162f20c5d60e01b8152600481018490526024016107a1565b6020015167ffffffffffffffff1692915050565b827f000000000000000000000000000000000000000000000000000000000000000060005a3360009081526003602052604090205490915060ff16610d7657604051632dd9fc9760e01b815260040160405180910390fd5b6000806000610d848a612ba0565b925092509250600080600080610d9e878f60008f8f612dcf565b929650909450925090508e808514801590610dbb57506000198114155b15610de35760405163ac7411c960e01b815260048101869052602481018290526044016107a1565b8184827f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7866000548c6003604051610e1e9493929190613a21565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000015610e7e576040517f86657a5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332148015610eab57507f0000000000000000000000000000000000000000000000000000000000000000155b15610ebc57610ebc88864889612fb8565b505050506001600160a01b03871615935061111a92505050573660006020610ee583601f613aac565b610eef9190613abf565b9050610200610eff600283613bc5565b610f099190613abf565b610f14826006613bd4565b610f1e9190613aac565b610f289084613aac565b9250333214610f3a576000915061106d565b6001600160a01b0384161561106d57836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610fa857506040513d6000823e601f3d908101601f19168201604052610fa59190810190613beb565b60015b1561106d5780511561106b576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101891906139eb565b905048817f000000000000000000000000000000000000000000000000000000000000000084516110499190613bd4565b6110539190613bd4565b61105d9190613abf565b6110679086613aac565b9450505b505b846001600160a01b031663e3db8a49335a6110889087613c91565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190613ca4565b5050505b5050505050505050565b60008160405160200161113991815260200190565b60408051808303601f1901815290829052600154815160208301207f8db5993b000000000000000000000000000000000000000000000000000000008452600b6004850152600060248501819052604485019190915291935090916001600160a01b0390911690638db5993b906064016020604051808303816000875af11580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec91906139eb565b9050801561123c5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f44454c415945445f494e495400000000000000000000000060448201526064016107a1565b807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b8360405161126c9190613ce5565b60405180910390a26000806112816001613210565b9150915060008060008061129b8660016000806001612dcf565b9350935093509350836000146112f35760405162461bcd60e51b815260206004820152601060248201527f414c52454144595f5345515f494e49540000000000000000000000000000000060448201526064016107a1565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548a600260405161132e9493929190613a21565b60405180910390a4505050505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190613a04565b6001600160a01b0316336001600160a01b0316146114195760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bf1573d6000803e3d6000fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190613a04565b6002549091506001600160a01b038083169116036114ea576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190613a04565b6001600160a01b0316336001600160a01b0316141580156115bc5750600b546001600160a01b03163314155b156115f5576040517f660b3b420000000000000000000000000000000000000000000000000000000081523360048201526024016107a1565b6001600160a01b038216600090815260036020526040808220805460ff1916841515179055516001917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b6040517fc73b9d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ee9190613a04565b6001600160a01b0316336001600160a01b03161461174f5760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bf1573d6000803e3d6000fd5b60008181526008602052604090205460ff166117805760405162f20c5d60e01b8152600481018290526024016107a1565b600081815260086020526040808220805460ff191690555182917f5cb4218b272fd214168ac43e90fb4d05d6c36f0b17ffb4c2dd07c234d744eb2a91a26040516003907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b826000805a905033321461182c576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff1661185c57604051632dd9fc9760e01b815260040160405180910390fd5b60008061186a8b8b8b613255565b90925090508b81838c8c8b8b600080808061188889888a8989612dcf565b93509350935093508a84141580156118a257506000198b14155b156118ca5760405163ac7411c960e01b815260048101859052602481018c90526044016107a1565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548f60006040516119059493929190613a21565b60405180910390a4505050506001600160a01b038c16159850611b7097505050505050505057366000602061193b83601f613aac565b6119459190613abf565b9050610200611955600283613bc5565b61195f9190613abf565b61196a826006613bd4565b6119749190613aac565b61197e9084613aac565b92503332146119905760009150611ac3565b6001600160a01b03841615611ac357836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa9250505080156119fe57506040513d6000823e601f3d908101601f191682016040526119fb9190810190613beb565b60015b15611ac357805115611ac1576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6e91906139eb565b905048817f00000000000000000000000000000000000000000000000000000000000000008451611a9f9190613bd4565b611aa99190613bd4565b611ab39190613abf565b611abd9086613aac565b9450505b505b846001600160a01b031663e3db8a49335a611ade9087613c91565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6c9190613ca4565b5050505b50505050505050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c1a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016107a1565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614611c90576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016107a1565b600454158015611ca05750600554155b8015611cac5750600654155b8015611cb85750600754155b15611cef576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045467ffffffffffffffff1080611d10575060055467ffffffffffffffff105b80611d24575060065467ffffffffffffffff105b80611d38575060075467ffffffffffffffff105b15611d6f576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060048054600a805460058054600680546007805467ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff93821670010000000000000000000000000000000002939093166fffffffffffffffffffffffffffffffff95821668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909816919099161795909517929092169590951717909255600093849055908390559082905555565b467f000000000000000000000000000000000000000000000000000000000000000003611e8c576040517fa301bb0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7801000000000000000100000000000000010000000000000001600a55565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611efe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f229190613a04565b6001600160a01b0316336001600160a01b031614611f835760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bf1573d6000803e3d6000fd5b611f8c81612a67565b6040516000907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e908290a250565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190613a04565b6001600160a01b0316336001600160a01b0316146120925760025460408051638da5cb5b60e01b8152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610bf1573d6000803e3d6000fd5b600082826040516120a4929190613d18565b6040519081900381207ffe000000000000000000000000000000000000000000000000000000000000006020830152602182015260410160408051601f1981840301815291905280516020909101209050600160ff1b811862010000831061214e5760405162461bcd60e51b815260206004820152601360248201527f6b657973657420697320746f6f206c617267650000000000000000000000000060448201526064016107a1565b60008181526008602052604090205460ff161561219a576040517ffa2fddda000000000000000000000000000000000000000000000000000000008152600481018290526024016107a1565b437f0000000000000000000000000000000000000000000000000000000000000000156122275760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222491906139eb565b90505b6040805180820182526001815267ffffffffffffffff8381166020808401918252600087815260089091528490209251835491517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009092169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff161761010091909216021790555182907fabca9b7986bc22ad0160eb0cb88ae75411eacfba4052af0b457a9335ef655722906122e29088908890613d28565b60405180910390a26040516002907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a25050505050565b6001546040517f16bf5579000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b0316906316bf557990602401602060405180830381865afa158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a491906139eb565b92915050565b826000805a3360009081526003602052604090205490915060ff161580156123dd57506002546001600160a01b03163314155b156123fb57604051632dd9fc9760e01b815260040160405180910390fd5b6000806124098b8b8b613255565b909250905060008c82848c8b8b8680806124268787838888612dcf565b929c5090945092509050888a1480159061244257506000198914155b1561246a5760405163ac7411c960e01b8152600481018b9052602481018a90526044016107a1565b80838b7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d60016040516124a59493929190613a21565b60405180910390a4505050505050505050807ffe325ca1efe4c5c1062c981c3ee74b781debe4ea9440306a96d2a55759c66c208d8d6040516124e8929190613d28565b60405180910390a25050506001600160a01b03831615611b7057366000602061193b83601f613aac565b600080600080600080600080612526613463565b67ffffffffffffffff9384169b50918316995082169750169450505050505b90919293565b6000548611612586576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612653868461259a6020890189613d6d565b6125aa60408a0160208b01613d6d565b6125b560018d613c91565b6040805160f89690961b6001600160f81b03191660208088019190915260609590951b6bffffffffffffffffffffffff1916602187015260c093841b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358801529290931b909116603d85015260458401526065830188905260858084018790528151808503909101815260a59093019052815191012090565b600a54909150439067ffffffffffffffff166126726020880188613d6d565b61267c9190613d97565b67ffffffffffffffff16106126bd576040517fad3515d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a544290700100000000000000000000000000000000900467ffffffffffffffff166126f06040880160208901613d6d565b6126fa9190613d97565b67ffffffffffffffff161061273b576040517fc76d17e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060018811156127c4576001546001600160a01b031663d5719dc261276260028b613c91565b6040518263ffffffff1660e01b815260040161278091815260200190565b602060405180830381865afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c191906139eb565b90505b60408051602080820184905281830185905282518083038401815260609092019092528051910120600180546001600160a01b03169063d5719dc29061280a908c613c91565b6040518263ffffffff1660e01b815260040161282891815260200190565b602060405180830381865afa158015612845573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286991906139eb565b146128a0576040517f13947fd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806128ac8a613210565b9150915060008a90506000600160009054906101000a90046001600160a01b03166001600160a01b0316635fca4a166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561290a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292e91906139eb565b90508060008080806129438988838880612dcf565b93509350935093508083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d60026040516129869493929190613a21565b60405180910390a45050505050505050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491612a0d9190613dbf565b600060405180830381855afa9150503d8060008114612a48576040519150601f19603f3d011682016040523d82523d6000602084013e612a4d565b606091505b5091509150818015612a60575080516020145b9250505090565b805167ffffffffffffffff1080612a895750602081015167ffffffffffffffff105b80612a9f5750604081015167ffffffffffffffff105b80612ab55750606081015167ffffffffffffffff105b15612aec576040517f09cfba7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a80546020840151604085015160609095015167ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055565b60408051608081018252600080825260208201819052918101829052606081018290526000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa158015612c24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c4c9190810190613beb565b90508051600003612c89576040517f3cd27eb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080612c95876134e7565b9150915060008351620200007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2391906139eb565b612d2d9190613bd4565b612d379190613bd4565b60405190915083907f500000000000000000000000000000000000000000000000000000000000000090612d6f908790602001613ddb565b60408051601f1981840301815290829052612d8e939291602001613e11565b604051602081830303815290604052805190602001208260004811612db4576000612dbe565b612dbe4884613abf565b965096509650505050509193909250565b600080600080600054881015612e11576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663eca067ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8891906139eb565b881115612ec1576040517f925f8bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f86598a56000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101889052606481018790526001600160a01b03909116906386598a56906084016080604051808303816000875af1158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e9190613e54565b60008c9055929650909450925090508615801590612f9a57507f0000000000000000000000000000000000000000000000000000000000000000155b15612fac57612fac8985486000612fb8565b95509550955095915050565b327f00000000000000000000000000000000000000000000000000000000000000001561305e576000606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304491906139eb565b90506130504882613abf565b61305a9084613aac565b9250505b67ffffffffffffffff8211156130b65760405162461bcd60e51b815260206004820152601460248201527f45585452415f4741535f4e4f545f55494e54363400000000000000000000000060448201526064016107a1565b604080514260208201526bffffffffffffffffffffffff19606084901b16918101919091526054810186905260748101859052609481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b1660b482015260009060bc0160408051808303601f1901815290829052600154815160208301207f7a88b1070000000000000000000000000000000000000000000000000000000084526001600160a01b0386811660048601526024850191909152919350600092911690637a88b107906044016020604051808303816000875af11580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd91906139eb565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516131ff9190613ce5565b60405180910390a250505050505050565b604080516080810182526000808252602082018190529181018290526060810182905260008061323f856134e7565b8151602090920191909120969095509350505050565b60408051608081018252600080825260208201819052918101829052606081018290526000613285856028613aac565b90507f000000000000000000000000000000000000000000000000000000000000000081111561330a576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016107a1565b600080613316866134e7565b90925090508615613429576133468888600081811061333757613337613d57565b9050013560f81c60f81b6135a2565b61339e578787600081811061335d5761335d613d57565b6040517f6b3333560000000000000000000000000000000000000000000000000000000081529201356001600160f81b0319166004830152506024016107a1565b600160ff1b88886000816133b4576133b4613d57565b6001600160f81b0319920135929092161615801591506133d5575060218710155b156134295760006133ea602160018a8c613e8a565b6133f391613eb4565b60008181526008602052604090205490915060ff166134275760405162f20c5d60e01b8152600481018290526024016107a1565b505b81888860405160200161343e93929190613ed2565b60408051601f1981840301815291905280516020909101209890975095505050505050565b6000808080467f0000000000000000000000000000000000000000000000000000000000000000146134a057506001925082915081905080612545565b5050600a5467ffffffffffffffff8082169350680100000000000000008204811692507001000000000000000000000000000000008204811691600160c01b900416612545565b604080516080808201835260008083526020808401829052838501829052606080850183905285519384018652828452838201839052838601839052838101839052855191820183905260288201839052603082018390526038820183905260c087901b7fffffffffffffffff00000000000000000000000000000000000000000000000016958201959095526048016040516020818303038152906040529050602881511461359957613599613efa565b94909350915050565b60006001600160f81b0319821615806135c857506001600160f81b03198216600160ff1b145b806135fc57506001600160f81b031982167f8800000000000000000000000000000000000000000000000000000000000000145b806123a457506001600160f81b031982167f20000000000000000000000000000000000000000000000000000000000000001492915050565b60006020828403121561364757600080fd5b5035919050565b6001600160a01b038116811461366357600080fd5b50565b60008082840360a081121561367a57600080fd5b83356136858161364e565b92506080601f198201121561369957600080fd5b506020830190509250929050565b801515811461366357600080fd5b600080604083850312156136c857600080fd5b82356136d38161364e565b915060208301356136e3816136a7565b809150509250929050565b60006020828403121561370057600080fd5b813561370b8161364e565b9392505050565b600080600080600060a0868803121561372a57600080fd5b853594506020860135935060408601356137438161364e565b94979396509394606081013594506080013592915050565b60008083601f84011261376d57600080fd5b50813567ffffffffffffffff81111561378557600080fd5b60208301915083602082850101111561379d57600080fd5b9250929050565b6000806000806000608086880312156137bc57600080fd5b85359450602086013567ffffffffffffffff8111156137da57600080fd5b6137e68882890161375b565b9095509350506040860135915060608601356138018161364e565b809150509295509295909350565b600080600080600080600060c0888a03121561382a57600080fd5b87359650602088013567ffffffffffffffff81111561384857600080fd5b6138548a828b0161375b565b90975095505060408801359350606088013561386f8161364e565b969995985093969295946080840135945060a09093013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156138cb576138cb61388c565b604052919050565b6000608082840312156138e557600080fd5b6040516080810181811067ffffffffffffffff821117156139085761390861388c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b6000806020838503121561394c57600080fd5b823567ffffffffffffffff81111561396357600080fd5b61396f8582860161375b565b90969095509350505050565b60008060008060008060e0878903121561399457600080fd5b86359550602087013560ff811681146139ac57600080fd5b945060808701888111156139bf57600080fd5b60408801945035925060a08701356139d68161364e565b8092505060c087013590509295509295509295565b6000602082840312156139fd57600080fd5b5051919050565b600060208284031215613a1657600080fd5b815161370b8161364e565b600060e08201905085825284602083015267ffffffffffffffff8085511660408401528060208601511660608401528060408601511660808401528060608601511660a08401525060048310613a8757634e487b7160e01b600052602160045260246000fd5b8260c083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156123a4576123a4613a96565b600082613adc57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613b1c578160001904821115613b0257613b02613a96565b80851615613b0f57918102915b93841c9390800290613ae6565b509250929050565b600082613b33575060016123a4565b81613b40575060006123a4565b8160018114613b565760028114613b6057613b7c565b60019150506123a4565b60ff841115613b7157613b71613a96565b50506001821b6123a4565b5060208310610133831016604e8410600b8410161715613b9f575081810a6123a4565b613ba98383613ae1565b8060001904821115613bbd57613bbd613a96565b029392505050565b600061370b60ff841683613b24565b80820281158282048414176123a4576123a4613a96565b60006020808385031215613bfe57600080fd5b825167ffffffffffffffff80821115613c1657600080fd5b818501915085601f830112613c2a57600080fd5b815181811115613c3c57613c3c61388c565b8060051b9150613c4d8483016138a2565b8181529183018401918481019088841115613c6757600080fd5b938501935b83851015613c8557845182529385019390850190613c6c565b98975050505050505050565b818103818111156123a4576123a4613a96565b600060208284031215613cb657600080fd5b815161370b816136a7565b60005b83811015613cdc578181015183820152602001613cc4565b50506000910152565b6020815260008251806020840152613d04816040850160208701613cc1565b601f01601f19169190910160400192915050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d7f57600080fd5b813567ffffffffffffffff8116811461370b57600080fd5b67ffffffffffffffff818116838216019080821115613db857613db8613a96565b5092915050565b60008251613dd1818460208701613cc1565b9190910192915050565b815160009082906020808601845b83811015613e0557815185529382019390820190600101613de9565b50929695505050505050565b60008451613e23818460208901613cc1565b6001600160f81b031985169083019081528351613e47816001840160208801613cc1565b0160010195945050505050565b60008060008060808587031215613e6a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b60008085851115613e9a57600080fd5b83861115613ea757600080fd5b5050820193919092039150565b803560208310156123a457600019602084900360031b1b1692915050565b60008451613ee4818460208901613cc1565b8201838582376000930192835250909392505050565b634e487b7160e01b600052600160045260246000fdfea264697066735822122064e3967de8694402fba6ff597b4042c8e7ba880d4c5e57be0e086d5017b4c8b664736f6c63430008110033", } // SequencerInboxStubABI is the input ABI used to generate the binding from. @@ -5959,7 +6418,7 @@ var SequencerInboxStubABI = SequencerInboxStubMetaData.ABI var SequencerInboxStubBin = SequencerInboxStubMetaData.Bin // DeploySequencerInboxStub deploys a new Ethereum contract, binding an instance of SequencerInboxStub to it. -func DeploySequencerInboxStub(auth *bind.TransactOpts, backend bind.ContractBackend, bridge_ common.Address, sequencer_ common.Address, maxTimeVariation_ ISequencerInboxMaxTimeVariation, maxDataSize_ *big.Int) (common.Address, *types.Transaction, *SequencerInboxStub, error) { +func DeploySequencerInboxStub(auth *bind.TransactOpts, backend bind.ContractBackend, bridge_ common.Address, sequencer_ common.Address, maxTimeVariation_ ISequencerInboxMaxTimeVariation, maxDataSize_ *big.Int, reader4844_ common.Address, isUsingFeeToken_ bool) (common.Address, *types.Transaction, *SequencerInboxStub, error) { parsed, err := SequencerInboxStubMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -5968,7 +6427,7 @@ func DeploySequencerInboxStub(auth *bind.TransactOpts, backend bind.ContractBack return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SequencerInboxStubBin), backend, bridge_, sequencer_, maxTimeVariation_, maxDataSize_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SequencerInboxStubBin), backend, bridge_, sequencer_, maxTimeVariation_, maxDataSize_, reader4844_, isUsingFeeToken_) if err != nil { return common.Address{}, nil, nil, err } @@ -6117,6 +6576,68 @@ func (_SequencerInboxStub *SequencerInboxStubTransactorRaw) Transact(opts *bind. return _SequencerInboxStub.Contract.contract.Transact(opts, method, params...) } +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCaller) BROTLIMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "BROTLI_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.BROTLIMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + +// BROTLIMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x16af91a7. +// +// Solidity: function BROTLI_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) BROTLIMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.BROTLIMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCaller) DASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "DAS_MESSAGE_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.DASMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + +// DASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0xf60a5091. +// +// Solidity: function DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) DASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.DASMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + // DATAAUTHENTICATEDFLAG is a free data retrieval call binding the contract method 0xe5a358c8. // // Solidity: function DATA_AUTHENTICATED_FLAG() view returns(bytes1) @@ -6148,6 +6669,37 @@ func (_SequencerInboxStub *SequencerInboxStubCallerSession) DATAAUTHENTICATEDFLA return _SequencerInboxStub.Contract.DATAAUTHENTICATEDFLAG(&_SequencerInboxStub.CallOpts) } +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCaller) DATABLOBHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "DATA_BLOB_HEADER_FLAG") + + if err != nil { + return *new([1]byte), err + } + + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + + return out0, err + +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.DATABLOBHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + +// DATABLOBHEADERFLAG is a free data retrieval call binding the contract method 0x2cbf74e5. +// +// Solidity: function DATA_BLOB_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) DATABLOBHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.DATABLOBHEADERFLAG(&_SequencerInboxStub.CallOpts) +} + // HEADERLENGTH is a free data retrieval call binding the contract method 0x27957a49. // // Solidity: function HEADER_LENGTH() view returns(uint256) @@ -6179,90 +6731,212 @@ func (_SequencerInboxStub *SequencerInboxStubCallerSession) HEADERLENGTH() (*big return _SequencerInboxStub.Contract.HEADERLENGTH(&_SequencerInboxStub.CallOpts) } -// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. // -// Solidity: function batchCount() view returns(uint256) -func (_SequencerInboxStub *SequencerInboxStubCaller) BatchCount(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCaller) TREEDASMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { var out []interface{} - err := _SequencerInboxStub.contract.Call(opts, &out, "batchCount") + err := _SequencerInboxStub.contract.Call(opts, &out, "TREE_DAS_MESSAGE_HEADER_FLAG") if err != nil { - return *new(*big.Int), err + return *new([1]byte), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) return out0, err } -// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. // -// Solidity: function batchCount() view returns(uint256) -func (_SequencerInboxStub *SequencerInboxStubSession) BatchCount() (*big.Int, error) { - return _SequencerInboxStub.Contract.BatchCount(&_SequencerInboxStub.CallOpts) +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.TREEDASMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) } -// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// TREEDASMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x6c890450. // -// Solidity: function batchCount() view returns(uint256) -func (_SequencerInboxStub *SequencerInboxStubCallerSession) BatchCount() (*big.Int, error) { - return _SequencerInboxStub.Contract.BatchCount(&_SequencerInboxStub.CallOpts) +// Solidity: function TREE_DAS_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) TREEDASMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.TREEDASMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. // -// Solidity: function bridge() view returns(address) -func (_SequencerInboxStub *SequencerInboxStubCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCaller) ZEROHEAVYMESSAGEHEADERFLAG(opts *bind.CallOpts) ([1]byte, error) { var out []interface{} - err := _SequencerInboxStub.contract.Call(opts, &out, "bridge") + err := _SequencerInboxStub.contract.Call(opts, &out, "ZERO_HEAVY_MESSAGE_HEADER_FLAG") if err != nil { - return *new(common.Address), err + return *new([1]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) return out0, err } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. // -// Solidity: function bridge() view returns(address) -func (_SequencerInboxStub *SequencerInboxStubSession) Bridge() (common.Address, error) { - return _SequencerInboxStub.Contract.Bridge(&_SequencerInboxStub.CallOpts) +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) } -// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// ZEROHEAVYMESSAGEHEADERFLAG is a free data retrieval call binding the contract method 0x02c99275. // -// Solidity: function bridge() view returns(address) -func (_SequencerInboxStub *SequencerInboxStubCallerSession) Bridge() (common.Address, error) { - return _SequencerInboxStub.Contract.Bridge(&_SequencerInboxStub.CallOpts) +// Solidity: function ZERO_HEAVY_MESSAGE_HEADER_FLAG() view returns(bytes1) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) ZEROHEAVYMESSAGEHEADERFLAG() ([1]byte, error) { + return _SequencerInboxStub.Contract.ZEROHEAVYMESSAGEHEADERFLAG(&_SequencerInboxStub.CallOpts) } -// DasKeySetInfo is a free data retrieval call binding the contract method 0x715ea34b. +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. // -// Solidity: function dasKeySetInfo(bytes32 ) view returns(bool isValidKeyset, uint64 creationBlock) -func (_SequencerInboxStub *SequencerInboxStubCaller) DasKeySetInfo(opts *bind.CallOpts, arg0 [32]byte) (struct { - IsValidKeyset bool - CreationBlock uint64 -}, error) { +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInboxStub *SequencerInboxStubCaller) AddSequencerL2BatchFromOrigin(opts *bind.CallOpts, arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { var out []interface{} - err := _SequencerInboxStub.contract.Call(opts, &out, "dasKeySetInfo", arg0) + err := _SequencerInboxStub.contract.Call(opts, &out, "addSequencerL2BatchFromOrigin", arg0, arg1, arg2, arg3) - outstruct := new(struct { - IsValidKeyset bool - CreationBlock uint64 - }) if err != nil { - return *outstruct, err + return err } - outstruct.IsValidKeyset = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.CreationBlock = *abi.ConvertType(out[1], new(uint64)).(*uint64) - - return *outstruct, err + return err + +} + +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInboxStub *SequencerInboxStubSession) AddSequencerL2BatchFromOrigin(arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { + return _SequencerInboxStub.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInboxStub.CallOpts, arg0, arg1, arg2, arg3) +} + +// AddSequencerL2BatchFromOrigin is a free data retrieval call binding the contract method 0x6f12b0c9. +// +// Solidity: function addSequencerL2BatchFromOrigin(uint256 , bytes , uint256 , address ) pure returns() +func (_SequencerInboxStub *SequencerInboxStubCallerSession) AddSequencerL2BatchFromOrigin(arg0 *big.Int, arg1 []byte, arg2 *big.Int, arg3 common.Address) error { + return _SequencerInboxStub.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInboxStub.CallOpts, arg0, arg1, arg2, arg3) +} + +// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// +// Solidity: function batchCount() view returns(uint256) +func (_SequencerInboxStub *SequencerInboxStubCaller) BatchCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "batchCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// +// Solidity: function batchCount() view returns(uint256) +func (_SequencerInboxStub *SequencerInboxStubSession) BatchCount() (*big.Int, error) { + return _SequencerInboxStub.Contract.BatchCount(&_SequencerInboxStub.CallOpts) +} + +// BatchCount is a free data retrieval call binding the contract method 0x06f13056. +// +// Solidity: function batchCount() view returns(uint256) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) BatchCount() (*big.Int, error) { + return _SequencerInboxStub.Contract.BatchCount(&_SequencerInboxStub.CallOpts) +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCaller) BatchPosterManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "batchPosterManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubSession) BatchPosterManager() (common.Address, error) { + return _SequencerInboxStub.Contract.BatchPosterManager(&_SequencerInboxStub.CallOpts) +} + +// BatchPosterManager is a free data retrieval call binding the contract method 0xcc2a1a0c. +// +// Solidity: function batchPosterManager() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) BatchPosterManager() (common.Address, error) { + return _SequencerInboxStub.Contract.BatchPosterManager(&_SequencerInboxStub.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubSession) Bridge() (common.Address, error) { + return _SequencerInboxStub.Contract.Bridge(&_SequencerInboxStub.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) Bridge() (common.Address, error) { + return _SequencerInboxStub.Contract.Bridge(&_SequencerInboxStub.CallOpts) +} + +// DasKeySetInfo is a free data retrieval call binding the contract method 0x715ea34b. +// +// Solidity: function dasKeySetInfo(bytes32 ) view returns(bool isValidKeyset, uint64 creationBlock) +func (_SequencerInboxStub *SequencerInboxStubCaller) DasKeySetInfo(opts *bind.CallOpts, arg0 [32]byte) (struct { + IsValidKeyset bool + CreationBlock uint64 +}, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "dasKeySetInfo", arg0) + + outstruct := new(struct { + IsValidKeyset bool + CreationBlock uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.IsValidKeyset = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.CreationBlock = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err } @@ -6410,6 +7084,37 @@ func (_SequencerInboxStub *SequencerInboxStubCallerSession) IsSequencer(arg0 com return _SequencerInboxStub.Contract.IsSequencer(&_SequencerInboxStub.CallOpts, arg0) } +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInboxStub *SequencerInboxStubCaller) IsUsingFeeToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "isUsingFeeToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInboxStub *SequencerInboxStubSession) IsUsingFeeToken() (bool, error) { + return _SequencerInboxStub.Contract.IsUsingFeeToken(&_SequencerInboxStub.CallOpts) +} + +// IsUsingFeeToken is a free data retrieval call binding the contract method 0x92d9f782. +// +// Solidity: function isUsingFeeToken() view returns(bool) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) IsUsingFeeToken() (bool, error) { + return _SequencerInboxStub.Contract.IsUsingFeeToken(&_SequencerInboxStub.CallOpts) +} + // IsValidKeysetHash is a free data retrieval call binding the contract method 0x1637be48. // // Solidity: function isValidKeysetHash(bytes32 ksHash) view returns(bool) @@ -6474,59 +7179,69 @@ func (_SequencerInboxStub *SequencerInboxStubCallerSession) MaxDataSize() (*big. // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInboxStub *SequencerInboxStubCaller) MaxTimeVariation(opts *bind.CallOpts) (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInboxStub *SequencerInboxStubCaller) MaxTimeVariation(opts *bind.CallOpts) (*big.Int, *big.Int, *big.Int, *big.Int, error) { var out []interface{} err := _SequencerInboxStub.contract.Call(opts, &out, "maxTimeVariation") - outstruct := new(struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int - }) if err != nil { - return *outstruct, err + return *new(*big.Int), *new(*big.Int), *new(*big.Int), *new(*big.Int), err } - outstruct.DelayBlocks = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.FutureBlocks = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - outstruct.DelaySeconds = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - outstruct.FutureSeconds = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) - return *outstruct, err + return out0, out1, out2, out3, err } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInboxStub *SequencerInboxStubSession) MaxTimeVariation() (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInboxStub *SequencerInboxStubSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { return _SequencerInboxStub.Contract.MaxTimeVariation(&_SequencerInboxStub.CallOpts) } // MaxTimeVariation is a free data retrieval call binding the contract method 0xebea461d. // -// Solidity: function maxTimeVariation() view returns(uint256 delayBlocks, uint256 futureBlocks, uint256 delaySeconds, uint256 futureSeconds) -func (_SequencerInboxStub *SequencerInboxStubCallerSession) MaxTimeVariation() (struct { - DelayBlocks *big.Int - FutureBlocks *big.Int - DelaySeconds *big.Int - FutureSeconds *big.Int -}, error) { +// Solidity: function maxTimeVariation() view returns(uint256, uint256, uint256, uint256) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) MaxTimeVariation() (*big.Int, *big.Int, *big.Int, *big.Int, error) { return _SequencerInboxStub.Contract.MaxTimeVariation(&_SequencerInboxStub.CallOpts) } +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCaller) Reader4844(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerInboxStub.contract.Call(opts, &out, "reader4844") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubSession) Reader4844() (common.Address, error) { + return _SequencerInboxStub.Contract.Reader4844(&_SequencerInboxStub.CallOpts) +} + +// Reader4844 is a free data retrieval call binding the contract method 0x8d910dde. +// +// Solidity: function reader4844() view returns(address) +func (_SequencerInboxStub *SequencerInboxStubCallerSession) Reader4844() (common.Address, error) { + return _SequencerInboxStub.Contract.Reader4844(&_SequencerInboxStub.CallOpts) +} + // Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. // // Solidity: function rollup() view returns(address) @@ -6631,25 +7346,25 @@ func (_SequencerInboxStub *SequencerInboxStubTransactorSession) AddSequencerL2Ba return _SequencerInboxStub.Contract.AddSequencerL2Batch(&_SequencerInboxStub.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInboxStub *SequencerInboxStubTransactor) AddSequencerL2BatchFromOrigin(opts *bind.TransactOpts, sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInboxStub.contract.Transact(opts, "addSequencerL2BatchFromOrigin", sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInboxStub *SequencerInboxStubTransactor) AddSequencerL2BatchFromBlobs(opts *bind.TransactOpts, sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInboxStub.contract.Transact(opts, "addSequencerL2BatchFromBlobs", sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInboxStub *SequencerInboxStubSession) AddSequencerL2BatchFromOrigin(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInboxStub.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInboxStub.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInboxStub *SequencerInboxStubSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInboxStub.Contract.AddSequencerL2BatchFromBlobs(&_SequencerInboxStub.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } -// AddSequencerL2BatchFromOrigin is a paid mutator transaction binding the contract method 0x6f12b0c9. +// AddSequencerL2BatchFromBlobs is a paid mutator transaction binding the contract method 0x3e5aa082. // -// Solidity: function addSequencerL2BatchFromOrigin(uint256 sequenceNumber, bytes data, uint256 afterDelayedMessagesRead, address gasRefunder) returns() -func (_SequencerInboxStub *SequencerInboxStubTransactorSession) AddSequencerL2BatchFromOrigin(sequenceNumber *big.Int, data []byte, afterDelayedMessagesRead *big.Int, gasRefunder common.Address) (*types.Transaction, error) { - return _SequencerInboxStub.Contract.AddSequencerL2BatchFromOrigin(&_SequencerInboxStub.TransactOpts, sequenceNumber, data, afterDelayedMessagesRead, gasRefunder) +// Solidity: function addSequencerL2BatchFromBlobs(uint256 sequenceNumber, uint256 afterDelayedMessagesRead, address gasRefunder, uint256 prevMessageCount, uint256 newMessageCount) returns() +func (_SequencerInboxStub *SequencerInboxStubTransactorSession) AddSequencerL2BatchFromBlobs(sequenceNumber *big.Int, afterDelayedMessagesRead *big.Int, gasRefunder common.Address, prevMessageCount *big.Int, newMessageCount *big.Int) (*types.Transaction, error) { + return _SequencerInboxStub.Contract.AddSequencerL2BatchFromBlobs(&_SequencerInboxStub.TransactOpts, sequenceNumber, afterDelayedMessagesRead, gasRefunder, prevMessageCount, newMessageCount) } // AddSequencerL2BatchFromOrigin0 is a paid mutator transaction binding the contract method 0x8f111f3c. @@ -6736,6 +7451,27 @@ func (_SequencerInboxStub *SequencerInboxStubTransactorSession) InvalidateKeyset return _SequencerInboxStub.Contract.InvalidateKeysetHash(&_SequencerInboxStub.TransactOpts, ksHash) } +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInboxStub *SequencerInboxStubTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerInboxStub.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInboxStub *SequencerInboxStubSession) PostUpgradeInit() (*types.Transaction, error) { + return _SequencerInboxStub.Contract.PostUpgradeInit(&_SequencerInboxStub.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_SequencerInboxStub *SequencerInboxStubTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _SequencerInboxStub.Contract.PostUpgradeInit(&_SequencerInboxStub.TransactOpts) +} + // RemoveDelayAfterFork is a paid mutator transaction binding the contract method 0x96cc5c78. // // Solidity: function removeDelayAfterFork() returns() @@ -6757,6 +7493,27 @@ func (_SequencerInboxStub *SequencerInboxStubTransactorSession) RemoveDelayAfter return _SequencerInboxStub.Contract.RemoveDelayAfterFork(&_SequencerInboxStub.TransactOpts) } +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInboxStub *SequencerInboxStubTransactor) SetBatchPosterManager(opts *bind.TransactOpts, newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInboxStub.contract.Transact(opts, "setBatchPosterManager", newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInboxStub *SequencerInboxStubSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInboxStub.Contract.SetBatchPosterManager(&_SequencerInboxStub.TransactOpts, newBatchPosterManager) +} + +// SetBatchPosterManager is a paid mutator transaction binding the contract method 0x1ff64790. +// +// Solidity: function setBatchPosterManager(address newBatchPosterManager) returns() +func (_SequencerInboxStub *SequencerInboxStubTransactorSession) SetBatchPosterManager(newBatchPosterManager common.Address) (*types.Transaction, error) { + return _SequencerInboxStub.Contract.SetBatchPosterManager(&_SequencerInboxStub.TransactOpts, newBatchPosterManager) +} + // SetIsBatchPoster is a paid mutator transaction binding the contract method 0x6e7df3e7. // // Solidity: function setIsBatchPoster(address addr, bool isBatchPoster_) returns() @@ -7658,7 +8415,7 @@ type SequencerInboxStubSequencerBatchDelivered struct { AfterAcc [32]byte DelayedAcc [32]byte AfterDelayedMessagesRead *big.Int - TimeBounds ISequencerInboxTimeBounds + TimeBounds IBridgeTimeBounds DataLocation uint8 Raw types.Log // Blockchain specific contextual infos } @@ -7897,8 +8654,8 @@ func (_SequencerInboxStub *SequencerInboxStubFilterer) ParseSetValidKeyset(log t // SimpleMetaData contains all meta data concerning the Simple contract. var SimpleMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"CounterEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"NullEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"}],\"name\":\"RedeemedEvent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkBlockHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useTopLevel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"directCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"staticCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"delegateCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"callcodeCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"callCase\",\"type\":\"bool\"}],\"name\":\"checkCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useTopLevel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"expected\",\"type\":\"bool\"}],\"name\":\"checkIsTopLevelOrWasAliased\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNullEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementRedeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"noop\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pleaseRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610cc5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80635dfc2e4a11610081578063b226a9641161005b578063b226a96414610145578063d09de08a1461014d578063ded5ecad1461015557600080fd5b80635dfc2e4a146100d657806361bc221a146101105780639ff5ccac1461013d57600080fd5b806312e05dd1116100b257806312e05dd1146100e057806344c25fba146100f55780635677c11e1461010857600080fd5b806305795f73146100ce5780630e8c389f146100d8575b600080fd5b6100d6610168565b005b6100d66101b5565b445b6040519081526020015b60405180910390f35b6100d6610103366004610adc565b6103c5565b6100e2610868565b6000546101249067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ec565b6100d66108d4565b6100d6610943565b6100d661096e565b6100d6610163366004610b5e565b6109b0565b60405162461bcd60e51b815260206004820152601260248201527f534f4c49444954595f524556455254494e47000000000000000000000000000060448201526064015b60405180910390fd5b3332146102045760405162461bcd60e51b815260206004820152601160248201527f53454e4445525f4e4f545f4f524947494e00000000000000000000000000000060448201526064016101ac565b606473ffffffffffffffffffffffffffffffffffffffff1663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102749190610b97565b6102c05760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f414c494153454400000000000000000000000000000000000000000060448201526064016101ac565b6000805467ffffffffffffffff1690806102d983610bea565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550507f773c78bf96e65f61c1a2622b47d76e78bfe70dd59cf4f11470c4c121c315941333606e73ffffffffffffffffffffffffffffffffffffffff1663de4ba2b36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561036e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103929190610c11565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390a1565b851561049257841515606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043e9190610b97565b15151461048d5760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c5400000000000000000000000000000060448201526064016101ac565b610554565b841515606473ffffffffffffffffffffffffffffffffffffffff1663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105059190610b97565b1515146105545760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c5400000000000000000000000000000060448201526064016101ac565b60405163ded5ecad60e01b815286151560048201528415156024820152309063ded5ecad9060440160006040518083038186803b15801561059457600080fd5b505afa1580156105a8573d6000803e3d6000fd5b505060408051891515602482015286151560448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b1790529051909250600091503090610618908490610c47565b600060405180830381855af49150503d8060008114610653576040519150601f19603f3d011682016040523d82523d6000602084013e610658565b606091505b50509050806106a95760405162461bcd60e51b815260206004820152601460248201527f44454c45474154455f43414c4c5f4641494c454400000000000000000000000060448201526064016101ac565b6040805189151560248201528515156044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b1781528151919350600091829182305af290508061075f5760405162461bcd60e51b815260206004820152600f60248201527f43414c4c434f44455f4641494c4544000000000000000000000000000000000060448201526064016101ac565b60408051891515602482015284151560448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b179052905190925030906107c9908490610c47565b6000604051808303816000865af19150503d8060008114610806576040519150601f19603f3d011682016040523d82523d6000602084013e61080b565b606091505b5050809150508061085e5760405162461bcd60e51b815260206004820152600b60248201527f43414c4c5f4641494c454400000000000000000000000000000000000000000060448201526064016101ac565b5050505050505050565b6000610875600243610c76565b40610881600143610c76565b40036108cf5760405162461bcd60e51b815260206004820152600f60248201527f53414d455f424c4f434b5f48415348000000000000000000000000000000000060448201526064016101ac565b504390565b6000805467ffffffffffffffff1690806108ed83610bea565b82546101009290920a67ffffffffffffffff818102199093169183160217909155600054604051911681527fa45d7e79cb3c6044f30c8dd891e6571301d6b8b6618df519c987905ec70742e791506020016103bb565b6040517f6f59c82101949290205a9ae9d0c657e6dae1a71c301ae76d385c2792294585fe90600090a1565b6000805467ffffffffffffffff16908061098783610bea565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b8115610a7c57801515606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a299190610b97565b151514610a785760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c5400000000000000000000000000000060448201526064016101ac565b5050565b801515606473ffffffffffffffffffffffffffffffffffffffff1663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a05573d6000803e3d6000fd5b8015158114610ad957600080fd5b50565b60008060008060008060c08789031215610af557600080fd5b8635610b0081610acb565b95506020870135610b1081610acb565b94506040870135610b2081610acb565b93506060870135610b3081610acb565b92506080870135610b4081610acb565b915060a0870135610b5081610acb565b809150509295509295509295565b60008060408385031215610b7157600080fd5b8235610b7c81610acb565b91506020830135610b8c81610acb565b809150509250929050565b600060208284031215610ba957600080fd5b8151610bb481610acb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103610c0757610c07610bbb565b6001019392505050565b600060208284031215610c2357600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114610bb457600080fd5b6000825160005b81811015610c685760208186018101518583015201610c4e565b506000920191825250919050565b81810381811115610c8957610c89610bbb565b9291505056fea26469706673582212208a01c3eb4bf7ce53cdb77b91c7953601bd35e32c3907b2b5be380678ee6ada4464736f6c63430008110033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"CounterEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"have\",\"type\":\"uint256\"}],\"name\":\"LogAndIncrementCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"NullEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"}],\"name\":\"RedeemedEvent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkBlockHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useTopLevel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"directCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"staticCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"delegateCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"callcodeCase\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"callCase\",\"type\":\"bool\"}],\"name\":\"checkCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"checkGasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useTopLevel\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"expected\",\"type\":\"bool\"}],\"name\":\"checkIsTopLevelOrWasAliased\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"difficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNullEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementRedeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"logAndIncrement\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"noop\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pleaseRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"batchData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"numberToPost\",\"type\":\"uint256\"}],\"name\":\"postManyBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storeDifficulty\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506111e4806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806361bc221a11610097578063b226a96411610066578063b226a964146101c0578063cff36f2d146101c8578063d09de08a146101d1578063ded5ecad146101d957600080fd5b806361bc221a146101655780638a390877146101925780639ff5ccac146101a5578063b1948fc3146101ad57600080fd5b80631a2f8a92116100d35780631a2f8a921461013757806344c25fba1461014a5780635677c11e1461015d5780635dfc2e4a1461010d57600080fd5b806305795f73146101055780630e8c389f1461010f57806312e05dd11461011757806319cae4621461012e575b600080fd5b61010d6101ec565b005b61010d610239565b6001545b6040519081526020015b60405180910390f35b61011b60015481565b61011b610145366004610d9b565b610422565b61010d610158366004610e2e565b6104a6565b61011b61092f565b6000546101799067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610125565b61010d6101a0366004610eb0565b61099b565b61010d610a24565b61010d6101bb366004610ef8565b610a93565b61010d610c15565b61010d44600155565b61010d610c40565b61010d6101e7366004610fc5565b610c82565b60405162461bcd60e51b815260206004820152601260248201527f534f4c49444954595f524556455254494e47000000000000000000000000000060448201526064015b60405180910390fd5b3332146102885760405162461bcd60e51b815260206004820152601160248201527f53454e4445525f4e4f545f4f524947494e0000000000000000000000000000006044820152606401610230565b60646001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102eb9190610ffe565b6103375760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f414c49415345440000000000000000000000000000000000000000006044820152606401610230565b6000805467ffffffffffffffff16908061035083611051565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550507f773c78bf96e65f61c1a2622b47d76e78bfe70dd59cf4f11470c4c121c315941333606e6001600160a01b031663de4ba2b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fc9190611078565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1565b6000805a90506001600160a01b03851661043e61271083611095565b858560405161044e9291906110ae565b6000604051808303818686fa925050503d806000811461048a576040519150601f19603f3d011682016040523d82523d6000602084013e61048f565b606091505b5050505a61049d9082611095565b95945050505050565b85156105665784151560646001600160a01b03166308bd624c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190610ffe565b1515146105615760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c540000000000000000000000000000006044820152606401610230565b61061b565b84151560646001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cc9190610ffe565b15151461061b5760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c540000000000000000000000000000006044820152606401610230565b60405163ded5ecad60e01b815286151560048201528415156024820152309063ded5ecad9060440160006040518083038186803b15801561065b57600080fd5b505afa15801561066f573d6000803e3d6000fd5b505060408051891515602482015286151560448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b17905290519092506000915030906106df9084906110e2565b600060405180830381855af49150503d806000811461071a576040519150601f19603f3d011682016040523d82523d6000602084013e61071f565b606091505b50509050806107705760405162461bcd60e51b815260206004820152601460248201527f44454c45474154455f43414c4c5f4641494c45440000000000000000000000006044820152606401610230565b6040805189151560248201528515156044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b1781528151919350600091829182305af29050806108265760405162461bcd60e51b815260206004820152600f60248201527f43414c4c434f44455f4641494c454400000000000000000000000000000000006044820152606401610230565b60408051891515602482015284151560448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663ded5ecad60e01b179052905190925030906108909084906110e2565b6000604051808303816000865af19150503d80600081146108cd576040519150601f19603f3d011682016040523d82523d6000602084013e6108d2565b606091505b505080915050806109255760405162461bcd60e51b815260206004820152600b60248201527f43414c4c5f4641494c45440000000000000000000000000000000000000000006044820152606401610230565b5050505050505050565b600061093c600243611095565b40610948600143611095565b40036109965760405162461bcd60e51b815260206004820152600f60248201527f53414d455f424c4f434b5f4841534800000000000000000000000000000000006044820152606401610230565b504390565b6000546040805183815267ffffffffffffffff90921660208301527f8df8e492f407b078593c5d8fd7e65ef68505999d911d5b99b017c0b7077398b9910160405180910390a16000805467ffffffffffffffff1690806109fa83611051565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000805467ffffffffffffffff169080610a3d83611051565b82546101009290920a67ffffffffffffffff818102199093169183160217909155600054604051911681527fa45d7e79cb3c6044f30c8dd891e6571301d6b8b6618df519c987905ec70742e79150602001610418565b6000836001600160a01b03166306f130566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af791906110fe565b90506000846001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d91906110fe565b905060005b83811015610c0d576040517fe0bc97290000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063e0bc972990610bba9086908990879060009081908190600401611117565b600060405180830381600087803b158015610bd457600080fd5b505af1158015610be8573d6000803e3d6000fd5b505050508280610bf790611176565b9350508080610c0590611176565b915050610b62565b505050505050565b6040517f6f59c82101949290205a9ae9d0c657e6dae1a71c301ae76d385c2792294585fe90600090a1565b6000805467ffffffffffffffff169080610c5983611051565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b8115610d415780151560646001600160a01b03166308bd624c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190610ffe565b151514610d3d5760405162461bcd60e51b815260206004820152601160248201527f554e45585045435445445f524553554c540000000000000000000000000000006044820152606401610230565b5050565b80151560646001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cca573d6000803e3d6000fd5b6001600160a01b0381168114610d9857600080fd5b50565b600080600060408486031215610db057600080fd5b8335610dbb81610d83565b9250602084013567ffffffffffffffff80821115610dd857600080fd5b818601915086601f830112610dec57600080fd5b813581811115610dfb57600080fd5b876020828501011115610e0d57600080fd5b6020830194508093505050509250925092565b8015158114610d9857600080fd5b60008060008060008060c08789031215610e4757600080fd5b8635610e5281610e20565b95506020870135610e6281610e20565b94506040870135610e7281610e20565b93506060870135610e8281610e20565b92506080870135610e9281610e20565b915060a0870135610ea281610e20565b809150509295509295509295565b600060208284031215610ec257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610f0d57600080fd5b8335610f1881610d83565b9250602084013567ffffffffffffffff80821115610f3557600080fd5b818601915086601f830112610f4957600080fd5b813581811115610f5b57610f5b610ec9565b604051601f8201601f19908116603f01168101908382118183101715610f8357610f83610ec9565b81604052828152896020848701011115610f9c57600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b60008060408385031215610fd857600080fd5b8235610fe381610e20565b91506020830135610ff381610e20565b809150509250929050565b60006020828403121561101057600080fd5b815161101b81610e20565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361106e5761106e611022565b6001019392505050565b60006020828403121561108a57600080fd5b815161101b81610d83565b818103818111156110a8576110a8611022565b92915050565b8183823760009101908152919050565b60005b838110156110d95781810151838201526020016110c1565b50506000910152565b600082516110f48184602087016110be565b9190910192915050565b60006020828403121561111057600080fd5b5051919050565b86815260c06020820152600086518060c084015261113c8160e0850160208b016110be565b6040830196909652506001600160a01b03939093166060840152608083019190915260a082015260e0601f909201601f1916010192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111a7576111a7611022565b506001019056fea26469706673582212202937b5747d1f7bec36bf7448e01b70896189ef47fd509e9b3467b1bf359ea2aa64736f6c63430008110033", } // SimpleABI is the input ABI used to generate the binding from. @@ -8099,6 +8856,37 @@ func (_Simple *SimpleCallerSession) CheckBlockHashes() (*big.Int, error) { return _Simple.Contract.CheckBlockHashes(&_Simple.CallOpts) } +// CheckGasUsed is a free data retrieval call binding the contract method 0x1a2f8a92. +// +// Solidity: function checkGasUsed(address to, bytes input) view returns(uint256) +func (_Simple *SimpleCaller) CheckGasUsed(opts *bind.CallOpts, to common.Address, input []byte) (*big.Int, error) { + var out []interface{} + err := _Simple.contract.Call(opts, &out, "checkGasUsed", to, input) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CheckGasUsed is a free data retrieval call binding the contract method 0x1a2f8a92. +// +// Solidity: function checkGasUsed(address to, bytes input) view returns(uint256) +func (_Simple *SimpleSession) CheckGasUsed(to common.Address, input []byte) (*big.Int, error) { + return _Simple.Contract.CheckGasUsed(&_Simple.CallOpts, to, input) +} + +// CheckGasUsed is a free data retrieval call binding the contract method 0x1a2f8a92. +// +// Solidity: function checkGasUsed(address to, bytes input) view returns(uint256) +func (_Simple *SimpleCallerSession) CheckGasUsed(to common.Address, input []byte) (*big.Int, error) { + return _Simple.Contract.CheckGasUsed(&_Simple.CallOpts, to, input) +} + // CheckIsTopLevelOrWasAliased is a free data retrieval call binding the contract method 0xded5ecad. // // Solidity: function checkIsTopLevelOrWasAliased(bool useTopLevel, bool expected) view returns() @@ -8159,6 +8947,37 @@ func (_Simple *SimpleCallerSession) Counter() (uint64, error) { return _Simple.Contract.Counter(&_Simple.CallOpts) } +// Difficulty is a free data retrieval call binding the contract method 0x19cae462. +// +// Solidity: function difficulty() view returns(uint256) +func (_Simple *SimpleCaller) Difficulty(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Simple.contract.Call(opts, &out, "difficulty") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Difficulty is a free data retrieval call binding the contract method 0x19cae462. +// +// Solidity: function difficulty() view returns(uint256) +func (_Simple *SimpleSession) Difficulty() (*big.Int, error) { + return _Simple.Contract.Difficulty(&_Simple.CallOpts) +} + +// Difficulty is a free data retrieval call binding the contract method 0x19cae462. +// +// Solidity: function difficulty() view returns(uint256) +func (_Simple *SimpleCallerSession) Difficulty() (*big.Int, error) { + return _Simple.Contract.Difficulty(&_Simple.CallOpts) +} + // GetBlockDifficulty is a free data retrieval call binding the contract method 0x12e05dd1. // // Solidity: function getBlockDifficulty() view returns(uint256) @@ -8353,6 +9172,69 @@ func (_Simple *SimpleTransactorSession) IncrementRedeem() (*types.Transaction, e return _Simple.Contract.IncrementRedeem(&_Simple.TransactOpts) } +// LogAndIncrement is a paid mutator transaction binding the contract method 0x8a390877. +// +// Solidity: function logAndIncrement(uint256 expected) returns() +func (_Simple *SimpleTransactor) LogAndIncrement(opts *bind.TransactOpts, expected *big.Int) (*types.Transaction, error) { + return _Simple.contract.Transact(opts, "logAndIncrement", expected) +} + +// LogAndIncrement is a paid mutator transaction binding the contract method 0x8a390877. +// +// Solidity: function logAndIncrement(uint256 expected) returns() +func (_Simple *SimpleSession) LogAndIncrement(expected *big.Int) (*types.Transaction, error) { + return _Simple.Contract.LogAndIncrement(&_Simple.TransactOpts, expected) +} + +// LogAndIncrement is a paid mutator transaction binding the contract method 0x8a390877. +// +// Solidity: function logAndIncrement(uint256 expected) returns() +func (_Simple *SimpleTransactorSession) LogAndIncrement(expected *big.Int) (*types.Transaction, error) { + return _Simple.Contract.LogAndIncrement(&_Simple.TransactOpts, expected) +} + +// PostManyBatches is a paid mutator transaction binding the contract method 0xb1948fc3. +// +// Solidity: function postManyBatches(address sequencerInbox, bytes batchData, uint256 numberToPost) returns() +func (_Simple *SimpleTransactor) PostManyBatches(opts *bind.TransactOpts, sequencerInbox common.Address, batchData []byte, numberToPost *big.Int) (*types.Transaction, error) { + return _Simple.contract.Transact(opts, "postManyBatches", sequencerInbox, batchData, numberToPost) +} + +// PostManyBatches is a paid mutator transaction binding the contract method 0xb1948fc3. +// +// Solidity: function postManyBatches(address sequencerInbox, bytes batchData, uint256 numberToPost) returns() +func (_Simple *SimpleSession) PostManyBatches(sequencerInbox common.Address, batchData []byte, numberToPost *big.Int) (*types.Transaction, error) { + return _Simple.Contract.PostManyBatches(&_Simple.TransactOpts, sequencerInbox, batchData, numberToPost) +} + +// PostManyBatches is a paid mutator transaction binding the contract method 0xb1948fc3. +// +// Solidity: function postManyBatches(address sequencerInbox, bytes batchData, uint256 numberToPost) returns() +func (_Simple *SimpleTransactorSession) PostManyBatches(sequencerInbox common.Address, batchData []byte, numberToPost *big.Int) (*types.Transaction, error) { + return _Simple.Contract.PostManyBatches(&_Simple.TransactOpts, sequencerInbox, batchData, numberToPost) +} + +// StoreDifficulty is a paid mutator transaction binding the contract method 0xcff36f2d. +// +// Solidity: function storeDifficulty() returns() +func (_Simple *SimpleTransactor) StoreDifficulty(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Simple.contract.Transact(opts, "storeDifficulty") +} + +// StoreDifficulty is a paid mutator transaction binding the contract method 0xcff36f2d. +// +// Solidity: function storeDifficulty() returns() +func (_Simple *SimpleSession) StoreDifficulty() (*types.Transaction, error) { + return _Simple.Contract.StoreDifficulty(&_Simple.TransactOpts) +} + +// StoreDifficulty is a paid mutator transaction binding the contract method 0xcff36f2d. +// +// Solidity: function storeDifficulty() returns() +func (_Simple *SimpleTransactorSession) StoreDifficulty() (*types.Transaction, error) { + return _Simple.Contract.StoreDifficulty(&_Simple.TransactOpts) +} + // SimpleCounterEventIterator is returned from FilterCounterEvent and is used to iterate over the raw logs and unpacked data for CounterEvent events raised by the Simple contract. type SimpleCounterEventIterator struct { Event *SimpleCounterEvent // Event containing the contract specifics and raw log @@ -8487,9 +9369,144 @@ func (_Simple *SimpleFilterer) ParseCounterEvent(log types.Log) (*SimpleCounterE return event, nil } -// SimpleNullEventIterator is returned from FilterNullEvent and is used to iterate over the raw logs and unpacked data for NullEvent events raised by the Simple contract. -type SimpleNullEventIterator struct { - Event *SimpleNullEvent // Event containing the contract specifics and raw log +// SimpleLogAndIncrementCalledIterator is returned from FilterLogAndIncrementCalled and is used to iterate over the raw logs and unpacked data for LogAndIncrementCalled events raised by the Simple contract. +type SimpleLogAndIncrementCalledIterator struct { + Event *SimpleLogAndIncrementCalled // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SimpleLogAndIncrementCalledIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SimpleLogAndIncrementCalled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SimpleLogAndIncrementCalled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SimpleLogAndIncrementCalledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SimpleLogAndIncrementCalledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SimpleLogAndIncrementCalled represents a LogAndIncrementCalled event raised by the Simple contract. +type SimpleLogAndIncrementCalled struct { + Expected *big.Int + Have *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterLogAndIncrementCalled is a free log retrieval operation binding the contract event 0x8df8e492f407b078593c5d8fd7e65ef68505999d911d5b99b017c0b7077398b9. +// +// Solidity: event LogAndIncrementCalled(uint256 expected, uint256 have) +func (_Simple *SimpleFilterer) FilterLogAndIncrementCalled(opts *bind.FilterOpts) (*SimpleLogAndIncrementCalledIterator, error) { + + logs, sub, err := _Simple.contract.FilterLogs(opts, "LogAndIncrementCalled") + if err != nil { + return nil, err + } + return &SimpleLogAndIncrementCalledIterator{contract: _Simple.contract, event: "LogAndIncrementCalled", logs: logs, sub: sub}, nil +} + +// WatchLogAndIncrementCalled is a free log subscription operation binding the contract event 0x8df8e492f407b078593c5d8fd7e65ef68505999d911d5b99b017c0b7077398b9. +// +// Solidity: event LogAndIncrementCalled(uint256 expected, uint256 have) +func (_Simple *SimpleFilterer) WatchLogAndIncrementCalled(opts *bind.WatchOpts, sink chan<- *SimpleLogAndIncrementCalled) (event.Subscription, error) { + + logs, sub, err := _Simple.contract.WatchLogs(opts, "LogAndIncrementCalled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SimpleLogAndIncrementCalled) + if err := _Simple.contract.UnpackLog(event, "LogAndIncrementCalled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseLogAndIncrementCalled is a log parse operation binding the contract event 0x8df8e492f407b078593c5d8fd7e65ef68505999d911d5b99b017c0b7077398b9. +// +// Solidity: event LogAndIncrementCalled(uint256 expected, uint256 have) +func (_Simple *SimpleFilterer) ParseLogAndIncrementCalled(log types.Log) (*SimpleLogAndIncrementCalled, error) { + event := new(SimpleLogAndIncrementCalled) + if err := _Simple.contract.UnpackLog(event, "LogAndIncrementCalled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SimpleNullEventIterator is returned from FilterNullEvent and is used to iterate over the raw logs and unpacked data for NullEvent events raised by the Simple contract. +type SimpleNullEventIterator struct { + Event *SimpleNullEvent // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -8758,7 +9775,7 @@ func (_Simple *SimpleFilterer) ParseRedeemedEvent(log types.Log) (*SimpleRedeeme // SimpleOneStepProofEntryMetaData contains all meta data concerning the SimpleOneStepProofEntry contract. var SimpleOneStepProofEntryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"STEPS_PER_BATCH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"execState\",\"type\":\"tuple\"}],\"name\":\"getMachineHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"execCtx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"step\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveOneStep\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"afterHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506108fa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80639c2009cd14610046578063b5112fd21461006d578063c39619c41461008e575b600080fd5b61004f6107d081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61008061007b3660046105ba565b6100a1565b604051908152602001610064565b61008061009c366004610656565b6103c5565b60008181036100f75760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f50524f4f4600000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6100ff610577565b600061010c8585836104eb565b602084015167ffffffffffffffff909216909152905061012d8585836104eb565b60208481015167ffffffffffffffff9093169201919091529050861580159061019657508560001a60f81b7fff00000000000000000000000000000000000000000000000000000000000000161580610196575061018a82610553565b67ffffffffffffffff16155b156101a55785925050506103bc565b87356101b083610569565b67ffffffffffffffff16106101c95785925050506103bc565b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d9092019052805191012086146102af5760405162461bcd60e51b815260206004820152600960248201527f4241445f50524f4f46000000000000000000000000000000000000000000000060448201526064016100ee565b602082810151018051906102c28261069a565b67ffffffffffffffff1690525060208281015101516102e4906107d0906106c1565b67ffffffffffffffff1660000361031f5760208201518051906103068261069a565b67ffffffffffffffff1690525060208281015160009101525b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d90920190528051910120925050505b95945050505050565b600060016103d960a084016080850161070c565b60028111156103ea576103ea6106f6565b146104375760405162461bcd60e51b815260206004820152601260248201527f4241445f4d414348494e455f535441545553000000000000000000000000000060448201526064016100ee565b6104e5610449368490038401846107f3565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b92915050565b600081815b600881101561054a5760088367ffffffffffffffff16901b925085858381811061051c5761051c61066e565b919091013560f81c939093179250816105348161088c565b92505080806105429061088c565b9150506104f0565b50935093915050565b602081015160009060015b602002015192915050565b60208101516000908161055e565b604051806040016040528061058a61059c565b815260200161059761059c565b905290565b60405180604001604052806002906020820280368337509192915050565b600080600080600085870360c08112156105d357600080fd5b60608112156105e157600080fd5b50859450606086013593506080860135925060a086013567ffffffffffffffff8082111561060e57600080fd5b818801915088601f83011261062257600080fd5b81358181111561063157600080fd5b89602082850101111561064357600080fd5b9699959850939650602001949392505050565b600060a0828403121561066857600080fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff8083168181036106b7576106b7610684565b6001019392505050565b600067ffffffffffffffff808416806106ea57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561071e57600080fd5b81356003811061072d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561076d5761076d610734565b60405290565b600082601f83011261078457600080fd5b6040516040810167ffffffffffffffff82821081831117156107a8576107a8610734565b604091825282918501868111156107be57600080fd5b855b818110156107e757803583811681146107d95760008081fd5b8452602093840193016107c0565b50929695505050505050565b60006080828403121561080557600080fd5b6040516040810181811067ffffffffffffffff8211171561082857610828610734565b604052601f8301841361083a57600080fd5b61084261074a565b80604085018681111561085457600080fd5b855b8181101561086e578035845260209384019301610856565b5081845261087c8782610773565b6020850152509195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036108bd576108bd610684565b506001019056fea2646970667358221220ccea4b8ccf2fd3f89a2dbae9da3137b9f9dee387f1d2f1b004862c6f5bf5e40a64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506108fa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80639c2009cd14610046578063b5112fd21461006d578063c39619c41461008e575b600080fd5b61004f6107d081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61008061007b3660046105ba565b6100a1565b604051908152602001610064565b61008061009c366004610656565b6103c5565b60008181036100f75760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f50524f4f4600000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6100ff610577565b600061010c8585836104eb565b602084015167ffffffffffffffff909216909152905061012d8585836104eb565b60208481015167ffffffffffffffff9093169201919091529050861580159061019657508560001a60f81b7fff00000000000000000000000000000000000000000000000000000000000000161580610196575061018a82610553565b67ffffffffffffffff16155b156101a55785925050506103bc565b87356101b083610569565b67ffffffffffffffff16106101c95785925050506103bc565b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d9092019052805191012086146102af5760405162461bcd60e51b815260206004820152600960248201527f4241445f50524f4f46000000000000000000000000000000000000000000000060448201526064016100ee565b602082810151018051906102c28261069a565b67ffffffffffffffff1690525060208281015101516102e4906107d0906106c1565b67ffffffffffffffff1660000361031f5760208201518051906103068261069a565b67ffffffffffffffff1690525060208281015160009101525b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d90920190528051910120925050505b95945050505050565b600060016103d960a084016080850161070c565b60028111156103ea576103ea6106f6565b146104375760405162461bcd60e51b815260206004820152601260248201527f4241445f4d414348494e455f535441545553000000000000000000000000000060448201526064016100ee565b6104e5610449368490038401846107f3565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b92915050565b600081815b600881101561054a5760088367ffffffffffffffff16901b925085858381811061051c5761051c61066e565b919091013560f81c939093179250816105348161088c565b92505080806105429061088c565b9150506104f0565b50935093915050565b602081015160009060015b602002015192915050565b60208101516000908161055e565b604051806040016040528061058a61059c565b815260200161059761059c565b905290565b60405180604001604052806002906020820280368337509192915050565b600080600080600085870360c08112156105d357600080fd5b60608112156105e157600080fd5b50859450606086013593506080860135925060a086013567ffffffffffffffff8082111561060e57600080fd5b818801915088601f83011261062257600080fd5b81358181111561063157600080fd5b89602082850101111561064357600080fd5b9699959850939650602001949392505050565b600060a0828403121561066857600080fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff8083168181036106b7576106b7610684565b6001019392505050565b600067ffffffffffffffff808416806106ea57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561071e57600080fd5b81356003811061072d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561076d5761076d610734565b60405290565b600082601f83011261078457600080fd5b6040516040810167ffffffffffffffff82821081831117156107a8576107a8610734565b604091825282918501868111156107be57600080fd5b855b818110156107e757803583811681146107d95760008081fd5b8452602093840193016107c0565b50929695505050505050565b60006080828403121561080557600080fd5b6040516040810181811067ffffffffffffffff8211171561082857610828610734565b604052601f8301841361083a57600080fd5b61084261074a565b80604085018681111561085457600080fd5b855b8181101561086e578035845260209384019301610856565b5081845261087c8782610773565b6020850152509195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036108bd576108bd610684565b506001019056fea264697066735822122038922d65eb9b59c9981103c729fc6efc6e92f391f036569dcfa7b8926b387c8b64736f6c63430008110033", } // SimpleOneStepProofEntryABI is the input ABI used to generate the binding from. @@ -9024,7 +10041,7 @@ func (_SimpleOneStepProofEntry *SimpleOneStepProofEntryCallerSession) ProveOneSt // SimpleProxyMetaData contains all meta data concerning the SimpleProxy contract. var SimpleProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161011d38038061011d83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051609561008860003960006017015260956000f3fe608060405236601057600e6013565b005b600e5b603a7f0000000000000000000000000000000000000000000000000000000000000000603c565b565b3660008037600080366000845af43d6000803e808015605a573d6000f35b3d6000fdfea2646970667358221220f7a591d7c78165ab26b2469cfd455a69fb64ba59095a2cbc0894e967d0b3c6dc64736f6c63430008110033", + Bin: "0x60a060405234801561001057600080fd5b5060405161011d38038061011d83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051609561008860003960006017015260956000f3fe608060405236601057600e6013565b005b600e5b603a7f0000000000000000000000000000000000000000000000000000000000000000603c565b565b3660008037600080366000845af43d6000803e808015605a573d6000f35b3d6000fdfea264697066735822122065e1224d690bac6df0886c1fe017c80772ed1b674f697f11e0bf9ae9563587e764736f6c63430008110033", } // SimpleProxyABI is the input ABI used to generate the binding from. @@ -9239,7 +10256,7 @@ func (_SimpleProxy *SimpleProxyTransactorSession) Receive() (*types.Transaction, // SingleExecutionChallengeMetaData contains all meta data concerning the SingleExecutionChallenge contract. var SingleExecutionChallengeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp_\",\"type\":\"address\"},{\"internalType\":\"contractIOldChallengeResultReceiver\",\"name\":\"resultReceiver_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxInboxMessagesRead_\",\"type\":\"uint64\"},{\"internalType\":\"bytes32[2]\",\"name\":\"startAndEndHashes\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"numSteps_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asserter_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"asserterTimeLeft_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengerTimeLeft_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"challengeRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengedSegmentStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengedSegmentLength\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"chainHashes\",\"type\":\"bytes32[]\"}],\"name\":\"Bisected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"enumIOldChallengeManager.ChallengeTerminationType\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"ChallengeEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockSteps\",\"type\":\"uint256\"}],\"name\":\"ExecutionChallengeBegun\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"indexed\":false,\"internalType\":\"structGlobalState\",\"name\":\"startState\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"indexed\":false,\"internalType\":\"structGlobalState\",\"name\":\"endState\",\"type\":\"tuple\"}],\"name\":\"InitiatedChallenge\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"OneStepProofCompleted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"newSegments\",\"type\":\"bytes32[]\"}],\"name\":\"bisectExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus[2]\",\"name\":\"machineStatuses\",\"type\":\"uint8[2]\"},{\"internalType\":\"bytes32[2]\",\"name\":\"globalStateHashes\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"numSteps\",\"type\":\"uint256\"}],\"name\":\"challengeExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"challengeInfo\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"current\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"next\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastMoveTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"maxInboxMessages\",\"type\":\"uint64\"},{\"internalType\":\"enumOldChallengeLib.ChallengeMode\",\"name\":\"mode\",\"type\":\"uint8\"}],\"internalType\":\"structOldChallengeLib.Challenge\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"current\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeLeft\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.Participant\",\"name\":\"next\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastMoveTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"maxInboxMessages\",\"type\":\"uint64\"},{\"internalType\":\"enumOldChallengeLib.ChallengeMode\",\"name\":\"mode\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"clearChallenge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot_\",\"type\":\"bytes32\"},{\"internalType\":\"enumMachineStatus[2]\",\"name\":\"startAndEndMachineStatuses_\",\"type\":\"uint8[2]\"},{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState[2]\",\"name\":\"startAndEndGlobalStates_\",\"type\":\"tuple[2]\"},{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"asserter_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challenger_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"asserterTimeLeft_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"challengerTimeLeft_\",\"type\":\"uint256\"}],\"name\":\"createChallenge\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"currentResponder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOldChallengeResultReceiver\",\"name\":\"resultReceiver_\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox_\",\"type\":\"address\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge_\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"isTimedOut\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"oldSegmentsStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldSegmentsLength\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"oldSegments\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"challengePosition\",\"type\":\"uint256\"}],\"internalType\":\"structOldChallengeLib.SegmentSelection\",\"name\":\"selection\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"oneStepProveExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"osp\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resultReceiver\",\"outputs\":[{\"internalType\":\"contractIOldChallengeResultReceiver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"}],\"name\":\"timeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalChallengesCreated\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a0604052306080523480156200001557600080fd5b50604051620039be380380620039be8339810160408190526200003891620002bc565b600580546001600160a01b03808c166001600160a01b03199283161790925560028054928b1692909116919091179055600080548190819062000084906001600160401b0316620003cd565b82546101009290920a6001600160401b03818102199093168284169182021790935560009283526001602090815260408085206007810180546001600160401b031916958f16959095179094558051600280825260608201835293965093949392918301908036833750508a518251929350918391506000906200010c576200010c6200040a565b60209081029190910101528860016020020151816001815181106200013557620001356200040a565b60200260200101818152505060006200015c60008a846200024360201b62001f091760201c565b600684018190556040805180820182526001600160a01b038b811680835260209283018b90526002880180546001600160a01b03199081169092179055600388018b905583518085018552918c168083529190920189905286549091161785556001850187905542600486015560078501805460ff60401b1916680200000000000000001790555190915081906001600160401b038616907f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689062000228906000908e90889062000420565b60405180910390a350505050505050505050505050620004bb565b60008383836040516020016200025c9392919062000477565b6040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811681146200029157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620002b7816200027b565b919050565b60008060008060008060008060006101408a8c031215620002dc57600080fd5b8951620002e9816200027b565b809950506020808b0151620002fe816200027b565b60408c01519099506001600160401b0380821682146200031d57600080fd5b8199508d607f8e01126200033057600080fd5b604051915060408201828110828211171562000350576200035062000294565b604052508060a08d018e8111156200036757600080fd5b60608e015b818110156200038557805183529184019184016200036c565b50519198509096506200039e91505060c08b01620002aa565b9350620003ae60e08b01620002aa565b92506101008a015191506101208a015190509295985092959850929598565b60006001600160401b038281166002600160401b031981016200040057634e487b7160e01b600052601160045260246000fd5b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101562000469578451835293830193918301916001016200044b565b509098975050505050505050565b83815260006020848184015260408301845182860160005b82811015620004ad578151845292840192908401906001016200048f565b509198975050505050505050565b6080516134e7620004d7600039600061155501526134e76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639ede42b911610097578063ee35f32711610066578063ee35f327146102f0578063f26a62c614610303578063f8c8765e14610316578063fb7be0a11461032957600080fd5b80639ede42b914610294578063a521b032146102b7578063d248d124146102ca578063e78cea92146102dd57600080fd5b806356e9df97116100d357806356e9df97146101a95780635ef489e6146101bc5780637fd07a9c146101d05780638f1d3776146101f057600080fd5b806314eab5e7146101055780631b45c86a1461013657806323a9ef231461014b5780633504f1d714610196575b600080fd5b610118610113366004612b8c565b61033c565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610149610144366004612c1f565b61064c565b005b61017e610159366004612c1f565b67ffffffffffffffff166000908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161012d565b60025461017e906001600160a01b031681565b6101496101b7366004612c1f565b61072a565b6000546101189067ffffffffffffffff1681565b6101e36101de366004612c1f565b6108b4565b60405161012d9190612c64565b6102816101fe366004612cee565b6001602081815260009283526040928390208351808501855281546001600160a01b03908116825293820154818401528451808601909552600282015490931684526003810154918401919091526004810154600582015460068301546007909301549394939192909167ffffffffffffffff811690600160401b900460ff1687565b60405161012d9796959493929190612d07565b6102a76102a2366004612c1f565b6109dc565b604051901515815260200161012d565b6101496102c5366004612d7f565b610a04565b6101496102d8366004612e24565b610fbb565b60045461017e906001600160a01b031681565b60035461017e906001600160a01b031681565b60055461017e906001600160a01b031681565b610149610324366004612eb7565b61154b565b610149610337366004612f13565b6116f5565b6002546000906001600160a01b0316331461039e5760405162461bcd60e51b815260206004820152601060248201527f4f4e4c595f524f4c4c55505f4348414c0000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160028082526060820183526000926020830190803683370190505090506103f46103cf60208b018b612fb8565b6103ef8a60005b608002018036038101906103ea9190613079565b611f40565b611fe9565b8160008151811061040757610407612fa2565b602090810291909101015261043689600160200201602081019061042b9190612fb8565b6103ef8a60016103d6565b8160018151811061044957610449612fa2565b6020908102919091010152600080548190819061046f9067ffffffffffffffff16613128565b825467ffffffffffffffff8083166101009490940a848102910219909116179092559091506104a0576104a061314f565b67ffffffffffffffff81166000908152600160205260408120600581018d9055906104db6104d6368d90038d0160808e01613079565b6120ee565b905060026104ef60408e0160208f01612fb8565b600281111561050057610500612c3a565b148061052f5750600061052361051e368e90038e0160808f01613079565b612103565b67ffffffffffffffff16115b15610542578061053e81613128565b9150505b6007820180546040805180820182526001600160a01b038d811680835260209283018d905260028801805473ffffffffffffffffffffffffffffffffffffffff199081169092179055600388018d905583518085018552918e16808352919092018b905286549091161785556001850189905542600486015567ffffffffffffffff84811668ffffffffffffffffff1990931692909217600160401b179092559051908416907f76604fe17af46c9b5f53ffe99ff23e0f655dab91886b07ac1fc0254319f7145a9061061a908e9060808201906131ad565b60405180910390a26106398360008c67ffffffffffffffff1687612112565b5090925050505b98975050505050505050565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff16600281111561068657610686612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906106c65760405162461bcd60e51b815260040161039591906131c9565b506106d0816109dc565b61071c5760405162461bcd60e51b815260206004820152601060248201527f54494d454f55545f444541444c494e45000000000000000000000000000000006044820152606401610395565b6107278160006121a9565b50565b6002546001600160a01b031633146107845760405162461bcd60e51b815260206004820152601060248201527f4e4f545f5245535f5245434549564552000000000000000000000000000000006044820152606401610395565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff1660028111156107be576107be612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906107fe5760405162461bcd60e51b815260040161039591906131c9565b5067ffffffffffffffff81166000818152600160208190526040808320805473ffffffffffffffffffffffffffffffffffffffff1990811682559281018490556002810180549093169092556003808301849055600483018490556005830184905560068301939093556007909101805468ffffffffffffffffff19169055517ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40916108a991613217565b60405180910390a250565b6040805161012081018252600060e0820181815261010083018290528252825180840184528181526020808201839052830152918101829052606081018290526080810182905260a0810182905260c081019190915267ffffffffffffffff82811660009081526001602081815260409283902083516101208101855281546001600160a01b0390811660e0830190815294830154610100830152938152845180860186526002808401549095168152600383015481850152928101929092526004810154938201939093526005830154606082015260068301546080820152600783015493841660a08201529260c0840191600160401b90910460ff16908111156109c2576109c2612c3a565b60028111156109d3576109d3612c3a565b90525092915050565b67ffffffffffffffff811660009081526001602052604081206109fe906122ff565b92915050565b67ffffffffffffffff8416600090815260016020526040812080548692869290916001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b610a85846109dc565b15610ad25760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b6000826002811115610ae657610ae6612c3a565b03610b535760006007820154600160401b900460ff166002811115610b0d57610b0d612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b81525090610b4d5760405162461bcd60e51b815260040161039591906131c9565b50610c70565b6001826002811115610b6757610b67612c3a565b03610be05760016007820154600160401b900460ff166002811115610b8e57610b8e612c3a565b14610bdb5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b610c70565b6002826002811115610bf457610bf4612c3a565b03610c685760026007820154600160401b900460ff166002811115610c1b57610c1b612c3a565b14610bdb5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b610c7061314f565b610cbe83356020850135610c876040870187613231565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611f0992505050565b816006015414610d105760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b6002610d1f6040850185613231565b90501080610d4a57506001610d376040850185613231565b610d429291506132a0565b836060013510155b15610d975760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b600080610da389612317565b9150915060018111610df75760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610395565b806028811115610e05575060285b610e108160016132b3565b8814610e5e5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f44454752454500000000000000000000000000000000000000006044820152606401610395565b50610ea88989896000818110610e7657610e76612fa2565b602002919091013590508a8a610e8d6001826132a0565b818110610e9c57610e9c612fa2565b905060200201356123a7565b610ee78a83838b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061211292505050565b50600090505b6007820154600160401b900460ff166002811115610f0d57610f0d612c3a565b03610f185750610fb2565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154610f4890426132a0565b81602001818151610f5991906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b50505050505050565b67ffffffffffffffff84166000908152600160205260409020805485918591600291906001600160a01b031633146110355760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b61103e846109dc565b1561108b5760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b600082600281111561109f5761109f612c3a565b0361110c5760006007820154600160401b900460ff1660028111156110c6576110c6612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906111065760405162461bcd60e51b815260040161039591906131c9565b50611229565b600182600281111561112057611120612c3a565b036111995760016007820154600160401b900460ff16600281111561114757611147612c3a565b146111945760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611229565b60028260028111156111ad576111ad612c3a565b036112215760026007820154600160401b900460ff1660028111156111d4576111d4612c3a565b146111945760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61122961314f565b61124083356020850135610c876040870187613231565b8160060154146112925760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026112a16040850185613231565b905010806112cc575060016112b96040850185613231565b6112c49291506132a0565b836060013510155b156113195760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b67ffffffffffffffff88166000908152600160205260408120908061133d8a612317565b9092509050600181146113925760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b506005805460408051606081018252600786015467ffffffffffffffff1681526004546001600160a01b03908116602083015293860154818301526000939092169163b5112fd29185906113e8908f018f613231565b8f606001358181106113fc576113fc612fa2565b905060200201358d8d6040518663ffffffff1660e01b81526004016114259594939291906132c6565b602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190613328565b905061147560408b018b613231565b61148460608d013560016132b3565b81811061149357611493612fa2565b9050602002013581036114e85760405162461bcd60e51b815260206004820152600c60248201527f53414d455f4f53505f454e4400000000000000000000000000000000000000006044820152606401610395565b60405167ffffffffffffffff8c16907fc2cc42e04ff8c36de71c6a2937ea9f161dd0dd9e175f00caa26e5200643c781e90600090a261153f8b67ffffffffffffffff16600090815260016020526040812060060155565b5060009150610eed9050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115e95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610395565b6002546001600160a01b0316156116425760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e495400000000000000000000000000000000000000006044820152606401610395565b6001600160a01b0384166116985760405162461bcd60e51b815260206004820152601260248201527f4e4f5f524553554c545f524543454956455200000000000000000000000000006044820152606401610395565b600280546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556003805494861694821694909417909355600480549285169284169290921790915560058054919093169116179055565b67ffffffffffffffff8516600090815260016020819052604090912080548792879290916001600160a01b031633146117705760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b611779846109dc565b156117c65760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b60008260028111156117da576117da612c3a565b036118475760006007820154600160401b900460ff16600281111561180157611801612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906118415760405162461bcd60e51b815260040161039591906131c9565b50611964565b600182600281111561185b5761185b612c3a565b036118d45760016007820154600160401b900460ff16600281111561188257611882612c3a565b146118cf5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611964565b60028260028111156118e8576118e8612c3a565b0361195c5760026007820154600160401b900460ff16600281111561190f5761190f612c3a565b146118cf5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61196461314f565b61197b83356020850135610c876040870187613231565b8160060154146119cd5760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026119dc6040850185613231565b90501080611a07575060016119f46040850185613231565b6119ff9291506132a0565b836060013510155b15611a545760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b6001851015611aa55760405162461bcd60e51b815260206004820152601360248201527f4348414c4c454e47455f544f4f5f53484f5254000000000000000000000000006044820152606401610395565b65080000000000851115611afb5760405162461bcd60e51b815260206004820152601260248201527f4348414c4c454e47455f544f4f5f4c4f4e4700000000000000000000000000006044820152606401610395565b611b3d88611b1d611b0f60208b018b612fb8565b8960005b6020020135611fe9565b611b38611b3060408c0160208d01612fb8565b8a6001611b13565b6123a7565b67ffffffffffffffff891660009081526001602052604081209080611b618b612317565b9150915080600114611bb55760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b6001611bc460208c018c612fb8565b6002811115611bd557611bd5612c3a565b14611ca057611bea60408b0160208c01612fb8565b6002811115611bfb57611bfb612c3a565b611c0860208c018c612fb8565b6002811115611c1957611c19612c3a565b148015611c2a5750883560208a0135145b611c765760405162461bcd60e51b815260206004820152600d60248201527f48414c5445445f4348414e4745000000000000000000000000000000000000006044820152606401610395565b611c988c67ffffffffffffffff16600090815260016020526040812060060155565b505050611e38565b6002611cb260408c0160208d01612fb8565b6002811115611cc357611cc3612c3a565b03611d1c57883560208a013514611d1c5760405162461bcd60e51b815260206004820152600c60248201527f4552524f525f4348414e474500000000000000000000000000000000000000006044820152606401610395565b6040805160028082526060820183526000926020830190803683375050506005850154909150611d4e908b35906124a2565b81600081518110611d6157611d61612fa2565b6020908102919091010152611d8f8b6001602002016020810190611d859190612fb8565b60208c013561268a565b81600181518110611da257611da2612fa2565b60209081029190910101526007840180547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668020000000000000000179055611def8d60008b84612112565b8c67ffffffffffffffff167f24e032e170243bbea97e140174b22dc7e54fb85925afbf52c70e001cd6af16db84604051611e2b91815260200190565b60405180910390a2505050505b60006007820154600160401b900460ff166002811115611e5a57611e5a612c3a565b03611e655750611eff565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154611e9590426132a0565b81602001818151611ea691906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b5050505050505050565b6000838383604051602001611f2093929190613341565b6040516020818303038152906040528051906020012090505b9392505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d015b604051602081830303815290604052805190602001209050919050565b60006001836002811115611fff57611fff612c3a565b03612055576040517f426c6f636b2073746174653a00000000000000000000000000000000000000006020820152602c8101839052604c015b6040516020818303038152906040528051906020012090506109fe565b600283600281111561206957612069612c3a565b036120a6576040517f426c6f636b2073746174652c206572726f7265643a0000000000000000000000602082015260358101839052605501612038565b60405162461bcd60e51b815260206004820152601060248201527f4241445f424c4f434b5f535441545553000000000000000000000000000000006044820152606401610395565b6020810151600090815b602002015192915050565b602081015160009060016120f8565b60018210156121235761212361314f565b6002815110156121355761213561314f565b6000612142848484611f09565b67ffffffffffffffff8616600081815260016020526040908190206006018390555191925082917f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689061219a90889088908890613383565b60405180910390a35050505050565b67ffffffffffffffff8216600081815260016020819052604080832060028082018054835473ffffffffffffffffffffffffffffffffffffffff19808216865596850188905595811690915560038301869055600480840187905560058401879055600684019690965560078301805468ffffffffffffffffff19169055905492517f0357aa49000000000000000000000000000000000000000000000000000000008152948501959095526001600160a01b03948516602485018190529285166044850181905290949293909290911690630357aa4990606401600060405180830381600087803b15801561229e57600080fd5b505af11580156122b2573d6000803e3d6000fd5b505050508467ffffffffffffffff167ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40856040516122f09190613217565b60405180910390a25050505050565b600181015460009061231083612727565b1192915050565b60008080600161232a6040860186613231565b6123359291506132a0565b90506123458160208601356133ee565b9150612355606085013583613402565b6123609085356132b3565b925060026123716040860186613231565b61237c9291506132a0565b8460600135036123a157612394816020860135613419565b61239e90836132b3565b91505b50915091565b816123b56040850185613231565b85606001358181106123c9576123c9612fa2565b905060200201351461241d5760405162461bcd60e51b815260206004820152600b60248201527f57524f4e475f53544152540000000000000000000000000000000000000000006044820152606401610395565b8061242b6040850185613231565b61243a606087013560016132b3565b81811061244957612449612fa2565b905060200201350361249d5760405162461bcd60e51b815260206004820152600860248201527f53414d455f454e440000000000000000000000000000000000000000000000006044820152606401610395565b505050565b60408051600380825260808201909252600091829190816020015b60408051808201909152600080825260208201528152602001906001900390816124bd57505060408051808201825260008082526020918201819052825180840190935260048352908201529091508160008151811061251f5761251f612fa2565b60200260200101819052506125626000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8160018151811061257557612575612fa2565b60200260200101819052506125b86000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b816002815181106125cb576125cb612fa2565b602090810291909101810191909152604080518083018252838152815180830190925280825260009282019290925261261b60408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061267d81612739565b9998505050505050505050565b600060018360028111156126a0576126a0612c3a565b036126dd576040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101839052605101612038565b60028360028111156126f1576126f1612c3a565b036120a6576040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603001612038565b60008160040154426109fe91906132a0565b6000808251600281111561274f5761274f612c3a565b03612829576127618260200151612926565b61276e8360400151612926565b61277b84606001516129bc565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc01611fcc565b60018251600281111561283e5761283e612c3a565b036128815760808201516040517f4d616368696e652066696e69736865643a00000000000000000000000000000060208201526031810191909152605101611fcc565b60028251600281111561289657612896612c3a565b036128d95760808201516040517f4d616368696e65206572726f7265643a0000000000000000000000000000000060208201526030810191909152605001611fcc565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f53544154555300000000000000000000000000000000006044820152606401610395565b919050565b60208101518151515160005b818110156129b557835161294f9061294a9083612a60565b612a98565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806129ad9061342d565b915050612932565b5050919050565b602081015160005b825151811015612a5a576129f4836000015182815181106129e7576129e7612fa2565b6020026020010151612ab5565b6040517f537461636b206672616d6520737461636b3a000000000000000000000000000060208201526032810191909152605281018390526072016040516020818303038152906040528051906020012091508080612a529061342d565b9150506129c4565b50919050565b60408051808201909152600080825260208201528251805183908110612a8857612a88612fa2565b6020026020010151905092915050565b600081600001518260200151604051602001611fcc929190613465565b6000612ac48260000151612a98565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b9091166070820152607401611fcc565b80604081018310156109fe57600080fd5b803567ffffffffffffffff8116811461292157600080fd5b6001600160a01b038116811461072757600080fd5b600080600080600080600080610200898b031215612ba957600080fd5b88359750612bba8a60208b01612b4e565b965061016089018a811115612bce57600080fd5b60608a019650612bdd81612b5f565b955050610180890135612bef81612b77565b93506101a0890135612c0081612b77565b979a96995094979396929592945050506101c0820135916101e0013590565b600060208284031215612c3157600080fd5b611f3982612b5f565b634e487b7160e01b600052602160045260246000fd5b60038110612c6057612c60612c3a565b9052565b815180516001600160a01b0316825260209081015190820152610120810160208381015180516001600160a01b031660408501529081015160608401525060408301516080830152606083015160a0830152608083015160c083015267ffffffffffffffff60a08401511660e083015260c0830151612ce7610100840182612c50565b5092915050565b600060208284031215612d0057600080fd5b5035919050565b87516001600160a01b0316815260208089015190820152610120810187516001600160a01b03166040830152602088015160608301528660808301528560a08301528460c083015267ffffffffffffffff841660e0830152610640610100830184612c50565b600060808284031215612a5a57600080fd5b60008060008060608587031215612d9557600080fd5b612d9e85612b5f565b9350602085013567ffffffffffffffff80821115612dbb57600080fd5b612dc788838901612d6d565b94506040870135915080821115612ddd57600080fd5b818701915087601f830112612df157600080fd5b813581811115612e0057600080fd5b8860208260051b8501011115612e1557600080fd5b95989497505060200194505050565b60008060008060608587031215612e3a57600080fd5b612e4385612b5f565b9350602085013567ffffffffffffffff80821115612e6057600080fd5b612e6c88838901612d6d565b94506040870135915080821115612e8257600080fd5b818701915087601f830112612e9657600080fd5b813581811115612ea557600080fd5b886020828501011115612e1557600080fd5b60008060008060808587031215612ecd57600080fd5b8435612ed881612b77565b93506020850135612ee881612b77565b92506040850135612ef881612b77565b91506060850135612f0881612b77565b939692955090935050565b600080600080600060e08688031215612f2b57600080fd5b612f3486612b5f565b9450602086013567ffffffffffffffff811115612f5057600080fd5b612f5c88828901612d6d565b945050612f6c8760408801612b4e565b9250612f7b8760808801612b4e565b9497939650919460c0013592915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fca57600080fd5b813560038110611f3957600080fd5b6040805190810167ffffffffffffffff81118282101715612ffc57612ffc612f8c565b60405290565b600082601f83011261301357600080fd5b6040516040810181811067ffffffffffffffff8211171561303657613036612f8c565b806040525080604084018581111561304d57600080fd5b845b8181101561306e5761306081612b5f565b83526020928301920161304f565b509195945050505050565b60006080828403121561308b57600080fd5b6040516040810181811067ffffffffffffffff821117156130ae576130ae612f8c565b604052601f830184136130c057600080fd5b6130c8612fd9565b8060408501868111156130da57600080fd5b855b818110156130f45780358452602093840193016130dc565b508184526131028782613002565b6020850152509195945050505050565b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff80831681810361314557613145613112565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b6040818337604082016040820160005b60028110156131a65767ffffffffffffffff61319083612b5f565b1683526020928301929190910190600101613175565b5050505050565b61010081016131bc8285613165565b611f396080830184613165565b600060208083528351808285015260005b818110156131f6578581018301518582016040015282016131da565b506000604082860101526040601f19601f8301168501019250505092915050565b602081016004831061322b5761322b612c3a565b91905290565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261326657600080fd5b83018035915067ffffffffffffffff82111561328157600080fd5b6020019150600581901b360382131561329957600080fd5b9250929050565b818103818111156109fe576109fe613112565b808201808211156109fe576109fe613112565b855181526001600160a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561333a57600080fd5b5051919050565b83815260006020848184015260408301845182860160005b8281101561337557815184529284019290840190600101613359565b509198975050505050505050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156133ca578451835293830193918301916001016133ae565b509098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826133fd576133fd6133d8565b500490565b80820281158282048414176109fe576109fe613112565b600082613428576134286133d8565b500690565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345e5761345e613112565b5060010190565b7f56616c75653a0000000000000000000000000000000000000000000000000000815260006007841061349a5761349a612c3a565b5060f89290921b600683015260078201526027019056fea2646970667358221220501c920e18744eab8936fee63cca0c467d40d6a49d2f3ea897c9572eddde3cf964736f6c63430008110033", + Bin: "0x60a0604052306080523480156200001557600080fd5b50604051620039be380380620039be8339810160408190526200003891620002bc565b600580546001600160a01b03808c166001600160a01b03199283161790925560028054928b1692909116919091179055600080548190819062000084906001600160401b0316620003cd565b82546101009290920a6001600160401b03818102199093168284169182021790935560009283526001602090815260408085206007810180546001600160401b031916958f16959095179094558051600280825260608201835293965093949392918301908036833750508a518251929350918391506000906200010c576200010c6200040a565b60209081029190910101528860016020020151816001815181106200013557620001356200040a565b60200260200101818152505060006200015c60008a846200024360201b62001f091760201c565b600684018190556040805180820182526001600160a01b038b811680835260209283018b90526002880180546001600160a01b03199081169092179055600388018b905583518085018552918c168083529190920189905286549091161785556001850187905542600486015560078501805460ff60401b1916680200000000000000001790555190915081906001600160401b038616907f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689062000228906000908e90889062000420565b60405180910390a350505050505050505050505050620004bb565b60008383836040516020016200025c9392919062000477565b6040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811681146200029157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620002b7816200027b565b919050565b60008060008060008060008060006101408a8c031215620002dc57600080fd5b8951620002e9816200027b565b809950506020808b0151620002fe816200027b565b60408c01519099506001600160401b0380821682146200031d57600080fd5b8199508d607f8e01126200033057600080fd5b604051915060408201828110828211171562000350576200035062000294565b604052508060a08d018e8111156200036757600080fd5b60608e015b818110156200038557805183529184019184016200036c565b50519198509096506200039e91505060c08b01620002aa565b9350620003ae60e08b01620002aa565b92506101008a015191506101208a015190509295985092959850929598565b60006001600160401b038281166002600160401b031981016200040057634e487b7160e01b600052601160045260246000fd5b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101562000469578451835293830193918301916001016200044b565b509098975050505050505050565b83815260006020848184015260408301845182860160005b82811015620004ad578151845292840192908401906001016200048f565b509198975050505050505050565b6080516134e7620004d7600039600061155501526134e76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639ede42b911610097578063ee35f32711610066578063ee35f327146102f0578063f26a62c614610303578063f8c8765e14610316578063fb7be0a11461032957600080fd5b80639ede42b914610294578063a521b032146102b7578063d248d124146102ca578063e78cea92146102dd57600080fd5b806356e9df97116100d357806356e9df97146101a95780635ef489e6146101bc5780637fd07a9c146101d05780638f1d3776146101f057600080fd5b806314eab5e7146101055780631b45c86a1461013657806323a9ef231461014b5780633504f1d714610196575b600080fd5b610118610113366004612b8c565b61033c565b60405167ffffffffffffffff90911681526020015b60405180910390f35b610149610144366004612c1f565b61064c565b005b61017e610159366004612c1f565b67ffffffffffffffff166000908152600160205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161012d565b60025461017e906001600160a01b031681565b6101496101b7366004612c1f565b61072a565b6000546101189067ffffffffffffffff1681565b6101e36101de366004612c1f565b6108b4565b60405161012d9190612c64565b6102816101fe366004612cee565b6001602081815260009283526040928390208351808501855281546001600160a01b03908116825293820154818401528451808601909552600282015490931684526003810154918401919091526004810154600582015460068301546007909301549394939192909167ffffffffffffffff811690600160401b900460ff1687565b60405161012d9796959493929190612d07565b6102a76102a2366004612c1f565b6109dc565b604051901515815260200161012d565b6101496102c5366004612d7f565b610a04565b6101496102d8366004612e24565b610fbb565b60045461017e906001600160a01b031681565b60035461017e906001600160a01b031681565b60055461017e906001600160a01b031681565b610149610324366004612eb7565b61154b565b610149610337366004612f13565b6116f5565b6002546000906001600160a01b0316331461039e5760405162461bcd60e51b815260206004820152601060248201527f4f4e4c595f524f4c4c55505f4348414c0000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160028082526060820183526000926020830190803683370190505090506103f46103cf60208b018b612fb8565b6103ef8a60005b608002018036038101906103ea9190613079565b611f40565b611fe9565b8160008151811061040757610407612fa2565b602090810291909101015261043689600160200201602081019061042b9190612fb8565b6103ef8a60016103d6565b8160018151811061044957610449612fa2565b6020908102919091010152600080548190819061046f9067ffffffffffffffff16613128565b825467ffffffffffffffff8083166101009490940a848102910219909116179092559091506104a0576104a061314f565b67ffffffffffffffff81166000908152600160205260408120600581018d9055906104db6104d6368d90038d0160808e01613079565b6120ee565b905060026104ef60408e0160208f01612fb8565b600281111561050057610500612c3a565b148061052f5750600061052361051e368e90038e0160808f01613079565b612103565b67ffffffffffffffff16115b15610542578061053e81613128565b9150505b6007820180546040805180820182526001600160a01b038d811680835260209283018d905260028801805473ffffffffffffffffffffffffffffffffffffffff199081169092179055600388018d905583518085018552918e16808352919092018b905286549091161785556001850189905542600486015567ffffffffffffffff84811668ffffffffffffffffff1990931692909217600160401b179092559051908416907f76604fe17af46c9b5f53ffe99ff23e0f655dab91886b07ac1fc0254319f7145a9061061a908e9060808201906131ad565b60405180910390a26106398360008c67ffffffffffffffff1687612112565b5090925050505b98975050505050505050565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff16600281111561068657610686612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906106c65760405162461bcd60e51b815260040161039591906131c9565b506106d0816109dc565b61071c5760405162461bcd60e51b815260206004820152601060248201527f54494d454f55545f444541444c494e45000000000000000000000000000000006044820152606401610395565b6107278160006121a9565b50565b6002546001600160a01b031633146107845760405162461bcd60e51b815260206004820152601060248201527f4e4f545f5245535f5245434549564552000000000000000000000000000000006044820152606401610395565b600067ffffffffffffffff8216600090815260016020526040902060070154600160401b900460ff1660028111156107be576107be612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906107fe5760405162461bcd60e51b815260040161039591906131c9565b5067ffffffffffffffff81166000818152600160208190526040808320805473ffffffffffffffffffffffffffffffffffffffff1990811682559281018490556002810180549093169092556003808301849055600483018490556005830184905560068301939093556007909101805468ffffffffffffffffff19169055517ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40916108a991613217565b60405180910390a250565b6040805161012081018252600060e0820181815261010083018290528252825180840184528181526020808201839052830152918101829052606081018290526080810182905260a0810182905260c081019190915267ffffffffffffffff82811660009081526001602081815260409283902083516101208101855281546001600160a01b0390811660e0830190815294830154610100830152938152845180860186526002808401549095168152600383015481850152928101929092526004810154938201939093526005830154606082015260068301546080820152600783015493841660a08201529260c0840191600160401b90910460ff16908111156109c2576109c2612c3a565b60028111156109d3576109d3612c3a565b90525092915050565b67ffffffffffffffff811660009081526001602052604081206109fe906122ff565b92915050565b67ffffffffffffffff8416600090815260016020526040812080548692869290916001600160a01b03163314610a7c5760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b610a85846109dc565b15610ad25760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b6000826002811115610ae657610ae6612c3a565b03610b535760006007820154600160401b900460ff166002811115610b0d57610b0d612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b81525090610b4d5760405162461bcd60e51b815260040161039591906131c9565b50610c70565b6001826002811115610b6757610b67612c3a565b03610be05760016007820154600160401b900460ff166002811115610b8e57610b8e612c3a565b14610bdb5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b610c70565b6002826002811115610bf457610bf4612c3a565b03610c685760026007820154600160401b900460ff166002811115610c1b57610c1b612c3a565b14610bdb5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b610c7061314f565b610cbe83356020850135610c876040870187613231565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611f0992505050565b816006015414610d105760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b6002610d1f6040850185613231565b90501080610d4a57506001610d376040850185613231565b610d429291506132a0565b836060013510155b15610d975760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b600080610da389612317565b9150915060018111610df75760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610395565b806028811115610e05575060285b610e108160016132b3565b8814610e5e5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f44454752454500000000000000000000000000000000000000006044820152606401610395565b50610ea88989896000818110610e7657610e76612fa2565b602002919091013590508a8a610e8d6001826132a0565b818110610e9c57610e9c612fa2565b905060200201356123a7565b610ee78a83838b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061211292505050565b50600090505b6007820154600160401b900460ff166002811115610f0d57610f0d612c3a565b03610f185750610fb2565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154610f4890426132a0565b81602001818151610f5991906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b50505050505050565b67ffffffffffffffff84166000908152600160205260409020805485918591600291906001600160a01b031633146110355760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b61103e846109dc565b1561108b5760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b600082600281111561109f5761109f612c3a565b0361110c5760006007820154600160401b900460ff1660028111156110c6576110c6612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906111065760405162461bcd60e51b815260040161039591906131c9565b50611229565b600182600281111561112057611120612c3a565b036111995760016007820154600160401b900460ff16600281111561114757611147612c3a565b146111945760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611229565b60028260028111156111ad576111ad612c3a565b036112215760026007820154600160401b900460ff1660028111156111d4576111d4612c3a565b146111945760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61122961314f565b61124083356020850135610c876040870187613231565b8160060154146112925760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026112a16040850185613231565b905010806112cc575060016112b96040850185613231565b6112c49291506132a0565b836060013510155b156113195760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b67ffffffffffffffff88166000908152600160205260408120908061133d8a612317565b9092509050600181146113925760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b506005805460408051606081018252600786015467ffffffffffffffff1681526004546001600160a01b03908116602083015293860154818301526000939092169163b5112fd29185906113e8908f018f613231565b8f606001358181106113fc576113fc612fa2565b905060200201358d8d6040518663ffffffff1660e01b81526004016114259594939291906132c6565b602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190613328565b905061147560408b018b613231565b61148460608d013560016132b3565b81811061149357611493612fa2565b9050602002013581036114e85760405162461bcd60e51b815260206004820152600c60248201527f53414d455f4f53505f454e4400000000000000000000000000000000000000006044820152606401610395565b60405167ffffffffffffffff8c16907fc2cc42e04ff8c36de71c6a2937ea9f161dd0dd9e175f00caa26e5200643c781e90600090a261153f8b67ffffffffffffffff16600090815260016020526040812060060155565b5060009150610eed9050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115e95760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610395565b6002546001600160a01b0316156116425760405162461bcd60e51b815260206004820152600c60248201527f414c52454144595f494e495400000000000000000000000000000000000000006044820152606401610395565b6001600160a01b0384166116985760405162461bcd60e51b815260206004820152601260248201527f4e4f5f524553554c545f524543454956455200000000000000000000000000006044820152606401610395565b600280546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556003805494861694821694909417909355600480549285169284169290921790915560058054919093169116179055565b67ffffffffffffffff8516600090815260016020819052604090912080548792879290916001600160a01b031633146117705760405162461bcd60e51b815260206004820152600b60248201527f4348414c5f53454e4445520000000000000000000000000000000000000000006044820152606401610395565b611779846109dc565b156117c65760405162461bcd60e51b815260206004820152600d60248201527f4348414c5f444541444c494e45000000000000000000000000000000000000006044820152606401610395565b60008260028111156117da576117da612c3a565b036118475760006007820154600160401b900460ff16600281111561180157611801612c3a565b1415604051806040016040528060078152602001661393d7d0d2105360ca1b815250906118415760405162461bcd60e51b815260040161039591906131c9565b50611964565b600182600281111561185b5761185b612c3a565b036118d45760016007820154600160401b900460ff16600281111561188257611882612c3a565b146118cf5760405162461bcd60e51b815260206004820152600e60248201527f4348414c5f4e4f545f424c4f434b0000000000000000000000000000000000006044820152606401610395565b611964565b60028260028111156118e8576118e8612c3a565b0361195c5760026007820154600160401b900460ff16600281111561190f5761190f612c3a565b146118cf5760405162461bcd60e51b815260206004820152601260248201527f4348414c5f4e4f545f455845435554494f4e00000000000000000000000000006044820152606401610395565b61196461314f565b61197b83356020850135610c876040870187613231565b8160060154146119cd5760405162461bcd60e51b815260206004820152600960248201527f4249535f535441544500000000000000000000000000000000000000000000006044820152606401610395565b60026119dc6040850185613231565b90501080611a07575060016119f46040850185613231565b6119ff9291506132a0565b836060013510155b15611a545760405162461bcd60e51b815260206004820152601160248201527f4241445f4348414c4c454e47455f504f530000000000000000000000000000006044820152606401610395565b6001851015611aa55760405162461bcd60e51b815260206004820152601360248201527f4348414c4c454e47455f544f4f5f53484f5254000000000000000000000000006044820152606401610395565b65080000000000851115611afb5760405162461bcd60e51b815260206004820152601260248201527f4348414c4c454e47455f544f4f5f4c4f4e4700000000000000000000000000006044820152606401610395565b611b3d88611b1d611b0f60208b018b612fb8565b8960005b6020020135611fe9565b611b38611b3060408c0160208d01612fb8565b8a6001611b13565b6123a7565b67ffffffffffffffff891660009081526001602052604081209080611b618b612317565b9150915080600114611bb55760405162461bcd60e51b815260206004820152600860248201527f544f4f5f4c4f4e470000000000000000000000000000000000000000000000006044820152606401610395565b6001611bc460208c018c612fb8565b6002811115611bd557611bd5612c3a565b14611ca057611bea60408b0160208c01612fb8565b6002811115611bfb57611bfb612c3a565b611c0860208c018c612fb8565b6002811115611c1957611c19612c3a565b148015611c2a5750883560208a0135145b611c765760405162461bcd60e51b815260206004820152600d60248201527f48414c5445445f4348414e4745000000000000000000000000000000000000006044820152606401610395565b611c988c67ffffffffffffffff16600090815260016020526040812060060155565b505050611e38565b6002611cb260408c0160208d01612fb8565b6002811115611cc357611cc3612c3a565b03611d1c57883560208a013514611d1c5760405162461bcd60e51b815260206004820152600c60248201527f4552524f525f4348414e474500000000000000000000000000000000000000006044820152606401610395565b6040805160028082526060820183526000926020830190803683375050506005850154909150611d4e908b35906124a2565b81600081518110611d6157611d61612fa2565b6020908102919091010152611d8f8b6001602002016020810190611d859190612fb8565b60208c013561268a565b81600181518110611da257611da2612fa2565b60209081029190910101526007840180547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668020000000000000000179055611def8d60008b84612112565b8c67ffffffffffffffff167f24e032e170243bbea97e140174b22dc7e54fb85925afbf52c70e001cd6af16db84604051611e2b91815260200190565b60405180910390a2505050505b60006007820154600160401b900460ff166002811115611e5a57611e5a612c3a565b03611e655750611eff565b6040805180820190915281546001600160a01b03168152600182015460208201526004820154611e9590426132a0565b81602001818151611ea691906132a0565b90525060028201805483546001600160a01b0380831673ffffffffffffffffffffffffffffffffffffffff1992831617865560038601805460018801558551929093169116179091556020909101519055426004909101555b5050505050505050565b6000838383604051602001611f2093929190613341565b6040516020818303038152906040528051906020012090505b9392505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d015b604051602081830303815290604052805190602001209050919050565b60006001836002811115611fff57611fff612c3a565b03612055576040517f426c6f636b2073746174653a00000000000000000000000000000000000000006020820152602c8101839052604c015b6040516020818303038152906040528051906020012090506109fe565b600283600281111561206957612069612c3a565b036120a6576040517f426c6f636b2073746174652c206572726f7265643a0000000000000000000000602082015260358101839052605501612038565b60405162461bcd60e51b815260206004820152601060248201527f4241445f424c4f434b5f535441545553000000000000000000000000000000006044820152606401610395565b6020810151600090815b602002015192915050565b602081015160009060016120f8565b60018210156121235761212361314f565b6002815110156121355761213561314f565b6000612142848484611f09565b67ffffffffffffffff8616600081815260016020526040908190206006018390555191925082917f86b34e9455464834eca718f62d4481437603bb929d8a78ccde5d1bc79fa06d689061219a90889088908890613383565b60405180910390a35050505050565b67ffffffffffffffff8216600081815260016020819052604080832060028082018054835473ffffffffffffffffffffffffffffffffffffffff19808216865596850188905595811690915560038301869055600480840187905560058401879055600684019690965560078301805468ffffffffffffffffff19169055905492517f0357aa49000000000000000000000000000000000000000000000000000000008152948501959095526001600160a01b03948516602485018190529285166044850181905290949293909290911690630357aa4990606401600060405180830381600087803b15801561229e57600080fd5b505af11580156122b2573d6000803e3d6000fd5b505050508467ffffffffffffffff167ffdaece6c274a4b56af16761f83fd6b1062823192630ea08e019fdf9b2d747f40856040516122f09190613217565b60405180910390a25050505050565b600181015460009061231083612727565b1192915050565b60008080600161232a6040860186613231565b6123359291506132a0565b90506123458160208601356133ee565b9150612355606085013583613402565b6123609085356132b3565b925060026123716040860186613231565b61237c9291506132a0565b8460600135036123a157612394816020860135613419565b61239e90836132b3565b91505b50915091565b816123b56040850185613231565b85606001358181106123c9576123c9612fa2565b905060200201351461241d5760405162461bcd60e51b815260206004820152600b60248201527f57524f4e475f53544152540000000000000000000000000000000000000000006044820152606401610395565b8061242b6040850185613231565b61243a606087013560016132b3565b81811061244957612449612fa2565b905060200201350361249d5760405162461bcd60e51b815260206004820152600860248201527f53414d455f454e440000000000000000000000000000000000000000000000006044820152606401610395565b505050565b60408051600380825260808201909252600091829190816020015b60408051808201909152600080825260208201528152602001906001900390816124bd57505060408051808201825260008082526020918201819052825180840190935260048352908201529091508160008151811061251f5761251f612fa2565b60200260200101819052506125626000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8160018151811061257557612575612fa2565b60200260200101819052506125b86000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b816002815181106125cb576125cb612fa2565b602090810291909101810191909152604080518083018252838152815180830190925280825260009282019290925261261b60408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061267d81612739565b9998505050505050505050565b600060018360028111156126a0576126a0612c3a565b036126dd576040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101839052605101612038565b60028360028111156126f1576126f1612c3a565b036120a6576040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603001612038565b60008160040154426109fe91906132a0565b6000808251600281111561274f5761274f612c3a565b03612829576127618260200151612926565b61276e8360400151612926565b61277b84606001516129bc565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc01611fcc565b60018251600281111561283e5761283e612c3a565b036128815760808201516040517f4d616368696e652066696e69736865643a00000000000000000000000000000060208201526031810191909152605101611fcc565b60028251600281111561289657612896612c3a565b036128d95760808201516040517f4d616368696e65206572726f7265643a0000000000000000000000000000000060208201526030810191909152605001611fcc565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f53544154555300000000000000000000000000000000006044820152606401610395565b919050565b60208101518151515160005b818110156129b557835161294f9061294a9083612a60565b612a98565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806129ad9061342d565b915050612932565b5050919050565b602081015160005b825151811015612a5a576129f4836000015182815181106129e7576129e7612fa2565b6020026020010151612ab5565b6040517f537461636b206672616d6520737461636b3a000000000000000000000000000060208201526032810191909152605281018390526072016040516020818303038152906040528051906020012091508080612a529061342d565b9150506129c4565b50919050565b60408051808201909152600080825260208201528251805183908110612a8857612a88612fa2565b6020026020010151905092915050565b600081600001518260200151604051602001611fcc929190613465565b6000612ac48260000151612a98565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b9091166070820152607401611fcc565b80604081018310156109fe57600080fd5b803567ffffffffffffffff8116811461292157600080fd5b6001600160a01b038116811461072757600080fd5b600080600080600080600080610200898b031215612ba957600080fd5b88359750612bba8a60208b01612b4e565b965061016089018a811115612bce57600080fd5b60608a019650612bdd81612b5f565b955050610180890135612bef81612b77565b93506101a0890135612c0081612b77565b979a96995094979396929592945050506101c0820135916101e0013590565b600060208284031215612c3157600080fd5b611f3982612b5f565b634e487b7160e01b600052602160045260246000fd5b60038110612c6057612c60612c3a565b9052565b815180516001600160a01b0316825260209081015190820152610120810160208381015180516001600160a01b031660408501529081015160608401525060408301516080830152606083015160a0830152608083015160c083015267ffffffffffffffff60a08401511660e083015260c0830151612ce7610100840182612c50565b5092915050565b600060208284031215612d0057600080fd5b5035919050565b87516001600160a01b0316815260208089015190820152610120810187516001600160a01b03166040830152602088015160608301528660808301528560a08301528460c083015267ffffffffffffffff841660e0830152610640610100830184612c50565b600060808284031215612a5a57600080fd5b60008060008060608587031215612d9557600080fd5b612d9e85612b5f565b9350602085013567ffffffffffffffff80821115612dbb57600080fd5b612dc788838901612d6d565b94506040870135915080821115612ddd57600080fd5b818701915087601f830112612df157600080fd5b813581811115612e0057600080fd5b8860208260051b8501011115612e1557600080fd5b95989497505060200194505050565b60008060008060608587031215612e3a57600080fd5b612e4385612b5f565b9350602085013567ffffffffffffffff80821115612e6057600080fd5b612e6c88838901612d6d565b94506040870135915080821115612e8257600080fd5b818701915087601f830112612e9657600080fd5b813581811115612ea557600080fd5b886020828501011115612e1557600080fd5b60008060008060808587031215612ecd57600080fd5b8435612ed881612b77565b93506020850135612ee881612b77565b92506040850135612ef881612b77565b91506060850135612f0881612b77565b939692955090935050565b600080600080600060e08688031215612f2b57600080fd5b612f3486612b5f565b9450602086013567ffffffffffffffff811115612f5057600080fd5b612f5c88828901612d6d565b945050612f6c8760408801612b4e565b9250612f7b8760808801612b4e565b9497939650919460c0013592915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612fca57600080fd5b813560038110611f3957600080fd5b6040805190810167ffffffffffffffff81118282101715612ffc57612ffc612f8c565b60405290565b600082601f83011261301357600080fd5b6040516040810181811067ffffffffffffffff8211171561303657613036612f8c565b806040525080604084018581111561304d57600080fd5b845b8181101561306e5761306081612b5f565b83526020928301920161304f565b509195945050505050565b60006080828403121561308b57600080fd5b6040516040810181811067ffffffffffffffff821117156130ae576130ae612f8c565b604052601f830184136130c057600080fd5b6130c8612fd9565b8060408501868111156130da57600080fd5b855b818110156130f45780358452602093840193016130dc565b508184526131028782613002565b6020850152509195945050505050565b634e487b7160e01b600052601160045260246000fd5b600067ffffffffffffffff80831681810361314557613145613112565b6001019392505050565b634e487b7160e01b600052600160045260246000fd5b6040818337604082016040820160005b60028110156131a65767ffffffffffffffff61319083612b5f565b1683526020928301929190910190600101613175565b5050505050565b61010081016131bc8285613165565b611f396080830184613165565b600060208083528351808285015260005b818110156131f6578581018301518582016040015282016131da565b506000604082860101526040601f19601f8301168501019250505092915050565b602081016004831061322b5761322b612c3a565b91905290565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261326657600080fd5b83018035915067ffffffffffffffff82111561328157600080fd5b6020019150600581901b360382131561329957600080fd5b9250929050565b818103818111156109fe576109fe613112565b808201808211156109fe576109fe613112565b855181526001600160a01b0360208701511660208201526040860151604082015284606082015283608082015260c060a08201528160c0820152818360e0830137600081830160e090810191909152601f909201601f19160101949350505050565b60006020828403121561333a57600080fd5b5051919050565b83815260006020848184015260408301845182860160005b8281101561337557815184529284019290840190600101613359565b509198975050505050505050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156133ca578451835293830193918301916001016133ae565b509098975050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826133fd576133fd6133d8565b500490565b80820281158282048414176109fe576109fe613112565b600082613428576134286133d8565b500690565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345e5761345e613112565b5060010190565b7f56616c75653a0000000000000000000000000000000000000000000000000000815260006007841061349a5761349a612c3a565b5060f89290921b600683015260078201526027019056fea2646970667358221220e19da10b4ca20002aa5c9644267fd06e9717b2fb89bb2529ca4941cdf500d01564736f6c63430008110033", } // SingleExecutionChallengeABI is the input ABI used to generate the binding from. @@ -10613,7 +11630,7 @@ func (_SingleExecutionChallenge *SingleExecutionChallengeFilterer) ParseOneStepP // TestWETH9MetaData contains all meta data concerning the TestWETH9 contract. var TestWETH9MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200107838038062001078833981016040819052620000349162000123565b818160036200004483826200021c565b5060046200005382826200021c565b5050505050620002e8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008657600080fd5b81516001600160401b0380821115620000a357620000a36200005e565b604051601f8301601f19908116603f01168101908282118183101715620000ce57620000ce6200005e565b81604052838152602092508683858801011115620000eb57600080fd5b600091505b838210156200010f5785820183015181830184015290820190620000f0565b600093810190920192909252949350505050565b600080604083850312156200013757600080fd5b82516001600160401b03808211156200014f57600080fd5b6200015d8683870162000074565b935060208501519150808211156200017457600080fd5b50620001838582860162000074565b9150509250929050565b600181811c90821680620001a257607f821691505b602082108103620001c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021757600081815260208120601f850160051c81016020861015620001f25750805b601f850160051c820191505b818110156200021357828155600101620001fe565b5050505b505050565b81516001600160401b038111156200023857620002386200005e565b62000250816200024984546200018d565b84620001c9565b602080601f8311600181146200028857600084156200026f5750858301515b600019600386901b1c1916600185901b17855562000213565b600085815260208120601f198616915b82811015620002b95788860151825594840194600190910190840162000298565b5085821015620002d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610d8080620002f86000396000f3fe6080604052600436106100d25760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021a578063a9059cbb1461023a578063d0e30db01461025a578063dd62ed3e1461026257600080fd5b806339509351146101af57806370a08231146101cf57806395d89b411461020557600080fd5b806323b872dd116100b057806323b872dd146101515780632e1a7d4d14610171578063313ce5671461019357600080fd5b806306fdde03146100d7578063095ea7b31461010257806318160ddd14610132575b600080fd5b3480156100e357600080fd5b506100ec6102a8565b6040516100f99190610b46565b60405180910390f35b34801561010e57600080fd5b5061012261011d366004610bce565b61033a565b60405190151581526020016100f9565b34801561013e57600080fd5b506002545b6040519081526020016100f9565b34801561015d57600080fd5b5061012261016c366004610bf8565b610354565b34801561017d57600080fd5b5061019161018c366004610c34565b610378565b005b34801561019f57600080fd5b50604051601281526020016100f9565b3480156101bb57600080fd5b506101226101ca366004610bce565b6103b3565b3480156101db57600080fd5b506101436101ea366004610c4d565b6001600160a01b031660009081526020819052604090205490565b34801561021157600080fd5b506100ec6103f2565b34801561022657600080fd5b50610122610235366004610bce565b610401565b34801561024657600080fd5b50610122610255366004610bce565b6104b0565b6101916104be565b34801561026e57600080fd5b5061014361027d366004610c6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102b790610ca2565b80601f01602080910402602001604051908101604052809291908181526020018280546102e390610ca2565b80156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b5050505050905090565b6000336103488185856104ca565b60019150505b92915050565b600033610362858285610623565b61036d8585856106d3565b506001949350505050565b61038233826108ea565b604051339082156108fc029083906000818181858888f193505050501580156103af573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061034890829086906103ed908790610d24565b6104ca565b6060600480546102b790610ca2565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61036d82868684036104ca565b6000336103488185856106d3565b6104c83334610a67565b565b6001600160a01b0383166105455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0382166105c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106cd57818110156106c05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b6106cd84848484036104ca565b50505050565b6001600160a01b03831661074f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0382166107cb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383166000908152602081905260409020548181101561085a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610891908490610d24565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108dd91815260200190565b60405180910390a36106cd565b6001600160a01b0382166109665760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109f55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a24908490610d37565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610616565b6001600160a01b038216610abd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b8060026000828254610acf9190610d24565b90915550506001600160a01b03821660009081526020819052604081208054839290610afc908490610d24565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015610b7357858101830151858201604001528201610b57565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80356001600160a01b0381168114610bc957600080fd5b919050565b60008060408385031215610be157600080fd5b610bea83610bb2565b946020939093013593505050565b600080600060608486031215610c0d57600080fd5b610c1684610bb2565b9250610c2460208501610bb2565b9150604084013590509250925092565b600060208284031215610c4657600080fd5b5035919050565b600060208284031215610c5f57600080fd5b610c6882610bb2565b9392505050565b60008060408385031215610c8257600080fd5b610c8b83610bb2565b9150610c9960208401610bb2565b90509250929050565b600181811c90821680610cb657607f821691505b602082108103610cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561034e5761034e610cf5565b8181038181111561034e5761034e610cf556fea264697066735822122072827c8c0faea0de8b1e5a02360be312f4bdc3d1a0c4421d768d72b64f3b947a64736f6c63430008110033", + Bin: "0x60806040523480156200001157600080fd5b506040516200107838038062001078833981016040819052620000349162000123565b818160036200004483826200021c565b5060046200005382826200021c565b5050505050620002e8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008657600080fd5b81516001600160401b0380821115620000a357620000a36200005e565b604051601f8301601f19908116603f01168101908282118183101715620000ce57620000ce6200005e565b81604052838152602092508683858801011115620000eb57600080fd5b600091505b838210156200010f5785820183015181830184015290820190620000f0565b600093810190920192909252949350505050565b600080604083850312156200013757600080fd5b82516001600160401b03808211156200014f57600080fd5b6200015d8683870162000074565b935060208501519150808211156200017457600080fd5b50620001838582860162000074565b9150509250929050565b600181811c90821680620001a257607f821691505b602082108103620001c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021757600081815260208120601f850160051c81016020861015620001f25750805b601f850160051c820191505b818110156200021357828155600101620001fe565b5050505b505050565b81516001600160401b038111156200023857620002386200005e565b62000250816200024984546200018d565b84620001c9565b602080601f8311600181146200028857600084156200026f5750858301515b600019600386901b1c1916600185901b17855562000213565b600085815260208120601f198616915b82811015620002b95788860151825594840194600190910190840162000298565b5085821015620002d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610d8080620002f86000396000f3fe6080604052600436106100d25760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021a578063a9059cbb1461023a578063d0e30db01461025a578063dd62ed3e1461026257600080fd5b806339509351146101af57806370a08231146101cf57806395d89b411461020557600080fd5b806323b872dd116100b057806323b872dd146101515780632e1a7d4d14610171578063313ce5671461019357600080fd5b806306fdde03146100d7578063095ea7b31461010257806318160ddd14610132575b600080fd5b3480156100e357600080fd5b506100ec6102a8565b6040516100f99190610b46565b60405180910390f35b34801561010e57600080fd5b5061012261011d366004610bce565b61033a565b60405190151581526020016100f9565b34801561013e57600080fd5b506002545b6040519081526020016100f9565b34801561015d57600080fd5b5061012261016c366004610bf8565b610354565b34801561017d57600080fd5b5061019161018c366004610c34565b610378565b005b34801561019f57600080fd5b50604051601281526020016100f9565b3480156101bb57600080fd5b506101226101ca366004610bce565b6103b3565b3480156101db57600080fd5b506101436101ea366004610c4d565b6001600160a01b031660009081526020819052604090205490565b34801561021157600080fd5b506100ec6103f2565b34801561022657600080fd5b50610122610235366004610bce565b610401565b34801561024657600080fd5b50610122610255366004610bce565b6104b0565b6101916104be565b34801561026e57600080fd5b5061014361027d366004610c6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102b790610ca2565b80601f01602080910402602001604051908101604052809291908181526020018280546102e390610ca2565b80156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b5050505050905090565b6000336103488185856104ca565b60019150505b92915050565b600033610362858285610623565b61036d8585856106d3565b506001949350505050565b61038233826108ea565b604051339082156108fc029083906000818181858888f193505050501580156103af573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061034890829086906103ed908790610d24565b6104ca565b6060600480546102b790610ca2565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61036d82868684036104ca565b6000336103488185856106d3565b6104c83334610a67565b565b6001600160a01b0383166105455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0382166105c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106cd57818110156106c05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b6106cd84848484036104ca565b50505050565b6001600160a01b03831661074f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0382166107cb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383166000908152602081905260409020548181101561085a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610891908490610d24565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108dd91815260200190565b60405180910390a36106cd565b6001600160a01b0382166109665760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109f55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161049a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a24908490610d37565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610616565b6001600160a01b038216610abd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b8060026000828254610acf9190610d24565b90915550506001600160a01b03821660009081526020819052604081208054839290610afc908490610d24565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015610b7357858101830151858201604001528201610b57565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80356001600160a01b0381168114610bc957600080fd5b919050565b60008060408385031215610be157600080fd5b610bea83610bb2565b946020939093013593505050565b600080600060608486031215610c0d57600080fd5b610c1684610bb2565b9250610c2460208501610bb2565b9150604084013590509250925092565b600060208284031215610c4657600080fd5b5035919050565b600060208284031215610c5f57600080fd5b610c6882610bb2565b9392505050565b60008060408385031215610c8257600080fd5b610c8b83610bb2565b9150610c9960208401610bb2565b90509250929050565b600181811c90821680610cb657607f821691505b602082108103610cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561034e5761034e610cf5565b8181038181111561034e5761034e610cf556fea2646970667358221220975244aa934d68cda9d7d535c488636ae49585ad4cd02c6a4f6512749d4e001764736f6c63430008110033", } // TestWETH9ABI is the input ABI used to generate the binding from. @@ -11025,100 +12042,1513 @@ func (_TestWETH9 *TestWETH9Session) Deposit() (*types.Transaction, error) { return _TestWETH9.Contract.Deposit(&_TestWETH9.TransactOpts) } -// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_TestWETH9 *TestWETH9TransactorSession) Deposit() (*types.Transaction, error) { + return _TestWETH9.Contract.Deposit(&_TestWETH9.TransactOpts) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestWETH9 *TestWETH9Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestWETH9.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestWETH9 *TestWETH9Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.IncreaseAllowance(&_TestWETH9.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestWETH9 *TestWETH9TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.IncreaseAllowance(&_TestWETH9.TransactOpts, spender, addedValue) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.Transfer(&_TestWETH9.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.Transfer(&_TestWETH9.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.TransferFrom(&_TestWETH9.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestWETH9 *TestWETH9TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.TransferFrom(&_TestWETH9.TransactOpts, from, to, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _amount) returns() +func (_TestWETH9 *TestWETH9Transactor) Withdraw(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.contract.Transact(opts, "withdraw", _amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _amount) returns() +func (_TestWETH9 *TestWETH9Session) Withdraw(_amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.Withdraw(&_TestWETH9.TransactOpts, _amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _amount) returns() +func (_TestWETH9 *TestWETH9TransactorSession) Withdraw(_amount *big.Int) (*types.Transaction, error) { + return _TestWETH9.Contract.Withdraw(&_TestWETH9.TransactOpts, _amount) +} + +// TestWETH9ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the TestWETH9 contract. +type TestWETH9ApprovalIterator struct { + Event *TestWETH9Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TestWETH9ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TestWETH9Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TestWETH9Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TestWETH9ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TestWETH9ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TestWETH9Approval represents a Approval event raised by the TestWETH9 contract. +type TestWETH9Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TestWETH9ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TestWETH9.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &TestWETH9ApprovalIterator{contract: _TestWETH9.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TestWETH9Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TestWETH9.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TestWETH9Approval) + if err := _TestWETH9.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) ParseApproval(log types.Log) (*TestWETH9Approval, error) { + event := new(TestWETH9Approval) + if err := _TestWETH9.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TestWETH9TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the TestWETH9 contract. +type TestWETH9TransferIterator struct { + Event *TestWETH9Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TestWETH9TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TestWETH9Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TestWETH9Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TestWETH9TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TestWETH9TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TestWETH9Transfer represents a Transfer event raised by the TestWETH9 contract. +type TestWETH9Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TestWETH9TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TestWETH9.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &TestWETH9TransferIterator{contract: _TestWETH9.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TestWETH9Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TestWETH9.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TestWETH9Transfer) + if err := _TestWETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestWETH9 *TestWETH9Filterer) ParseTransfer(log types.Log) (*TestWETH9Transfer, error) { + event := new(TestWETH9Transfer) + if err := _TestWETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// UpgradeExecutorMockMetaData contains all meta data concerning the UpgradeExecutorMock contract. +var UpgradeExecutorMockMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"TargetCallExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"upgrade\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"UpgradeExecuted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXECUTOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"upgrade\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"upgradeCallData\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"targetCallData\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"executors\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506001609755600054610100900460ff16158080156100365750600054600160ff909116105b80610061575061004f3061013760201b6108881760201c565b158015610061575060005460ff166001145b6100c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156100eb576000805461ff0019166101001790555b8015610131576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50610146565b6001600160a01b03163b151590565b61145680620001566000396000f3fe6080604052600436106100c75760003560e01c806375b238fc11610074578063a217fddf1161004e578063a217fddf14610262578063bca8c7b514610277578063d547741f1461028a57600080fd5b806375b238fc146101c857806391d14854146101fc578063946d92041461024257600080fd5b8063248a9ca3116100a5578063248a9ca3146101585780632f2ff15d1461018857806336568abe146101a857600080fd5b806301ffc9a7146100cc57806307bd0265146101015780631cff79cd14610143575b600080fd5b3480156100d857600080fd5b506100ec6100e7366004610fbd565b6102aa565b60405190151581526020015b60405180910390f35b34801561010d57600080fd5b506101357fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020016100f8565b610156610151366004611062565b610343565b005b34801561016457600080fd5b50610135610173366004611108565b60009081526065602052604090206001015490565b34801561019457600080fd5b506101566101a3366004611121565b610448565b3480156101b457600080fd5b506101566101c3366004611121565b610472565b3480156101d457600080fd5b506101357fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561020857600080fd5b506100ec610217366004611121565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561024e57600080fd5b5061015661025d36600461114d565b6104fe565b34801561026e57600080fd5b50610135600081565b610156610285366004611062565b610773565b34801561029657600080fd5b506101566102a5366004611121565b610863565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061033d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361036d81610897565b6002609754036103c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026097819055506103fa826040518060600160405280603a81526020016113e7603a91396001600160a01b03861691906108a4565b50826001600160a01b03167f49f6851d1cd01a518db5bdea5cffbbe90276baa2595f74250b7472b96806302e348460405161043692919061125d565b60405180910390a25050600160975550565b60008281526065602052604090206001015461046381610897565b61046d838361099a565b505050565b6001600160a01b03811633146104f05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016103bb565b6104fa8282610a3c565b5050565b600054610100900460ff161580801561051e5750600054600160ff909116105b806105385750303b158015610538575060005460ff166001145b6105aa5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103bb565b6000805460ff1916600117905580156105cd576000805461ff0019166101001790555b6001600160a01b0383166106235760405162461bcd60e51b815260206004820152601b60248201527f557067726164654578656375746f723a207a65726f2061646d696e000000000060448201526064016103bb565b61062b610abf565b6106557fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177580610b3e565b61069f7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e637fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b3e565b6106c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177584610b89565b60005b8251811015610728576107187fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6384838151811061070b5761070b61127e565b6020026020010151610b89565b610721816112aa565b90506106cc565b50801561046d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361079d81610897565b6002609754036107ef5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103bb565b600260978190555061082782346040518060600160405280603181526020016113b6603191396001600160a01b038716929190610b93565b50826001600160a01b03167f4d7dbdcc249630ec373f584267f10abf44938de920c32562f5aee93959c25258348460405161043692919061125d565b60008281526065602052604090206001015461087e81610897565b61046d8383610a3c565b6001600160a01b03163b151590565b6108a18133610cdb565b50565b60606001600160a01b0384163b6109235760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016103bb565b600080856001600160a01b03168560405161093e91906112c4565b600060405180830381855af49150503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b509150915061098e828286610d5b565b925050505b9392505050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166104fa5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556109f83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156104fa5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff16610b3c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103bb565b565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6104fa828261099a565b606082471015610c0b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103bb565b6001600160a01b0385163b610c625760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103bb565b600080866001600160a01b03168587604051610c7e91906112c4565b60006040518083038185875af1925050503d8060008114610cbb576040519150601f19603f3d011682016040523d82523d6000602084013e610cc0565b606091505b5091509150610cd0828286610d5b565b979650505050505050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166104fa57610d19816001600160a01b03166014610d94565b610d24836020610d94565b604051602001610d359291906112e0565b60408051601f198184030181529082905262461bcd60e51b82526103bb91600401611361565b60608315610d6a575081610993565b825115610d7a5782518084602001fd5b8160405162461bcd60e51b81526004016103bb9190611361565b60606000610da3836002611374565b610dae90600261138b565b67ffffffffffffffff811115610dc657610dc661101b565b6040519080825280601f01601f191660200182016040528015610df0576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e2757610e2761127e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610e8a57610e8a61127e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610ec6846002611374565b610ed190600161138b565b90505b6001811115610f6e577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f1257610f1261127e565b1a60f81b828281518110610f2857610f2861127e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f678161139e565b9050610ed4565b5083156109935760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103bb565b600060208284031215610fcf57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461099357600080fd5b80356001600160a01b038116811461101657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561105a5761105a61101b565b604052919050565b6000806040838503121561107557600080fd5b61107e83610fff565b915060208084013567ffffffffffffffff8082111561109c57600080fd5b818601915086601f8301126110b057600080fd5b8135818111156110c2576110c261101b565b6110d484601f19601f84011601611031565b915080825287848285010111156110ea57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561111a57600080fd5b5035919050565b6000806040838503121561113457600080fd5b8235915061114460208401610fff565b90509250929050565b6000806040838503121561116057600080fd5b61116983610fff565b915060208084013567ffffffffffffffff8082111561118757600080fd5b818601915086601f83011261119b57600080fd5b8135818111156111ad576111ad61101b565b8060051b91506111be848301611031565b81815291830184019184810190898411156111d857600080fd5b938501935b838510156111fd576111ee85610fff565b825293850193908501906111dd565b8096505050505050509250929050565b60005b83811015611228578181015183820152602001611210565b50506000910152565b6000815180845261124981602086016020860161120d565b601f01601f19169290920160200192915050565b8281526040602082015260006112766040830184611231565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982036112bd576112bd611294565b5060010190565b600082516112d681846020870161120d565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161131881601785016020880161120d565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161135581602884016020880161120d565b01602801949350505050565b6020815260006109936020830184611231565b808202811582820484141761033d5761033d611294565b8082018082111561033d5761033d611294565b6000816113ad576113ad611294565b50600019019056fe557067726164654578656375746f723a20696e6e65722063616c6c206661696c656420776974686f757420726561736f6e557067726164654578656375746f723a20696e6e65722064656c65676174652063616c6c206661696c656420776974686f757420726561736f6ea2646970667358221220d53b0fa8acd9ad301d9b731974463329347be3d4fd5442f7c49359b5c3967c4064736f6c63430008110033", +} + +// UpgradeExecutorMockABI is the input ABI used to generate the binding from. +// Deprecated: Use UpgradeExecutorMockMetaData.ABI instead. +var UpgradeExecutorMockABI = UpgradeExecutorMockMetaData.ABI + +// UpgradeExecutorMockBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use UpgradeExecutorMockMetaData.Bin instead. +var UpgradeExecutorMockBin = UpgradeExecutorMockMetaData.Bin + +// DeployUpgradeExecutorMock deploys a new Ethereum contract, binding an instance of UpgradeExecutorMock to it. +func DeployUpgradeExecutorMock(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UpgradeExecutorMock, error) { + parsed, err := UpgradeExecutorMockMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(UpgradeExecutorMockBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &UpgradeExecutorMock{UpgradeExecutorMockCaller: UpgradeExecutorMockCaller{contract: contract}, UpgradeExecutorMockTransactor: UpgradeExecutorMockTransactor{contract: contract}, UpgradeExecutorMockFilterer: UpgradeExecutorMockFilterer{contract: contract}}, nil +} + +// UpgradeExecutorMock is an auto generated Go binding around an Ethereum contract. +type UpgradeExecutorMock struct { + UpgradeExecutorMockCaller // Read-only binding to the contract + UpgradeExecutorMockTransactor // Write-only binding to the contract + UpgradeExecutorMockFilterer // Log filterer for contract events +} + +// UpgradeExecutorMockCaller is an auto generated read-only Go binding around an Ethereum contract. +type UpgradeExecutorMockCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeExecutorMockTransactor is an auto generated write-only Go binding around an Ethereum contract. +type UpgradeExecutorMockTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeExecutorMockFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type UpgradeExecutorMockFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UpgradeExecutorMockSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type UpgradeExecutorMockSession struct { + Contract *UpgradeExecutorMock // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UpgradeExecutorMockCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type UpgradeExecutorMockCallerSession struct { + Contract *UpgradeExecutorMockCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// UpgradeExecutorMockTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type UpgradeExecutorMockTransactorSession struct { + Contract *UpgradeExecutorMockTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UpgradeExecutorMockRaw is an auto generated low-level Go binding around an Ethereum contract. +type UpgradeExecutorMockRaw struct { + Contract *UpgradeExecutorMock // Generic contract binding to access the raw methods on +} + +// UpgradeExecutorMockCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type UpgradeExecutorMockCallerRaw struct { + Contract *UpgradeExecutorMockCaller // Generic read-only contract binding to access the raw methods on +} + +// UpgradeExecutorMockTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type UpgradeExecutorMockTransactorRaw struct { + Contract *UpgradeExecutorMockTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewUpgradeExecutorMock creates a new instance of UpgradeExecutorMock, bound to a specific deployed contract. +func NewUpgradeExecutorMock(address common.Address, backend bind.ContractBackend) (*UpgradeExecutorMock, error) { + contract, err := bindUpgradeExecutorMock(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &UpgradeExecutorMock{UpgradeExecutorMockCaller: UpgradeExecutorMockCaller{contract: contract}, UpgradeExecutorMockTransactor: UpgradeExecutorMockTransactor{contract: contract}, UpgradeExecutorMockFilterer: UpgradeExecutorMockFilterer{contract: contract}}, nil +} + +// NewUpgradeExecutorMockCaller creates a new read-only instance of UpgradeExecutorMock, bound to a specific deployed contract. +func NewUpgradeExecutorMockCaller(address common.Address, caller bind.ContractCaller) (*UpgradeExecutorMockCaller, error) { + contract, err := bindUpgradeExecutorMock(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockCaller{contract: contract}, nil +} + +// NewUpgradeExecutorMockTransactor creates a new write-only instance of UpgradeExecutorMock, bound to a specific deployed contract. +func NewUpgradeExecutorMockTransactor(address common.Address, transactor bind.ContractTransactor) (*UpgradeExecutorMockTransactor, error) { + contract, err := bindUpgradeExecutorMock(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockTransactor{contract: contract}, nil +} + +// NewUpgradeExecutorMockFilterer creates a new log filterer instance of UpgradeExecutorMock, bound to a specific deployed contract. +func NewUpgradeExecutorMockFilterer(address common.Address, filterer bind.ContractFilterer) (*UpgradeExecutorMockFilterer, error) { + contract, err := bindUpgradeExecutorMock(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockFilterer{contract: contract}, nil +} + +// bindUpgradeExecutorMock binds a generic wrapper to an already deployed contract. +func bindUpgradeExecutorMock(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := UpgradeExecutorMockMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UpgradeExecutorMock *UpgradeExecutorMockRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UpgradeExecutorMock.Contract.UpgradeExecutorMockCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UpgradeExecutorMock *UpgradeExecutorMockRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.UpgradeExecutorMockTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UpgradeExecutorMock *UpgradeExecutorMockRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.UpgradeExecutorMockTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UpgradeExecutorMock.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.contract.Transact(opts, method, params...) +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) ADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) ADMINROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.ADMINROLE(&_UpgradeExecutorMock.CallOpts) +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) ADMINROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.ADMINROLE(&_UpgradeExecutorMock.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) DEFAULTADMINROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.DEFAULTADMINROLE(&_UpgradeExecutorMock.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.DEFAULTADMINROLE(&_UpgradeExecutorMock.CallOpts) +} + +// EXECUTORROLE is a free data retrieval call binding the contract method 0x07bd0265. +// +// Solidity: function EXECUTOR_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) EXECUTORROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "EXECUTOR_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// EXECUTORROLE is a free data retrieval call binding the contract method 0x07bd0265. +// +// Solidity: function EXECUTOR_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) EXECUTORROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.EXECUTORROLE(&_UpgradeExecutorMock.CallOpts) +} + +// EXECUTORROLE is a free data retrieval call binding the contract method 0x07bd0265. +// +// Solidity: function EXECUTOR_ROLE() view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) EXECUTORROLE() ([32]byte, error) { + return _UpgradeExecutorMock.Contract.EXECUTORROLE(&_UpgradeExecutorMock.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _UpgradeExecutorMock.Contract.GetRoleAdmin(&_UpgradeExecutorMock.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _UpgradeExecutorMock.Contract.GetRoleAdmin(&_UpgradeExecutorMock.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _UpgradeExecutorMock.Contract.HasRole(&_UpgradeExecutorMock.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _UpgradeExecutorMock.Contract.HasRole(&_UpgradeExecutorMock.CallOpts, role, account) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _UpgradeExecutorMock.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _UpgradeExecutorMock.Contract.SupportsInterface(&_UpgradeExecutorMock.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_UpgradeExecutorMock *UpgradeExecutorMockCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _UpgradeExecutorMock.Contract.SupportsInterface(&_UpgradeExecutorMock.CallOpts, interfaceId) +} + +// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. +// +// Solidity: function execute(address upgrade, bytes upgradeCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) Execute(opts *bind.TransactOpts, upgrade common.Address, upgradeCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "execute", upgrade, upgradeCallData) +} + +// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. +// +// Solidity: function execute(address upgrade, bytes upgradeCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) Execute(upgrade common.Address, upgradeCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.Execute(&_UpgradeExecutorMock.TransactOpts, upgrade, upgradeCallData) +} + +// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. +// +// Solidity: function execute(address upgrade, bytes upgradeCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) Execute(upgrade common.Address, upgradeCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.Execute(&_UpgradeExecutorMock.TransactOpts, upgrade, upgradeCallData) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0xbca8c7b5. +// +// Solidity: function executeCall(address target, bytes targetCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) ExecuteCall(opts *bind.TransactOpts, target common.Address, targetCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "executeCall", target, targetCallData) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0xbca8c7b5. +// +// Solidity: function executeCall(address target, bytes targetCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) ExecuteCall(target common.Address, targetCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.ExecuteCall(&_UpgradeExecutorMock.TransactOpts, target, targetCallData) +} + +// ExecuteCall is a paid mutator transaction binding the contract method 0xbca8c7b5. +// +// Solidity: function executeCall(address target, bytes targetCallData) payable returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) ExecuteCall(target common.Address, targetCallData []byte) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.ExecuteCall(&_UpgradeExecutorMock.TransactOpts, target, targetCallData) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.GrantRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.GrantRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x946d9204. +// +// Solidity: function initialize(address admin, address[] executors) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) Initialize(opts *bind.TransactOpts, admin common.Address, executors []common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "initialize", admin, executors) +} + +// Initialize is a paid mutator transaction binding the contract method 0x946d9204. +// +// Solidity: function initialize(address admin, address[] executors) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) Initialize(admin common.Address, executors []common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.Initialize(&_UpgradeExecutorMock.TransactOpts, admin, executors) +} + +// Initialize is a paid mutator transaction binding the contract method 0x946d9204. +// +// Solidity: function initialize(address admin, address[] executors) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) Initialize(admin common.Address, executors []common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.Initialize(&_UpgradeExecutorMock.TransactOpts, admin, executors) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.RenounceRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.RenounceRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.RevokeRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_UpgradeExecutorMock *UpgradeExecutorMockTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _UpgradeExecutorMock.Contract.RevokeRole(&_UpgradeExecutorMock.TransactOpts, role, account) +} + +// UpgradeExecutorMockInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockInitializedIterator struct { + Event *UpgradeExecutorMockInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UpgradeExecutorMockInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UpgradeExecutorMockInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UpgradeExecutorMockInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UpgradeExecutorMockInitialized represents a Initialized event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterInitialized(opts *bind.FilterOpts) (*UpgradeExecutorMockInitializedIterator, error) { + + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &UpgradeExecutorMockInitializedIterator{contract: _UpgradeExecutorMock.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockInitialized) (event.Subscription, error) { + + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UpgradeExecutorMockInitialized) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseInitialized(log types.Log) (*UpgradeExecutorMockInitialized, error) { + event := new(UpgradeExecutorMockInitialized) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// UpgradeExecutorMockRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleAdminChangedIterator struct { + Event *UpgradeExecutorMockRoleAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UpgradeExecutorMockRoleAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UpgradeExecutorMockRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UpgradeExecutorMockRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UpgradeExecutorMockRoleAdminChanged represents a RoleAdminChanged event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*UpgradeExecutorMockRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockRoleAdminChangedIterator{contract: _UpgradeExecutorMock.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UpgradeExecutorMockRoleAdminChanged) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseRoleAdminChanged(log types.Log) (*UpgradeExecutorMockRoleAdminChanged, error) { + event := new(UpgradeExecutorMockRoleAdminChanged) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// UpgradeExecutorMockRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleGrantedIterator struct { + Event *UpgradeExecutorMockRoleGranted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UpgradeExecutorMockRoleGrantedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UpgradeExecutorMockRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UpgradeExecutorMockRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UpgradeExecutorMockRoleGranted represents a RoleGranted event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*UpgradeExecutorMockRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockRoleGrantedIterator{contract: _UpgradeExecutorMock.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UpgradeExecutorMockRoleGranted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: function deposit() payable returns() -func (_TestWETH9 *TestWETH9TransactorSession) Deposit() (*types.Transaction, error) { - return _TestWETH9.Contract.Deposit(&_TestWETH9.TransactOpts) +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseRoleGranted(log types.Log) (*UpgradeExecutorMockRoleGranted, error) { + event := new(UpgradeExecutorMockRoleGranted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_TestWETH9 *TestWETH9Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _TestWETH9.contract.Transact(opts, "increaseAllowance", spender, addedValue) -} +// UpgradeExecutorMockRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleRevokedIterator struct { + Event *UpgradeExecutorMockRoleRevoked // Event containing the contract specifics and raw log -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_TestWETH9 *TestWETH9Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.IncreaseAllowance(&_TestWETH9.TransactOpts, spender, addedValue) -} + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_TestWETH9 *TestWETH9TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.IncreaseAllowance(&_TestWETH9.TransactOpts, spender, addedValue) + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration } -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.contract.Transact(opts, "transfer", to, amount) -} +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UpgradeExecutorMockRoleRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.Transfer(&_TestWETH9.TransactOpts, to, amount) -} + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UpgradeExecutorMockRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.Transfer(&_TestWETH9.TransactOpts, to, amount) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.contract.Transact(opts, "transferFrom", from, to, amount) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UpgradeExecutorMockRoleRevokedIterator) Error() error { + return it.fail } -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.TransferFrom(&_TestWETH9.TransactOpts, from, to, amount) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UpgradeExecutorMockRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. -// -// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) -func (_TestWETH9 *TestWETH9TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.TransferFrom(&_TestWETH9.TransactOpts, from, to, amount) +// UpgradeExecutorMockRoleRevoked represents a RoleRevoked event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: function withdraw(uint256 _amount) returns() -func (_TestWETH9 *TestWETH9Transactor) Withdraw(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.contract.Transact(opts, "withdraw", _amount) +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*UpgradeExecutorMockRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &UpgradeExecutorMockRoleRevokedIterator{contract: _UpgradeExecutorMock.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil } -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: function withdraw(uint256 _amount) returns() -func (_TestWETH9 *TestWETH9Session) Withdraw(_amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.Withdraw(&_TestWETH9.TransactOpts, _amount) +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UpgradeExecutorMockRoleRevoked) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: function withdraw(uint256 _amount) returns() -func (_TestWETH9 *TestWETH9TransactorSession) Withdraw(_amount *big.Int) (*types.Transaction, error) { - return _TestWETH9.Contract.Withdraw(&_TestWETH9.TransactOpts, _amount) +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseRoleRevoked(log types.Log) (*UpgradeExecutorMockRoleRevoked, error) { + event := new(UpgradeExecutorMockRoleRevoked) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// TestWETH9ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the TestWETH9 contract. -type TestWETH9ApprovalIterator struct { - Event *TestWETH9Approval // Event containing the contract specifics and raw log +// UpgradeExecutorMockTargetCallExecutedIterator is returned from FilterTargetCallExecuted and is used to iterate over the raw logs and unpacked data for TargetCallExecuted events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockTargetCallExecutedIterator struct { + Event *UpgradeExecutorMockTargetCallExecuted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -11132,7 +13562,7 @@ type TestWETH9ApprovalIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TestWETH9ApprovalIterator) Next() bool { +func (it *UpgradeExecutorMockTargetCallExecutedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -11141,7 +13571,7 @@ func (it *TestWETH9ApprovalIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TestWETH9Approval) + it.Event = new(UpgradeExecutorMockTargetCallExecuted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -11156,7 +13586,7 @@ func (it *TestWETH9ApprovalIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TestWETH9Approval) + it.Event = new(UpgradeExecutorMockTargetCallExecuted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -11172,61 +13602,53 @@ func (it *TestWETH9ApprovalIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TestWETH9ApprovalIterator) Error() error { +func (it *UpgradeExecutorMockTargetCallExecutedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TestWETH9ApprovalIterator) Close() error { +func (it *UpgradeExecutorMockTargetCallExecutedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TestWETH9Approval represents a Approval event raised by the TestWETH9 contract. -type TestWETH9Approval struct { - Owner common.Address - Spender common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos +// UpgradeExecutorMockTargetCallExecuted represents a TargetCallExecuted event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockTargetCallExecuted struct { + Target common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// FilterTargetCallExecuted is a free log retrieval operation binding the contract event 0x4d7dbdcc249630ec373f584267f10abf44938de920c32562f5aee93959c25258. // -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TestWETH9ApprovalIterator, error) { +// Solidity: event TargetCallExecuted(address indexed target, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterTargetCallExecuted(opts *bind.FilterOpts, target []common.Address) (*UpgradeExecutorMockTargetCallExecutedIterator, error) { - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - var spenderRule []interface{} - for _, spenderItem := range spender { - spenderRule = append(spenderRule, spenderItem) + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) } - logs, sub, err := _TestWETH9.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "TargetCallExecuted", targetRule) if err != nil { return nil, err } - return &TestWETH9ApprovalIterator{contract: _TestWETH9.contract, event: "Approval", logs: logs, sub: sub}, nil + return &UpgradeExecutorMockTargetCallExecutedIterator{contract: _UpgradeExecutorMock.contract, event: "TargetCallExecuted", logs: logs, sub: sub}, nil } -// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// WatchTargetCallExecuted is a free log subscription operation binding the contract event 0x4d7dbdcc249630ec373f584267f10abf44938de920c32562f5aee93959c25258. // -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TestWETH9Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { +// Solidity: event TargetCallExecuted(address indexed target, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchTargetCallExecuted(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockTargetCallExecuted, target []common.Address) (event.Subscription, error) { - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - var spenderRule []interface{} - for _, spenderItem := range spender { - spenderRule = append(spenderRule, spenderItem) + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) } - logs, sub, err := _TestWETH9.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "TargetCallExecuted", targetRule) if err != nil { return nil, err } @@ -11236,8 +13658,8 @@ func (_TestWETH9 *TestWETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink ch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TestWETH9Approval) - if err := _TestWETH9.contract.UnpackLog(event, "Approval", log); err != nil { + event := new(UpgradeExecutorMockTargetCallExecuted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "TargetCallExecuted", log); err != nil { return err } event.Raw = log @@ -11258,21 +13680,21 @@ func (_TestWETH9 *TestWETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink ch }), nil } -// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// ParseTargetCallExecuted is a log parse operation binding the contract event 0x4d7dbdcc249630ec373f584267f10abf44938de920c32562f5aee93959c25258. // -// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) ParseApproval(log types.Log) (*TestWETH9Approval, error) { - event := new(TestWETH9Approval) - if err := _TestWETH9.contract.UnpackLog(event, "Approval", log); err != nil { +// Solidity: event TargetCallExecuted(address indexed target, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseTargetCallExecuted(log types.Log) (*UpgradeExecutorMockTargetCallExecuted, error) { + event := new(UpgradeExecutorMockTargetCallExecuted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "TargetCallExecuted", log); err != nil { return nil, err } event.Raw = log return event, nil } -// TestWETH9TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the TestWETH9 contract. -type TestWETH9TransferIterator struct { - Event *TestWETH9Transfer // Event containing the contract specifics and raw log +// UpgradeExecutorMockUpgradeExecutedIterator is returned from FilterUpgradeExecuted and is used to iterate over the raw logs and unpacked data for UpgradeExecuted events raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockUpgradeExecutedIterator struct { + Event *UpgradeExecutorMockUpgradeExecuted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -11286,7 +13708,7 @@ type TestWETH9TransferIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *TestWETH9TransferIterator) Next() bool { +func (it *UpgradeExecutorMockUpgradeExecutedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -11295,7 +13717,7 @@ func (it *TestWETH9TransferIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(TestWETH9Transfer) + it.Event = new(UpgradeExecutorMockUpgradeExecuted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -11310,7 +13732,7 @@ func (it *TestWETH9TransferIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(TestWETH9Transfer) + it.Event = new(UpgradeExecutorMockUpgradeExecuted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -11326,61 +13748,53 @@ func (it *TestWETH9TransferIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *TestWETH9TransferIterator) Error() error { +func (it *UpgradeExecutorMockUpgradeExecutedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *TestWETH9TransferIterator) Close() error { +func (it *UpgradeExecutorMockUpgradeExecutedIterator) Close() error { it.sub.Unsubscribe() return nil } -// TestWETH9Transfer represents a Transfer event raised by the TestWETH9 contract. -type TestWETH9Transfer struct { - From common.Address - To common.Address - Value *big.Int - Raw types.Log // Blockchain specific contextual infos +// UpgradeExecutorMockUpgradeExecuted represents a UpgradeExecuted event raised by the UpgradeExecutorMock contract. +type UpgradeExecutorMockUpgradeExecuted struct { + Upgrade common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// FilterUpgradeExecuted is a free log retrieval operation binding the contract event 0x49f6851d1cd01a518db5bdea5cffbbe90276baa2595f74250b7472b96806302e. // -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TestWETH9TransferIterator, error) { +// Solidity: event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) FilterUpgradeExecuted(opts *bind.FilterOpts, upgrade []common.Address) (*UpgradeExecutorMockUpgradeExecutedIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var upgradeRule []interface{} + for _, upgradeItem := range upgrade { + upgradeRule = append(upgradeRule, upgradeItem) } - logs, sub, err := _TestWETH9.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + logs, sub, err := _UpgradeExecutorMock.contract.FilterLogs(opts, "UpgradeExecuted", upgradeRule) if err != nil { return nil, err } - return &TestWETH9TransferIterator{contract: _TestWETH9.contract, event: "Transfer", logs: logs, sub: sub}, nil + return &UpgradeExecutorMockUpgradeExecutedIterator{contract: _UpgradeExecutorMock.contract, event: "UpgradeExecuted", logs: logs, sub: sub}, nil } -// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// WatchUpgradeExecuted is a free log subscription operation binding the contract event 0x49f6851d1cd01a518db5bdea5cffbbe90276baa2595f74250b7472b96806302e. // -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TestWETH9Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { +// Solidity: event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) WatchUpgradeExecuted(opts *bind.WatchOpts, sink chan<- *UpgradeExecutorMockUpgradeExecuted, upgrade []common.Address) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var upgradeRule []interface{} + for _, upgradeItem := range upgrade { + upgradeRule = append(upgradeRule, upgradeItem) } - logs, sub, err := _TestWETH9.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + logs, sub, err := _UpgradeExecutorMock.contract.WatchLogs(opts, "UpgradeExecuted", upgradeRule) if err != nil { return nil, err } @@ -11390,8 +13804,8 @@ func (_TestWETH9 *TestWETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink ch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(TestWETH9Transfer) - if err := _TestWETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + event := new(UpgradeExecutorMockUpgradeExecuted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "UpgradeExecuted", log); err != nil { return err } event.Raw = log @@ -11412,12 +13826,12 @@ func (_TestWETH9 *TestWETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink ch }), nil } -// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// ParseUpgradeExecuted is a log parse operation binding the contract event 0x49f6851d1cd01a518db5bdea5cffbbe90276baa2595f74250b7472b96806302e. // -// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) -func (_TestWETH9 *TestWETH9Filterer) ParseTransfer(log types.Log) (*TestWETH9Transfer, error) { - event := new(TestWETH9Transfer) - if err := _TestWETH9.contract.UnpackLog(event, "Transfer", log); err != nil { +// Solidity: event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data) +func (_UpgradeExecutorMock *UpgradeExecutorMockFilterer) ParseUpgradeExecuted(log types.Log) (*UpgradeExecutorMockUpgradeExecuted, error) { + event := new(UpgradeExecutorMockUpgradeExecuted) + if err := _UpgradeExecutorMock.contract.UnpackLog(event, "UpgradeExecuted", log); err != nil { return nil, err } event.Raw = log diff --git a/solgen/go/node_interfacegen/node_interfacegen.go b/solgen/go/node_interfacegen/node_interfacegen.go index 9fc52bc68..1978bf483 100644 --- a/solgen/go/node_interfacegen/node_interfacegen.go +++ b/solgen/go/node_interfacegen/node_interfacegen.go @@ -42,7 +42,7 @@ type NodeInterfaceDebugRetryableInfo struct { // NodeInterfaceMetaData contains all meta data concerning the NodeInterface contract. var NodeInterfaceMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"leaf\",\"type\":\"uint64\"}],\"name\":\"constructOutboxProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"send\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"estimateRetryableTicket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"}],\"name\":\"findBatchContainingBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batch\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"contractCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"gasEstimateComponents\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"gasEstimate\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasEstimateForL1\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1BaseFeeEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"contractCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"gasEstimateL1Component\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"gasEstimateForL1\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1BaseFeeEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"getL1Confirmations\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNum\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"}],\"name\":\"legacyLookupMessageBatchProof\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"calldataForL1\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nitroGenesisBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"l2BlockNum\",\"type\":\"uint64\"}],\"name\":\"blockL1Num\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"l1BlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"leaf\",\"type\":\"uint64\"}],\"name\":\"constructOutboxProof\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"send\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2CallValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"excessFeeRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"callValueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"estimateRetryableTicket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"}],\"name\":\"findBatchContainingBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batch\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"contractCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"gasEstimateComponents\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"gasEstimate\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasEstimateForL1\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1BaseFeeEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"contractCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"gasEstimateL1Component\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"gasEstimateForL1\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"baseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1BaseFeeEstimate\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"getL1Confirmations\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"}],\"name\":\"l2BlockRangeForL1\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"firstBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastBlock\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNum\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"}],\"name\":\"legacyLookupMessageBatchProof\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1Dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"calldataForL1\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nitroGenesisBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", } // NodeInterfaceABI is the input ABI used to generate the binding from. @@ -191,6 +191,37 @@ func (_NodeInterface *NodeInterfaceTransactorRaw) Transact(opts *bind.TransactOp return _NodeInterface.Contract.contract.Transact(opts, method, params...) } +// BlockL1Num is a free data retrieval call binding the contract method 0x6f275ef2. +// +// Solidity: function blockL1Num(uint64 l2BlockNum) view returns(uint64 l1BlockNum) +func (_NodeInterface *NodeInterfaceCaller) BlockL1Num(opts *bind.CallOpts, l2BlockNum uint64) (uint64, error) { + var out []interface{} + err := _NodeInterface.contract.Call(opts, &out, "blockL1Num", l2BlockNum) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// BlockL1Num is a free data retrieval call binding the contract method 0x6f275ef2. +// +// Solidity: function blockL1Num(uint64 l2BlockNum) view returns(uint64 l1BlockNum) +func (_NodeInterface *NodeInterfaceSession) BlockL1Num(l2BlockNum uint64) (uint64, error) { + return _NodeInterface.Contract.BlockL1Num(&_NodeInterface.CallOpts, l2BlockNum) +} + +// BlockL1Num is a free data retrieval call binding the contract method 0x6f275ef2. +// +// Solidity: function blockL1Num(uint64 l2BlockNum) view returns(uint64 l1BlockNum) +func (_NodeInterface *NodeInterfaceCallerSession) BlockL1Num(l2BlockNum uint64) (uint64, error) { + return _NodeInterface.Contract.BlockL1Num(&_NodeInterface.CallOpts, l2BlockNum) +} + // ConstructOutboxProof is a free data retrieval call binding the contract method 0x42696350. // // Solidity: function constructOutboxProof(uint64 size, uint64 leaf) view returns(bytes32 send, bytes32 root, bytes32[] proof) @@ -303,6 +334,51 @@ func (_NodeInterface *NodeInterfaceCallerSession) GetL1Confirmations(blockHash [ return _NodeInterface.Contract.GetL1Confirmations(&_NodeInterface.CallOpts, blockHash) } +// L2BlockRangeForL1 is a free data retrieval call binding the contract method 0x48e7f811. +// +// Solidity: function l2BlockRangeForL1(uint64 blockNum) view returns(uint64 firstBlock, uint64 lastBlock) +func (_NodeInterface *NodeInterfaceCaller) L2BlockRangeForL1(opts *bind.CallOpts, blockNum uint64) (struct { + FirstBlock uint64 + LastBlock uint64 +}, error) { + var out []interface{} + err := _NodeInterface.contract.Call(opts, &out, "l2BlockRangeForL1", blockNum) + + outstruct := new(struct { + FirstBlock uint64 + LastBlock uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.FirstBlock = *abi.ConvertType(out[0], new(uint64)).(*uint64) + outstruct.LastBlock = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// L2BlockRangeForL1 is a free data retrieval call binding the contract method 0x48e7f811. +// +// Solidity: function l2BlockRangeForL1(uint64 blockNum) view returns(uint64 firstBlock, uint64 lastBlock) +func (_NodeInterface *NodeInterfaceSession) L2BlockRangeForL1(blockNum uint64) (struct { + FirstBlock uint64 + LastBlock uint64 +}, error) { + return _NodeInterface.Contract.L2BlockRangeForL1(&_NodeInterface.CallOpts, blockNum) +} + +// L2BlockRangeForL1 is a free data retrieval call binding the contract method 0x48e7f811. +// +// Solidity: function l2BlockRangeForL1(uint64 blockNum) view returns(uint64 firstBlock, uint64 lastBlock) +func (_NodeInterface *NodeInterfaceCallerSession) L2BlockRangeForL1(blockNum uint64) (struct { + FirstBlock uint64 + LastBlock uint64 +}, error) { + return _NodeInterface.Contract.L2BlockRangeForL1(&_NodeInterface.CallOpts, blockNum) +} + // LegacyLookupMessageBatchProof is a free data retrieval call binding the contract method 0x89496270. // // Solidity: function legacyLookupMessageBatchProof(uint256 batchNum, uint64 index) view returns(bytes32[] proof, uint256 path, address l2Sender, address l1Dest, uint256 l2Block, uint256 l1Block, uint256 timestamp, uint256 amount, bytes calldataForL1) diff --git a/solgen/go/ospgen/ospgen.go b/solgen/go/ospgen/ospgen.go index 83af5d9f0..34dfacadb 100644 --- a/solgen/go/ospgen/ospgen.go +++ b/solgen/go/ospgen/ospgen.go @@ -117,7 +117,7 @@ type ValueStack struct { // HashProofHelperMetaData contains all meta data concerning the HashProofHelper contract. var HashProofHelperMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fullHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"}],\"name\":\"NotProven\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"fullHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"part\",\"type\":\"bytes\"}],\"name\":\"PreimagePartProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"clearSplitProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"fullHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"}],\"name\":\"getPreimagePart\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"keccakStates\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"part\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"}],\"name\":\"proveWithFullPreimage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"fullHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offset\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"flags\",\"type\":\"uint256\"}],\"name\":\"proveWithSplitPreimage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"fullHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50611e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063ae364ac211610050578063ae364ac2146100b6578063b7465799146100c0578063d4e5dd2b146100e257600080fd5b8063740085d71461006c57806379754cba14610095575b600080fd5b61007f61007a36600461194f565b6100f5565b60405161008c91906119c1565b60405180910390f35b6100a86100a3366004611a24565b610204565b60405190815260200161008c565b6100be610767565b005b6100d36100ce366004611a80565b6107af565b60405161008c93929190611ab6565b6100a86100f0366004611ae9565b610866565b60008281526020818152604080832067ffffffffffffffff85168452909152902080546060919060ff1661016d576040517f139647920000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff841660248201526044015b60405180910390fd5b80600101805461017c90611b3d565b80601f01602080910402602001604051908101604052809291908181526020018280546101a890611b3d565b80156101f55780601f106101ca576101008083540402835291602001916101f5565b820191906000526020600020905b8154815290600101906020018083116101d857829003601f168201915b50505050509150505b92915050565b6000600182161515600283161561025c573360009081526001602081905260408220805467ffffffffffffffff19168155919061024390830182611890565b6102516002830160006118cd565b600982016000905550505b8080610270575061026e608886611b8d565b155b6102d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e4f545f424c4f434b5f414c49474e45440000000000000000000000000000006044820152606401610164565b3360009081526001602052604081206009810154909181900361031357815467ffffffffffffffff191667ffffffffffffffff871617825561038a565b815467ffffffffffffffff87811691161461038a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f444946465f4f46465345540000000000000000000000000000000000000000006044820152606401610164565b610396828989866109bd565b806103ac602067ffffffffffffffff8916611bb7565b1180156103c6575081600901548667ffffffffffffffff16105b156104fa576000818767ffffffffffffffff1611156103f6576103f38267ffffffffffffffff8916611bca565b90505b60008261040e602067ffffffffffffffff8b16611bb7565b6104189190611bca565b9050888111156104255750875b815b818110156104f657846001018b8b8381811061044557610445611bdd565b9050013560f81c60f81b908080548061045d90611b3d565b80601f810361047c5783600052602060002060ff1984168155603f9350505b506002919091019091558154600116156104a55790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806104ee90611bf3565b915050610427565b5050505b8261050c57506000925061075f915050565b60005b60208110156105dd576000610525600883611c0d565b9050610532600582611c0d565b61053d600583611b8d565b610548906005611c21565b6105529190611bb7565b90506000610561600884611b8d565b61056c906008611c21565b85600201836019811061058157610581611bdd565b600481049091015467ffffffffffffffff6008600390931683026101000a9091041690911c91506105b3908490611c21565b6105be9060f8611bca565b60ff909116901b959095179450806105d581611bf3565b91505061050f565b50604051806040016040528060011515815260200183600101805461060190611b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461062d90611b3d565b801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050919092525050600085815260208181526040808320865467ffffffffffffffff16845282529091208251815460ff19169015151781559082015160018201906106c69082611c9d565b5050825460405167ffffffffffffffff909116915085907ff88493e8ac6179d3c1ba8712068367d7ecdd6f30d3b5de01198e7a449fe2802c9061070d906001870190611d5d565b60405180910390a33360009081526001602081905260408220805467ffffffffffffffff19168155919061074390830182611890565b6107516002830160006118cd565b600982016000905550505050505b949350505050565b3360009081526001602081905260408220805467ffffffffffffffff19168155919061079590830182611890565b6107a36002830160006118cd565b60098201600090555050565b60016020819052600091825260409091208054918101805467ffffffffffffffff909316926107dd90611b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461080990611b3d565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050908060090154905083565b60008383604051610878929190611de8565b6040519081900390209050606067ffffffffffffffff83168411156109195760006108ad67ffffffffffffffff851686611bca565b905060208111156108bc575060205b8567ffffffffffffffff8516866108d38483611bb7565b926108e093929190611df8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450505050505b60408051808201825260018082526020808301858152600087815280835285812067ffffffffffffffff8a1682529092529390208251815460ff191690151517815592519192919082019061096e9082611c9d565b509050508267ffffffffffffffff16827ff88493e8ac6179d3c1ba8712068367d7ecdd6f30d3b5de01198e7a449fe2802c836040516109ad91906119c1565b60405180910390a3509392505050565b828290508460090160008282546109d49190611bb7565b90915550505b811580156109e6575080155b610c3e5760005b6088811015610b1257600083821015610a2357848483818110610a1257610a12611bdd565b919091013560f81c9150610a449050565b838203610a2e576001175b610a3a60016088611bca565b8203610a44576080175b6000610a51600884611c0d565b9050610a5e600582611c0d565b610a69600583611b8d565b610a74906005611c21565b610a7e9190611bb7565b9050610a8b600884611b8d565b610a96906008611c21565b67ffffffffffffffff168260ff1667ffffffffffffffff16901b876002018260198110610ac557610ac5611bdd565b60048104909101805467ffffffffffffffff60086003909416939093026101000a808204841690941883168402929093021990921617905550819050610b0a81611bf3565b9150506109ed565b50610b1b6118dc565b60005b6019811015610b8f57856002018160198110610b3c57610b3c611bdd565b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff16828260198110610b7857610b78611bdd565b602002015280610b8781611bf3565b915050610b1e565b50610b9981610c44565b905060005b6019811015610c1757818160198110610bb957610bb9611bdd565b6020020151866002018260198110610bd357610bd3611bdd565b600491828204019190066008026101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508080610c0f90611bf3565b915050610b9e565b506088831015610c275750610c3e565b610c348360888187611df8565b93509350506109da565b50505050565b610c4c6118dc565b610c546118fb565b610c5c6118fb565b610c646118dc565b600060405180610300016040528060018152602001618082815260200167800000000000808a8152602001678000000080008000815260200161808b81526020016380000001815260200167800000008000808181526020016780000000000080098152602001608a81526020016088815260200163800080098152602001638000000a8152602001638000808b815260200167800000000000008b8152602001678000000000008089815260200167800000000000800381526020016780000000000080028152602001678000000000000080815260200161800a815260200167800000008000000a81526020016780000000800080818152602001678000000000008080815260200163800000018152602001678000000080008008815250905060005b6018811015611885576080878101516060808a01516040808c01516020808e01518e511890911890921890931889526101208b01516101008c015160e08d015160c08e015160a08f0151181818189089018190526101c08b01516101a08c01516101808d01516101608e01516101408f0151181818189289019283526102608b01516102408c01516102208d01516102008e01516101e08f015118181818918901919091526103008a01516102e08b01516102c08c01516102a08d01516102808e01511818181892880183905267ffffffffffffffff6002820216678000000000000000918290041790921886525104856002602002015160020267ffffffffffffffff16178560006020020151188460016020020152678000000000000000856003602002015181610ebf57610ebf611b77565b04856003602002015160020267ffffffffffffffff16178560016020020151188460026020020152678000000000000000856004602002015181610f0557610f05611b77565b04856004602002015160020267ffffffffffffffff161785600260058110610f2f57610f2f611bdd565b6020020151186060850152845167800000000000000090865160608089015193909204600290910267ffffffffffffffff1617909118608086810191825286518a5118808b5287516020808d018051909218825289516040808f0180519092189091528a518e8801805190911890528a51948e0180519095189094528901805160a08e0180519091189052805160c08e0180519091189052805160e08e018051909118905280516101008e0180519091189052516101208d018051909118905291880180516101408d018051909118905280516101608d018051909118905280516101808d018051909118905280516101a08d0180519091189052516101c08c018051909118905292870180516101e08c018051909118905280516102008c018051909118905280516102208c018051909118905280516102408c0180519091189052516102608b018051909118905281516102808b018051909118905281516102a08b018051909118905281516102c08b018051909118905281516102e08b018051909118905290516103008a018051909118905290845251631000000090602089015167ffffffffffffffff6410000000009091021691900417610100840152604087015167200000000000000090604089015167ffffffffffffffff6008909102169190041761016084015260608701516280000090606089015167ffffffffffffffff65020000000000909102169190041761026084015260808701516540000000000090608089015167ffffffffffffffff6204000090910216919004176102c084015260a08701516780000000000000009004876005602002015160020267ffffffffffffffff1617836002601981106111b1576111b1611bdd565b602002015260c08701516210000081046510000000000090910267ffffffffffffffff9081169190911760a085015260e0880151664000000000000081046104009091028216176101a08501526101008801516208000081046520000000000090910282161761020085015261012088015160048082029092166740000000000000009091041761030085015261014088015161014089015167ffffffffffffffff674000000000000000909102169190041760808401526101608701516704000000000000009061016089015167ffffffffffffffff6040909102169190041760e0840152610180870151622000009061018089015167ffffffffffffffff6508000000000090910216919004176101408401526101a08701516602000000000000906101a089015167ffffffffffffffff61800090910216919004176102408401526101c08701516008906101c089015167ffffffffffffffff67200000000000000090910216919004176102a08401526101e0870151641000000000906101e089015167ffffffffffffffff6310000000909102169190041760208401526102008088015161020089015167ffffffffffffffff668000000000000090910216919004176101208401526102208701516480000000009061022089015167ffffffffffffffff63020000009091021691900417610180840152610240870151650800000000009061024089015167ffffffffffffffff6220000090910216919004176101e08401526102608701516101009061026089015167ffffffffffffffff67010000000000000090910216919004176102e08401526102808701516420000000009061028089015167ffffffffffffffff6308000000909102169190041760608401526102a087015165100000000000906102a089015167ffffffffffffffff62100000909102169190041760c08401526102c08701516302000000906102c089015167ffffffffffffffff64800000000090910216919004176101c08401526102e0870151670100000000000000906102e089015167ffffffffffffffff61010090910216919004176102208401526103008701516604000000000000900487601860200201516140000267ffffffffffffffff1617836014602002015282600a602002015183600560200201511916836000602002015118876000602002015282600b602002015183600660200201511916836001602002015118876001602002015282600c602002015183600760200201511916836002602002015118876002602002015282600d602002015183600860200201511916836003602002015118876003602002015282600e602002015183600960200201511916836004602002015118876004602002015282600f602002015183600a602002015119168360056020020151188760056020020152826010602002015183600b602002015119168360066020020151188760066020020152826011602002015183600c602002015119168360076020020151188760076020020152826012602002015183600d602002015119168360086020020151188760086020020152826013602002015183600e602002015119168360096020020151188760096020020152826014602002015183600f6020020151191683600a60200201511887600a602002015282601560200201518360106020020151191683600b60200201511887600b602002015282601660200201518360116020020151191683600c60200201511887600c602002015282601760200201518360126020020151191683600d60200201511887600d602002015282601860200201518360136020020151191683600e60200201511887600e602002015282600060200201518360146020020151191683600f60200201511887600f602002015282600160200201518360156020020151191683601060200201511887601060200201528260026020020151836016602002015119168360116020020151188760116020020152826003602002015183601760200201511916836012602002015118876012602002015282600460200201518360186020020151191683601360200201511887601360200201528260056020020151836000602002015119168360146020020151188760146020020152826006602002015183600160200201511916836015602002015118876015602002015282600760200201518360026020020151191683601660200201511887601660200201528260086020020151836003602002015119168360176020020151188760176020020152826009602002015183600460200201511916836018602002015118876018602002015281816018811061187357611873611bdd565b60200201518751188752600101610d8a565b509495945050505050565b50805461189c90611b3d565b6000825580601f106118ac575050565b601f0160209004906000526020600020908101906118ca9190611919565b50565b506118ca906007810190611919565b6040518061032001604052806019906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b5b8082111561192e576000815560010161191a565b5090565b803567ffffffffffffffff8116811461194a57600080fd5b919050565b6000806040838503121561196257600080fd5b8235915061197260208401611932565b90509250929050565b6000815180845260005b818110156119a157602081850181015186830182015201611985565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006119d4602083018461197b565b9392505050565b60008083601f8401126119ed57600080fd5b50813567ffffffffffffffff811115611a0557600080fd5b602083019150836020828501011115611a1d57600080fd5b9250929050565b60008060008060608587031215611a3a57600080fd5b843567ffffffffffffffff811115611a5157600080fd5b611a5d878288016119db565b9095509350611a70905060208601611932565b9396929550929360400135925050565b600060208284031215611a9257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119d457600080fd5b67ffffffffffffffff84168152606060208201526000611ad9606083018561197b565b9050826040830152949350505050565b600080600060408486031215611afe57600080fd5b833567ffffffffffffffff811115611b1557600080fd5b611b21868287016119db565b9094509250611b34905060208501611932565b90509250925092565b600181811c90821680611b5157607f821691505b602082108103611b7157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b600082611b9c57611b9c611b77565b500690565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fe576101fe611ba1565b818103818111156101fe576101fe611ba1565b634e487b7160e01b600052603260045260246000fd5b60006000198203611c0657611c06611ba1565b5060010190565b600082611c1c57611c1c611b77565b500490565b80820281158282048414176101fe576101fe611ba1565b634e487b7160e01b600052604160045260246000fd5b601f821115611c9857600081815260208120601f850160051c81016020861015611c755750805b601f850160051c820191505b81811015611c9457828155600101611c81565b5050505b505050565b815167ffffffffffffffff811115611cb757611cb7611c38565b611ccb81611cc58454611b3d565b84611c4e565b602080601f831160018114611d005760008415611ce85750858301515b600019600386901b1c1916600185901b178555611c94565b600085815260208120601f198616915b82811015611d2f57888601518255948401946001909101908401611d10565b5085821015611d4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835260008454611d7181611b3d565b80848701526040600180841660008114611d925760018114611dac57611dda565b60ff198516838a01528284151560051b8a01019550611dda565b896000528660002060005b85811015611dd25781548b8201860152908301908801611db7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b60008085851115611e0857600080fd5b83861115611e1557600080fd5b505082019391909203915056fea264697066735822122062fc5c963b0191d18adc1676c966d70ae115ebd72d6ddb33c3dba3d1278f6d0c64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50611e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063ae364ac211610050578063ae364ac2146100b6578063b7465799146100c0578063d4e5dd2b146100e257600080fd5b8063740085d71461006c57806379754cba14610095575b600080fd5b61007f61007a36600461194f565b6100f5565b60405161008c91906119c1565b60405180910390f35b6100a86100a3366004611a24565b610204565b60405190815260200161008c565b6100be610767565b005b6100d36100ce366004611a80565b6107af565b60405161008c93929190611ab6565b6100a86100f0366004611ae9565b610866565b60008281526020818152604080832067ffffffffffffffff85168452909152902080546060919060ff1661016d576040517f139647920000000000000000000000000000000000000000000000000000000081526004810185905267ffffffffffffffff841660248201526044015b60405180910390fd5b80600101805461017c90611b3d565b80601f01602080910402602001604051908101604052809291908181526020018280546101a890611b3d565b80156101f55780601f106101ca576101008083540402835291602001916101f5565b820191906000526020600020905b8154815290600101906020018083116101d857829003601f168201915b50505050509150505b92915050565b6000600182161515600283161561025c573360009081526001602081905260408220805467ffffffffffffffff19168155919061024390830182611890565b6102516002830160006118cd565b600982016000905550505b8080610270575061026e608886611b8d565b155b6102d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e4f545f424c4f434b5f414c49474e45440000000000000000000000000000006044820152606401610164565b3360009081526001602052604081206009810154909181900361031357815467ffffffffffffffff191667ffffffffffffffff871617825561038a565b815467ffffffffffffffff87811691161461038a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f444946465f4f46465345540000000000000000000000000000000000000000006044820152606401610164565b610396828989866109bd565b806103ac602067ffffffffffffffff8916611bb7565b1180156103c6575081600901548667ffffffffffffffff16105b156104fa576000818767ffffffffffffffff1611156103f6576103f38267ffffffffffffffff8916611bca565b90505b60008261040e602067ffffffffffffffff8b16611bb7565b6104189190611bca565b9050888111156104255750875b815b818110156104f657846001018b8b8381811061044557610445611bdd565b9050013560f81c60f81b908080548061045d90611b3d565b80601f810361047c5783600052602060002060ff1984168155603f9350505b506002919091019091558154600116156104a55790600052602060002090602091828204019190065b909190919091601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555080806104ee90611bf3565b915050610427565b5050505b8261050c57506000925061075f915050565b60005b60208110156105dd576000610525600883611c0d565b9050610532600582611c0d565b61053d600583611b8d565b610548906005611c21565b6105529190611bb7565b90506000610561600884611b8d565b61056c906008611c21565b85600201836019811061058157610581611bdd565b600481049091015467ffffffffffffffff6008600390931683026101000a9091041690911c91506105b3908490611c21565b6105be9060f8611bca565b60ff909116901b959095179450806105d581611bf3565b91505061050f565b50604051806040016040528060011515815260200183600101805461060190611b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461062d90611b3d565b801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050919092525050600085815260208181526040808320865467ffffffffffffffff16845282529091208251815460ff19169015151781559082015160018201906106c69082611c9d565b5050825460405167ffffffffffffffff909116915085907ff88493e8ac6179d3c1ba8712068367d7ecdd6f30d3b5de01198e7a449fe2802c9061070d906001870190611d5d565b60405180910390a33360009081526001602081905260408220805467ffffffffffffffff19168155919061074390830182611890565b6107516002830160006118cd565b600982016000905550505050505b949350505050565b3360009081526001602081905260408220805467ffffffffffffffff19168155919061079590830182611890565b6107a36002830160006118cd565b60098201600090555050565b60016020819052600091825260409091208054918101805467ffffffffffffffff909316926107dd90611b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461080990611b3d565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050908060090154905083565b60008383604051610878929190611de8565b6040519081900390209050606067ffffffffffffffff83168411156109195760006108ad67ffffffffffffffff851686611bca565b905060208111156108bc575060205b8567ffffffffffffffff8516866108d38483611bb7565b926108e093929190611df8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450505050505b60408051808201825260018082526020808301858152600087815280835285812067ffffffffffffffff8a1682529092529390208251815460ff191690151517815592519192919082019061096e9082611c9d565b509050508267ffffffffffffffff16827ff88493e8ac6179d3c1ba8712068367d7ecdd6f30d3b5de01198e7a449fe2802c836040516109ad91906119c1565b60405180910390a3509392505050565b828290508460090160008282546109d49190611bb7565b90915550505b811580156109e6575080155b610c3e5760005b6088811015610b1257600083821015610a2357848483818110610a1257610a12611bdd565b919091013560f81c9150610a449050565b838203610a2e576001175b610a3a60016088611bca565b8203610a44576080175b6000610a51600884611c0d565b9050610a5e600582611c0d565b610a69600583611b8d565b610a74906005611c21565b610a7e9190611bb7565b9050610a8b600884611b8d565b610a96906008611c21565b67ffffffffffffffff168260ff1667ffffffffffffffff16901b876002018260198110610ac557610ac5611bdd565b60048104909101805467ffffffffffffffff60086003909416939093026101000a808204841690941883168402929093021990921617905550819050610b0a81611bf3565b9150506109ed565b50610b1b6118dc565b60005b6019811015610b8f57856002018160198110610b3c57610b3c611bdd565b600491828204019190066008029054906101000a900467ffffffffffffffff1667ffffffffffffffff16828260198110610b7857610b78611bdd565b602002015280610b8781611bf3565b915050610b1e565b50610b9981610c44565b905060005b6019811015610c1757818160198110610bb957610bb9611bdd565b6020020151866002018260198110610bd357610bd3611bdd565b600491828204019190066008026101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508080610c0f90611bf3565b915050610b9e565b506088831015610c275750610c3e565b610c348360888187611df8565b93509350506109da565b50505050565b610c4c6118dc565b610c546118fb565b610c5c6118fb565b610c646118dc565b600060405180610300016040528060018152602001618082815260200167800000000000808a8152602001678000000080008000815260200161808b81526020016380000001815260200167800000008000808181526020016780000000000080098152602001608a81526020016088815260200163800080098152602001638000000a8152602001638000808b815260200167800000000000008b8152602001678000000000008089815260200167800000000000800381526020016780000000000080028152602001678000000000000080815260200161800a815260200167800000008000000a81526020016780000000800080818152602001678000000000008080815260200163800000018152602001678000000080008008815250905060005b6018811015611885576080878101516060808a01516040808c01516020808e01518e511890911890921890931889526101208b01516101008c015160e08d015160c08e015160a08f0151181818189089018190526101c08b01516101a08c01516101808d01516101608e01516101408f0151181818189289019283526102608b01516102408c01516102208d01516102008e01516101e08f015118181818918901919091526103008a01516102e08b01516102c08c01516102a08d01516102808e01511818181892880183905267ffffffffffffffff6002820216678000000000000000918290041790921886525104856002602002015160020267ffffffffffffffff16178560006020020151188460016020020152678000000000000000856003602002015181610ebf57610ebf611b77565b04856003602002015160020267ffffffffffffffff16178560016020020151188460026020020152678000000000000000856004602002015181610f0557610f05611b77565b04856004602002015160020267ffffffffffffffff161785600260058110610f2f57610f2f611bdd565b6020020151186060850152845167800000000000000090865160608089015193909204600290910267ffffffffffffffff1617909118608086810191825286518a5118808b5287516020808d018051909218825289516040808f0180519092189091528a518e8801805190911890528a51948e0180519095189094528901805160a08e0180519091189052805160c08e0180519091189052805160e08e018051909118905280516101008e0180519091189052516101208d018051909118905291880180516101408d018051909118905280516101608d018051909118905280516101808d018051909118905280516101a08d0180519091189052516101c08c018051909118905292870180516101e08c018051909118905280516102008c018051909118905280516102208c018051909118905280516102408c0180519091189052516102608b018051909118905281516102808b018051909118905281516102a08b018051909118905281516102c08b018051909118905281516102e08b018051909118905290516103008a018051909118905290845251631000000090602089015167ffffffffffffffff6410000000009091021691900417610100840152604087015167200000000000000090604089015167ffffffffffffffff6008909102169190041761016084015260608701516280000090606089015167ffffffffffffffff65020000000000909102169190041761026084015260808701516540000000000090608089015167ffffffffffffffff6204000090910216919004176102c084015260a08701516780000000000000009004876005602002015160020267ffffffffffffffff1617836002601981106111b1576111b1611bdd565b602002015260c08701516210000081046510000000000090910267ffffffffffffffff9081169190911760a085015260e0880151664000000000000081046104009091028216176101a08501526101008801516208000081046520000000000090910282161761020085015261012088015160048082029092166740000000000000009091041761030085015261014088015161014089015167ffffffffffffffff674000000000000000909102169190041760808401526101608701516704000000000000009061016089015167ffffffffffffffff6040909102169190041760e0840152610180870151622000009061018089015167ffffffffffffffff6508000000000090910216919004176101408401526101a08701516602000000000000906101a089015167ffffffffffffffff61800090910216919004176102408401526101c08701516008906101c089015167ffffffffffffffff67200000000000000090910216919004176102a08401526101e0870151641000000000906101e089015167ffffffffffffffff6310000000909102169190041760208401526102008088015161020089015167ffffffffffffffff668000000000000090910216919004176101208401526102208701516480000000009061022089015167ffffffffffffffff63020000009091021691900417610180840152610240870151650800000000009061024089015167ffffffffffffffff6220000090910216919004176101e08401526102608701516101009061026089015167ffffffffffffffff67010000000000000090910216919004176102e08401526102808701516420000000009061028089015167ffffffffffffffff6308000000909102169190041760608401526102a087015165100000000000906102a089015167ffffffffffffffff62100000909102169190041760c08401526102c08701516302000000906102c089015167ffffffffffffffff64800000000090910216919004176101c08401526102e0870151670100000000000000906102e089015167ffffffffffffffff61010090910216919004176102208401526103008701516604000000000000900487601860200201516140000267ffffffffffffffff1617836014602002015282600a602002015183600560200201511916836000602002015118876000602002015282600b602002015183600660200201511916836001602002015118876001602002015282600c602002015183600760200201511916836002602002015118876002602002015282600d602002015183600860200201511916836003602002015118876003602002015282600e602002015183600960200201511916836004602002015118876004602002015282600f602002015183600a602002015119168360056020020151188760056020020152826010602002015183600b602002015119168360066020020151188760066020020152826011602002015183600c602002015119168360076020020151188760076020020152826012602002015183600d602002015119168360086020020151188760086020020152826013602002015183600e602002015119168360096020020151188760096020020152826014602002015183600f6020020151191683600a60200201511887600a602002015282601560200201518360106020020151191683600b60200201511887600b602002015282601660200201518360116020020151191683600c60200201511887600c602002015282601760200201518360126020020151191683600d60200201511887600d602002015282601860200201518360136020020151191683600e60200201511887600e602002015282600060200201518360146020020151191683600f60200201511887600f602002015282600160200201518360156020020151191683601060200201511887601060200201528260026020020151836016602002015119168360116020020151188760116020020152826003602002015183601760200201511916836012602002015118876012602002015282600460200201518360186020020151191683601360200201511887601360200201528260056020020151836000602002015119168360146020020151188760146020020152826006602002015183600160200201511916836015602002015118876015602002015282600760200201518360026020020151191683601660200201511887601660200201528260086020020151836003602002015119168360176020020151188760176020020152826009602002015183600460200201511916836018602002015118876018602002015281816018811061187357611873611bdd565b60200201518751188752600101610d8a565b509495945050505050565b50805461189c90611b3d565b6000825580601f106118ac575050565b601f0160209004906000526020600020908101906118ca9190611919565b50565b506118ca906007810190611919565b6040518061032001604052806019906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b5b8082111561192e576000815560010161191a565b5090565b803567ffffffffffffffff8116811461194a57600080fd5b919050565b6000806040838503121561196257600080fd5b8235915061197260208401611932565b90509250929050565b6000815180845260005b818110156119a157602081850181015186830182015201611985565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006119d4602083018461197b565b9392505050565b60008083601f8401126119ed57600080fd5b50813567ffffffffffffffff811115611a0557600080fd5b602083019150836020828501011115611a1d57600080fd5b9250929050565b60008060008060608587031215611a3a57600080fd5b843567ffffffffffffffff811115611a5157600080fd5b611a5d878288016119db565b9095509350611a70905060208601611932565b9396929550929360400135925050565b600060208284031215611a9257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119d457600080fd5b67ffffffffffffffff84168152606060208201526000611ad9606083018561197b565b9050826040830152949350505050565b600080600060408486031215611afe57600080fd5b833567ffffffffffffffff811115611b1557600080fd5b611b21868287016119db565b9094509250611b34905060208501611932565b90509250925092565b600181811c90821680611b5157607f821691505b602082108103611b7157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b600082611b9c57611b9c611b77565b500690565b634e487b7160e01b600052601160045260246000fd5b808201808211156101fe576101fe611ba1565b818103818111156101fe576101fe611ba1565b634e487b7160e01b600052603260045260246000fd5b60006000198203611c0657611c06611ba1565b5060010190565b600082611c1c57611c1c611b77565b500490565b80820281158282048414176101fe576101fe611ba1565b634e487b7160e01b600052604160045260246000fd5b601f821115611c9857600081815260208120601f850160051c81016020861015611c755750805b601f850160051c820191505b81811015611c9457828155600101611c81565b5050505b505050565b815167ffffffffffffffff811115611cb757611cb7611c38565b611ccb81611cc58454611b3d565b84611c4e565b602080601f831160018114611d005760008415611ce85750858301515b600019600386901b1c1916600185901b178555611c94565b600085815260208120601f198616915b82811015611d2f57888601518255948401946001909101908401611d10565b5085821015611d4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835260008454611d7181611b3d565b80848701526040600180841660008114611d925760018114611dac57611dda565b60ff198516838a01528284151560051b8a01019550611dda565b896000528660002060005b85811015611dd25781548b8201860152908301908801611db7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b60008085851115611e0857600080fd5b83861115611e1557600080fd5b505082019391909203915056fea26469706673582212205bf3b2f1cd3a754caf4d1f28562afe80355ad2b4deb7689de96f5dd6dc59e6d164736f6c63430008110033", } // HashProofHelperABI is the input ABI used to generate the binding from. @@ -997,7 +997,7 @@ func (_IOneStepProver *IOneStepProverCallerSession) ExecuteOneStep(execCtx Execu // OneStepProofEntryMetaData contains all meta data concerning the OneStepProofEntry contract. var OneStepProofEntryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIOneStepProver\",\"name\":\"prover0_\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProver\",\"name\":\"proverMem_\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProver\",\"name\":\"proverMath_\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProver\",\"name\":\"proverHostIo_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"execState\",\"type\":\"tuple\"}],\"name\":\"getMachineHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"execCtx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"machineStep\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveOneStep\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"afterHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prover0\",\"outputs\":[{\"internalType\":\"contractIOneStepProver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proverHostIo\",\"outputs\":[{\"internalType\":\"contractIOneStepProver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proverMath\",\"outputs\":[{\"internalType\":\"contractIOneStepProver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proverMem\",\"outputs\":[{\"internalType\":\"contractIOneStepProver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162002c3b38038062002c3b8339810160408190526200003491620000a5565b600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805491909316911617905562000102565b80516001600160a01b0381168114620000a057600080fd5b919050565b60008060008060808587031215620000bc57600080fd5b620000c78562000088565b9350620000d76020860162000088565b9250620000e76040860162000088565b9150620000f76060860162000088565b905092959194509250565b612b2980620001126000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806366e5d9c31161005057806366e5d9c3146100cd578063b5112fd2146100e0578063c39619c41461010157600080fd5b80631f128bc01461007757806330a5509f146100a75780635f52fd7c146100ba575b600080fd5b60015461008a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461008a906001600160a01b031681565b60035461008a906001600160a01b031681565b60025461008a906001600160a01b031681565b6100f36100ee366004611f66565b610114565b60405190815260200161009e565b6100f361010f366004612002565b6107b9565b600061011e611e0d565b610126611eb6565b6040805160208101909152606081526040805180820190915260008082526020820152600061015688888361090c565b90955090508861016586610afc565b146101b75760405162461bcd60e51b815260206004820152601360248201527f4d414348494e455f4245464f52455f484153480000000000000000000000000060448201526064015b60405180910390fd5b6000855160028111156101cc576101cc612014565b146102b3576101d9611f00565b6101e4898984610ce4565b60808801519093509091506101f882610dc0565b146102455760405162461bcd60e51b815260206004820152601060248201527f4241445f474c4f42414c5f53544154450000000000000000000000000000000060448201526064016101ae565b60018651600281111561025a5761025a612014565b14801561026557508a155b801561028657508b3561027a82602001515190565b67ffffffffffffffff16105b156102aa5761029d86608001518d60400135610e50565b96505050505050506107b0565b61029d86610afc565b650800000000006102c58b6001612040565b036102e357600285526102d785610afc565b955050505050506107b0565b6102ee88888361103a565b90945090506102fe8888836110e6565b809250819450505084610100015161032b8660a0015163ffffffff1686866111c19092919063ffffffff16565b146103785760405162461bcd60e51b815260206004820152600c60248201527f4d4f44554c45535f524f4f54000000000000000000000000000000000000000060448201526064016101ae565b6040805160208101909152606081526040805160208101909152606081526103a18a8a85611214565b90945092506103b18a8a856110e6565b935091506103c08a8a856110e6565b809450819250505060006103e98860e0015163ffffffff16868561126e9092919063ffffffff16565b9050600061040c8960c0015163ffffffff1683856112b99092919063ffffffff16565b9050876060015181146104615760405162461bcd60e51b815260206004820152601260248201527f4241445f46554e4354494f4e535f524f4f54000000000000000000000000000060448201526064016101ae565b506104749250899150839050818b612053565b975097505060008460a0015163ffffffff16905060018560e00181815161049b919061207d565b63ffffffff1690525081516000602861ffff8316108015906104c25750603561ffff831611155b806104e25750603661ffff8316108015906104e25750603e61ffff831611155b806104f1575061ffff8216603f145b80610500575061ffff82166040145b1561051757506001546001600160a01b031661070c565b61ffff82166045148061052e575061ffff82166050145b8061055c5750604661ffff83161080159061055c5750610550600960466120a1565b61ffff168261ffff1611155b8061058a5750606761ffff83161080159061058a575061057e600260676120a1565b61ffff168261ffff1611155b806105aa5750606a61ffff8316108015906105aa5750607861ffff831611155b806105d85750605161ffff8316108015906105d857506105cc600960516120a1565b61ffff168261ffff1611155b806106065750607961ffff83161080159061060657506105fa600260796120a1565b61ffff168261ffff1611155b806106265750607c61ffff8316108015906106265750608a61ffff831611155b80610635575061ffff821660a7145b80610652575061ffff821660ac1480610652575061ffff821660ad145b80610672575060c061ffff831610801590610672575060c461ffff831611155b80610692575060bc61ffff831610801590610692575060bf61ffff831611155b156106a957506002546001600160a01b031661070c565b61801061ffff8316108015906106c5575061801361ffff831611155b806106e7575061802061ffff8316108015906106e7575061802261ffff831611155b156106fe57506003546001600160a01b031661070c565b506000546001600160a01b03165b806001600160a01b03166397cc779a8e8989888f8f6040518763ffffffff1660e01b815260040161074296959493929190612200565b600060405180830381865afa15801561075f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078791908101906127fa565b90975095506107978584886111c1565b6101008801526107a687610afc565b9750505050505050505b95945050505050565b600060016107cd60a084016080850161291d565b60028111156107de576107de612014565b0361084c576107fa6107f536849003840184612941565b610dc0565b6040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101919091526051015b604051602081830303815290604052805190602001209050919050565b600261085e60a084016080850161291d565b600281111561086f5761086f612014565b036108bf576108866107f536849003840184612941565b6040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603081019190915260500161082f565b60405162461bcd60e51b815260206004820152601260248201527f4241445f4d414348494e455f535441545553000000000000000000000000000060448201526064016101ae565b919050565b610914611e0d565b8160008061092387878561134a565b9350905060ff811660000361093b57600091506109ab565b8060ff1660010361094f57600191506109ab565b8060ff1660020361096357600291506109ab565b60405162461bcd60e51b815260206004820152601360248201527f554e4b4e4f574e5f4d4143485f5354415455530000000000000000000000000060448201526064016101ae565b50604080516060808201835291810191825290815260006020820152604080516060808201835291810191825290815260006020820152600080600080610a08604051806040016040528060608152602001600080191681525090565b6000610a158e8e8c611380565b9a509750610a248e8e8c611380565b9a509650610a338e8e8c611493565b9a509150610a428e8e8c6115d3565b9a509550610a518e8e8c6115ef565b9a509450610a608e8e8c6115ef565b9a509350610a6f8e8e8c6115ef565b9a509250610a7e8e8e8c6115d3565b809b5081925050506040518061012001604052808a6002811115610aa457610aa4612014565b81526020018981526020018881526020018381526020018781526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff168152602001828152509a50505050505050505050935093915050565b60008082516002811115610b1257610b12612014565b03610bec57610b248260200151611653565b610b318360400151611653565b610b3e84606001516116e9565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc0161082f565b600182516002811115610c0157610c01612014565b03610c445760808201516040517f4d616368696e652066696e69736865643a0000000000000000000000000000006020820152603181019190915260510161082f565b600282516002811115610c5957610c59612014565b03610c9c5760808201516040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603081019190915260500161082f565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f535441545553000000000000000000000000000000000060448201526064016101ae565b610cec611f00565b81610cf5611f25565b610cfd611f25565b60005b600260ff82161015610d4857610d178888866115d3565b848360ff1660028110610d2c57610d2c612a03565b6020020191909152935080610d4081612a19565b915050610d00565b5060005b600260ff82161015610da357610d6388888661178d565b838360ff1660028110610d7857610d78612a03565b67ffffffffffffffff9093166020939093020191909152935080610d9b81612a19565b915050610d4c565b506040805180820190915291825260208201529590945092505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d0161082f565b60408051600380825260808201909252600091829190816020015b6040805180820190915260008082526020820152815260200190600190039081610e6b575050604080518082018252600080825260209182018190528251808401909352600483529082015290915081600081518110610ecd57610ecd612a03565b6020026020010181905250610f106000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b81600181518110610f2357610f23612a03565b6020026020010181905250610f666000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b81600281518110610f7957610f79612a03565b6020908102919091018101919091526040805180830182528381528151808301909252808252600092820192909252610fc960408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061102b81610afc565b96505050505050505b92915050565b611042611eb6565b6040805160608101825260008082526020820181905291810182905283919060008060006110718a8a886115d3565b965094506110808a8a886117ec565b9650935061108f8a8a886115d3565b9650925061109e8a8a886115d3565b965091506110ad8a8a886115ef565b6040805160a08101825297885260208801969096529486019390935250606084015263ffffffff16608083015290969095509350505050565b60408051602081019091526060815281600061110386868461134a565b92509050600060ff821667ffffffffffffffff811115611125576111256123b6565b60405190808252806020026020018201604052801561114e578160200160208202803683370190505b50905060005b8260ff168160ff1610156111a55761116d8888866115d3565b838360ff168151811061118257611182612a03565b60200260200101819650828152505050808061119d90612a19565b915050611154565b5060405180602001604052808281525093505050935093915050565b600061120c84846111d185611868565b6040518060400160405280601381526020017f4d6f64756c65206d65726b6c6520747265653a00000000000000000000000000815250611903565b949350505050565b6040805180820190915260008082526020820152816000806112378787856119d8565b93509150611246878785611a31565b6040805180820190915261ffff90941684526020840191909152919791965090945050505050565b600061120c848461127e85611a86565b6040518060400160405280601881526020017f496e737472756374696f6e206d65726b6c6520747265653a0000000000000000815250611903565b6040517f46756e6374696f6e3a000000000000000000000000000000000000000000000060208201526029810182905260009081906049016040516020818303038152906040528051906020012090506107b08585836040518060400160405280601581526020017f46756e6374696f6e206d65726b6c6520747265653a0000000000000000000000815250611903565b60008184848281811061135f5761135f612a03565b919091013560f81c925081905061137581612a38565b915050935093915050565b6040805160608082018352918101918252908152600060208201528160006113a98686846115d3565b9250905060006113ba878785611a31565b9350905060008167ffffffffffffffff8111156113d9576113d96123b6565b60405190808252806020026020018201604052801561141e57816020015b60408051808201909152600080825260208201528152602001906001900390816113f75790505b50905060005b815181101561146c57611438898987611af9565b83838151811061144a5761144a612a03565b602002602001018197508290525050808061146490612a38565b915050611424565b50604080516060810182529081019182529081526020810192909252509590945092505050565b6040805180820190915260608152600060208201528160006114b68686846115d3565b9250905060608686848181106114ce576114ce612a03565b909101357fff000000000000000000000000000000000000000000000000000000000000001615905061156e578261150581612a38565b604080516001808252818301909252919550909150816020015b611527611f43565b81526020019060019003908161151f579050509050611547878785611c04565b8260008151811061155a5761155a612a03565b6020026020010181955082905250506115b2565b8261157881612a38565b604080516000808252602082019092529195509091506115ae565b61159b611f43565b8152602001906001900390816115935790505b5090505b60405180604001604052808281526020018381525093505050935093915050565b600081816115e2868684611a31565b9097909650945050505050565b600081815b600481101561164a5760088363ffffffff16901b925085858381811061161c5761161c612a03565b919091013560f81c9390931792508161163481612a38565b925050808061164290612a38565b9150506115f4565b50935093915050565b60208101518151515160005b818110156116e257835161167c906116779083611c9d565b611cd5565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806116da90612a38565b91505061165f565b5050919050565b602081015160005b825151811015611787576117218360000151828151811061171457611714612a03565b6020026020010151611cf2565b6040517f537461636b206672616d6520737461636b3a00000000000000000000000000006020820152603281019190915260528101839052607201604051602081830303815290604052805190602001209150808061177f90612a38565b9150506116f1565b50919050565b600081815b600881101561164a5760088367ffffffffffffffff16901b92508585838181106117be576117be612a03565b919091013560f81c939093179250816117d681612a38565b92505080806117e490612a38565b915050611792565b6040805160608101825260008082526020820181905291810191909152816000808061181988888661178d565b9450925061182888888661178d565b945091506118378888866115d3565b6040805160608101825267ffffffffffffffff96871681529490951660208501529383015250969095509350505050565b6000816000015161187c8360200151611d8b565b6040848101516060860151608087015192517f4d6f64756c653a000000000000000000000000000000000000000000000000006020820152602781019590955260478501939093526067840152608783019190915260e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a782015260ab0161082f565b8160005b8551518110156119cf578460011660000361196b5782828760000151838151811061193457611934612a03565b602002602001015160405160200161194e93929190612a70565b6040516020818303038152906040528051906020012091506119b6565b828660000151828151811061198257611982612a03565b60200260200101518360405160200161199d93929190612a70565b6040516020818303038152906040528051906020012091505b60019490941c93806119c781612a38565b915050611907565b50949350505050565b600081815b600281101561164a5760088361ffff16901b9250858583818110611a0357611a03612a03565b919091013560f81c93909317925081611a1b81612a38565b9250508080611a2990612a38565b9150506119dd565b600081815b602081101561164a57600883901b9250858583818110611a5857611a58612a03565b919091013560f81c93909317925081611a7081612a38565b9250508080611a7e90612a38565b915050611a36565b60008160000151826020015160405160200161082f9291907f496e737472756374696f6e3a0000000000000000000000000000000000000000815260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600c830152600e820152602e0190565b6040805180820190915260008082526020820152816000858583818110611b2257611b22612a03565b919091013560f81c9150829050611b3881612a38565b925050611b43600690565b6006811115611b5457611b54612014565b60ff168160ff161115611ba95760405162461bcd60e51b815260206004820152600e60248201527f4241445f56414c55455f5459504500000000000000000000000000000000000060448201526064016101ae565b6000611bb6878785611a31565b809450819250505060405180604001604052808360ff166006811115611bde57611bde612014565b6006811115611bef57611bef612014565b81526020018281525093505050935093915050565b611c0c611f43565b81611c27604080518082019091526000808252602082015290565b6000806000611c37898987611af9565b95509350611c468989876115d3565b95509250611c558989876115ef565b95509150611c648989876115ef565b60408051608081018252968752602087019590955263ffffffff9384169486019490945290911660608401525090969095509350505050565b60408051808201909152600080825260208201528251805183908110611cc557611cc5612a03565b6020026020010151905092915050565b60008160000151826020015160405160200161082f929190612aa7565b6000611d018260000151611cd5565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b909116607082015260740161082f565b805160208083015160408085015190517f4d656d6f72793a00000000000000000000000000000000000000000000000000938101939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c094851b811660278501529190931b16602f820152603781019190915260009060570161082f565b6040805161012081019091528060008152602001611e4260408051606080820183529181019182529081526000602082015290565b8152602001611e6860408051606080820183529181019182529081526000602082015290565b8152602001611e8d604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b6040805160a0810182526000808252825160608101845281815260208181018390529381019190915290918201905b81526000602082018190526040820181905260609091015290565b6040518060400160405280611f13611f25565b8152602001611f20611f25565b905290565b60405180604001604052806002906020820280368337509192915050565b6040805160c0810190915260006080820181815260a08301919091528190611ee5565b600080600080600085870360c0811215611f7f57600080fd5b6060811215611f8d57600080fd5b50859450606086013593506080860135925060a086013567ffffffffffffffff80821115611fba57600080fd5b818801915088601f830112611fce57600080fd5b813581811115611fdd57600080fd5b896020828501011115611fef57600080fd5b9699959850939650602001949392505050565b600060a0828403121561178757600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110345761103461202a565b6000808585111561206357600080fd5b8386111561207057600080fd5b5050820193919092039150565b63ffffffff81811683821601908082111561209a5761209a61202a565b5092915050565b61ffff81811683821601908082111561209a5761209a61202a565b600381106120cc576120cc612014565b9052565b8051600781106120e2576120e2612014565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b8084101561213f5761212b8286516120d0565b938201936001939093019290850190612118565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156121be57845161218a8582516120d0565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101612175565b509687015197909601969096525093949350505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60006101c08835835260208901356001600160a01b03811680821461222457600080fd5b80602086015250506040890135604084015280606084015261224981840189516120bc565b5060208701516101206101e08401526122666102e08401826120ef565b905060408801517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4080858403016102008601526122a383836120ef565b925060608a015191508085840301610220860152506122c28282612153565b915050608088015161024084015260a08801516122e861026085018263ffffffff169052565b5060c088015163ffffffff81166102808501525060e088015163ffffffff81166102a0850152506101008801516102c084015261237e608084018880518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b855161ffff1661016084015260208601516101808401528281036101a08401526123a98185876121d5565b9998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156123ef576123ef6123b6565b60405290565b6040516020810167ffffffffffffffff811182821017156123ef576123ef6123b6565b6040516080810167ffffffffffffffff811182821017156123ef576123ef6123b6565b60405160a0810167ffffffffffffffff811182821017156123ef576123ef6123b6565b6040516060810167ffffffffffffffff811182821017156123ef576123ef6123b6565b604051610120810167ffffffffffffffff811182821017156123ef576123ef6123b6565b604051601f8201601f1916810167ffffffffffffffff811182821017156124ce576124ce6123b6565b604052919050565b600381106124e357600080fd5b50565b8051610907816124d6565b600067ffffffffffffffff82111561250b5761250b6123b6565b5060051b60200190565b60006040828403121561252757600080fd5b61252f6123cc565b905081516007811061254057600080fd5b808252506020820151602082015292915050565b6000604080838503121561256757600080fd5b61256f6123cc565b9150825167ffffffffffffffff8082111561258957600080fd5b8185019150602080838803121561259f57600080fd5b6125a76123f5565b8351838111156125b657600080fd5b80850194505087601f8501126125cb57600080fd5b835192506125e06125db846124f1565b6124a5565b83815260069390931b840182019282810190898511156125ff57600080fd5b948301945b84861015612625576126168a87612515565b82529486019490830190612604565b8252508552948501519484019490945250909392505050565b805163ffffffff8116811461090757600080fd5b6000604080838503121561266557600080fd5b61266d6123cc565b9150825167ffffffffffffffff81111561268657600080fd5b8301601f8101851361269757600080fd5b805160206126a76125db836124f1565b82815260a092830284018201928282019190898511156126c657600080fd5b948301945b8486101561272f5780868b0312156126e35760008081fd5b6126eb612418565b6126f58b88612515565b81528787015185820152606061270c81890161263e565b8983015261271c6080890161263e565b90820152835294850194918301916126cb565b50808752505080860151818601525050505092915050565b67ffffffffffffffff811681146124e357600080fd5b600081830360e081121561277057600080fd5b61277861243b565b9150825182526060601f198201121561279057600080fd5b5061279961245e565b60208301516127a781612747565b815260408301516127b781612747565b8060208301525060608301516040820152806020830152506080820151604082015260a082015160608201526127ef60c0830161263e565b608082015292915050565b60008061010080848603121561280f57600080fd5b835167ffffffffffffffff8082111561282757600080fd5b90850190610120828803121561283c57600080fd5b612844612481565b61284d836124e6565b815260208301518281111561286157600080fd5b61286d89828601612554565b60208301525060408301518281111561288557600080fd5b61289189828601612554565b6040830152506060830151828111156128a957600080fd5b6128b589828601612652565b606083015250608083015160808201526128d160a0840161263e565b60a08201526128e260c0840161263e565b60c08201526128f360e0840161263e565b60e0820152838301518482015280955050505050612914846020850161275d565b90509250929050565b60006020828403121561292f57600080fd5b813561293a816124d6565b9392505050565b60006080828403121561295357600080fd5b61295b6123cc565b83601f84011261296a57600080fd5b6129726123cc565b80604085018681111561298457600080fd5b855b8181101561299e578035845260209384019301612986565b5081845286605f8701126129b157600080fd5b6129b96123cc565b925082915060808601878111156129cf57600080fd5b808210156129f45781356129e281612747565b845260209384019391909101906129cf565b50506020830152509392505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103612a2f57612a2f61202a565b60010192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6957612a6961202a565b5060010190565b6000845160005b81811015612a915760208188018101518583015201612a77565b5091909101928352506020820152604001919050565b7f56616c75653a00000000000000000000000000000000000000000000000000008152600060078410612adc57612adc612014565b5060f89290921b600683015260078201526027019056fea26469706673582212209418f3a323f28f9fcfc55e8ecd1a364476b75046066acd7f64c37249f0ccb94a64736f6c63430008110033", + Bin: "0x60806040523480156200001157600080fd5b5060405162002c3b38038062002c3b8339810160408190526200003491620000a5565b600080546001600160a01b039586166001600160a01b031991821617909155600180549486169482169490941790935560028054928516928416929092179091556003805491909316911617905562000102565b80516001600160a01b0381168114620000a057600080fd5b919050565b60008060008060808587031215620000bc57600080fd5b620000c78562000088565b9350620000d76020860162000088565b9250620000e76040860162000088565b9150620000f76060860162000088565b905092959194509250565b612b2980620001126000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806366e5d9c31161005057806366e5d9c3146100cd578063b5112fd2146100e0578063c39619c41461010157600080fd5b80631f128bc01461007757806330a5509f146100a75780635f52fd7c146100ba575b600080fd5b60015461008a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461008a906001600160a01b031681565b60035461008a906001600160a01b031681565b60025461008a906001600160a01b031681565b6100f36100ee366004611f66565b610114565b60405190815260200161009e565b6100f361010f366004612002565b6107b9565b600061011e611e0d565b610126611eb6565b6040805160208101909152606081526040805180820190915260008082526020820152600061015688888361090c565b90955090508861016586610afc565b146101b75760405162461bcd60e51b815260206004820152601360248201527f4d414348494e455f4245464f52455f484153480000000000000000000000000060448201526064015b60405180910390fd5b6000855160028111156101cc576101cc612014565b146102b3576101d9611f00565b6101e4898984610ce4565b60808801519093509091506101f882610dc0565b146102455760405162461bcd60e51b815260206004820152601060248201527f4241445f474c4f42414c5f53544154450000000000000000000000000000000060448201526064016101ae565b60018651600281111561025a5761025a612014565b14801561026557508a155b801561028657508b3561027a82602001515190565b67ffffffffffffffff16105b156102aa5761029d86608001518d60400135610e50565b96505050505050506107b0565b61029d86610afc565b650800000000006102c58b6001612040565b036102e357600285526102d785610afc565b955050505050506107b0565b6102ee88888361103a565b90945090506102fe8888836110e6565b809250819450505084610100015161032b8660a0015163ffffffff1686866111c19092919063ffffffff16565b146103785760405162461bcd60e51b815260206004820152600c60248201527f4d4f44554c45535f524f4f54000000000000000000000000000000000000000060448201526064016101ae565b6040805160208101909152606081526040805160208101909152606081526103a18a8a85611214565b90945092506103b18a8a856110e6565b935091506103c08a8a856110e6565b809450819250505060006103e98860e0015163ffffffff16868561126e9092919063ffffffff16565b9050600061040c8960c0015163ffffffff1683856112b99092919063ffffffff16565b9050876060015181146104615760405162461bcd60e51b815260206004820152601260248201527f4241445f46554e4354494f4e535f524f4f54000000000000000000000000000060448201526064016101ae565b506104749250899150839050818b612053565b975097505060008460a0015163ffffffff16905060018560e00181815161049b919061207d565b63ffffffff1690525081516000602861ffff8316108015906104c25750603561ffff831611155b806104e25750603661ffff8316108015906104e25750603e61ffff831611155b806104f1575061ffff8216603f145b80610500575061ffff82166040145b1561051757506001546001600160a01b031661070c565b61ffff82166045148061052e575061ffff82166050145b8061055c5750604661ffff83161080159061055c5750610550600960466120a1565b61ffff168261ffff1611155b8061058a5750606761ffff83161080159061058a575061057e600260676120a1565b61ffff168261ffff1611155b806105aa5750606a61ffff8316108015906105aa5750607861ffff831611155b806105d85750605161ffff8316108015906105d857506105cc600960516120a1565b61ffff168261ffff1611155b806106065750607961ffff83161080159061060657506105fa600260796120a1565b61ffff168261ffff1611155b806106265750607c61ffff8316108015906106265750608a61ffff831611155b80610635575061ffff821660a7145b80610652575061ffff821660ac1480610652575061ffff821660ad145b80610672575060c061ffff831610801590610672575060c461ffff831611155b80610692575060bc61ffff831610801590610692575060bf61ffff831611155b156106a957506002546001600160a01b031661070c565b61801061ffff8316108015906106c5575061801361ffff831611155b806106e7575061802061ffff8316108015906106e7575061802261ffff831611155b156106fe57506003546001600160a01b031661070c565b506000546001600160a01b03165b806001600160a01b03166397cc779a8e8989888f8f6040518763ffffffff1660e01b815260040161074296959493929190612200565b600060405180830381865afa15801561075f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261078791908101906127fa565b90975095506107978584886111c1565b6101008801526107a687610afc565b9750505050505050505b95945050505050565b600060016107cd60a084016080850161291d565b60028111156107de576107de612014565b0361084c576107fa6107f536849003840184612941565b610dc0565b6040517f4d616368696e652066696e69736865643a000000000000000000000000000000602082015260318101919091526051015b604051602081830303815290604052805190602001209050919050565b600261085e60a084016080850161291d565b600281111561086f5761086f612014565b036108bf576108866107f536849003840184612941565b6040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603081019190915260500161082f565b60405162461bcd60e51b815260206004820152601260248201527f4241445f4d414348494e455f535441545553000000000000000000000000000060448201526064016101ae565b919050565b610914611e0d565b8160008061092387878561134a565b9350905060ff811660000361093b57600091506109ab565b8060ff1660010361094f57600191506109ab565b8060ff1660020361096357600291506109ab565b60405162461bcd60e51b815260206004820152601360248201527f554e4b4e4f574e5f4d4143485f5354415455530000000000000000000000000060448201526064016101ae565b50604080516060808201835291810191825290815260006020820152604080516060808201835291810191825290815260006020820152600080600080610a08604051806040016040528060608152602001600080191681525090565b6000610a158e8e8c611380565b9a509750610a248e8e8c611380565b9a509650610a338e8e8c611493565b9a509150610a428e8e8c6115d3565b9a509550610a518e8e8c6115ef565b9a509450610a608e8e8c6115ef565b9a509350610a6f8e8e8c6115ef565b9a509250610a7e8e8e8c6115d3565b809b5081925050506040518061012001604052808a6002811115610aa457610aa4612014565b81526020018981526020018881526020018381526020018781526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff168152602001828152509a50505050505050505050935093915050565b60008082516002811115610b1257610b12612014565b03610bec57610b248260200151611653565b610b318360400151611653565b610b3e84606001516116e9565b608085015160a086015160c087015160e0808901516101008a01516040517f4d616368696e652072756e6e696e673a00000000000000000000000000000000602082015260308101999099526050890197909752607088019590955260908701939093527fffffffff0000000000000000000000000000000000000000000000000000000091831b821660b0870152821b811660b486015291901b1660b883015260bc82015260dc0161082f565b600182516002811115610c0157610c01612014565b03610c445760808201516040517f4d616368696e652066696e69736865643a0000000000000000000000000000006020820152603181019190915260510161082f565b600282516002811115610c5957610c59612014565b03610c9c5760808201516040517f4d616368696e65206572726f7265643a000000000000000000000000000000006020820152603081019190915260500161082f565b60405162461bcd60e51b815260206004820152600f60248201527f4241445f4d4143485f535441545553000000000000000000000000000000000060448201526064016101ae565b610cec611f00565b81610cf5611f25565b610cfd611f25565b60005b600260ff82161015610d4857610d178888866115d3565b848360ff1660028110610d2c57610d2c612a03565b6020020191909152935080610d4081612a19565b915050610d00565b5060005b600260ff82161015610da357610d6388888661178d565b838360ff1660028110610d7857610d78612a03565b67ffffffffffffffff9093166020939093020191909152935080610d9b81612a19565b915050610d4c565b506040805180820190915291825260208201529590945092505050565b80518051602091820151828401518051908401516040517f476c6f62616c2073746174653a0000000000000000000000000000000000000095810195909552602d850193909352604d8401919091527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b8116606d85015291901b166075820152600090607d0161082f565b60408051600380825260808201909252600091829190816020015b6040805180820190915260008082526020820152815260200190600190039081610e6b575050604080518082018252600080825260209182018190528251808401909352600483529082015290915081600081518110610ecd57610ecd612a03565b6020026020010181905250610f106000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b81600181518110610f2357610f23612a03565b6020026020010181905250610f666000604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b81600281518110610f7957610f79612a03565b6020908102919091018101919091526040805180830182528381528151808301909252808252600092820192909252610fc960408051606080820183529181019182529081526000602082015290565b604080518082018252606080825260006020808401829052845161012081018652828152908101879052938401859052908301829052608083018a905260a0830181905260c0830181905260e083015261010082018890529061102b81610afc565b96505050505050505b92915050565b611042611eb6565b6040805160608101825260008082526020820181905291810182905283919060008060006110718a8a886115d3565b965094506110808a8a886117ec565b9650935061108f8a8a886115d3565b9650925061109e8a8a886115d3565b965091506110ad8a8a886115ef565b6040805160a08101825297885260208801969096529486019390935250606084015263ffffffff16608083015290969095509350505050565b60408051602081019091526060815281600061110386868461134a565b92509050600060ff821667ffffffffffffffff811115611125576111256123b6565b60405190808252806020026020018201604052801561114e578160200160208202803683370190505b50905060005b8260ff168160ff1610156111a55761116d8888866115d3565b838360ff168151811061118257611182612a03565b60200260200101819650828152505050808061119d90612a19565b915050611154565b5060405180602001604052808281525093505050935093915050565b600061120c84846111d185611868565b6040518060400160405280601381526020017f4d6f64756c65206d65726b6c6520747265653a00000000000000000000000000815250611903565b949350505050565b6040805180820190915260008082526020820152816000806112378787856119d8565b93509150611246878785611a31565b6040805180820190915261ffff90941684526020840191909152919791965090945050505050565b600061120c848461127e85611a86565b6040518060400160405280601881526020017f496e737472756374696f6e206d65726b6c6520747265653a0000000000000000815250611903565b6040517f46756e6374696f6e3a000000000000000000000000000000000000000000000060208201526029810182905260009081906049016040516020818303038152906040528051906020012090506107b08585836040518060400160405280601581526020017f46756e6374696f6e206d65726b6c6520747265653a0000000000000000000000815250611903565b60008184848281811061135f5761135f612a03565b919091013560f81c925081905061137581612a38565b915050935093915050565b6040805160608082018352918101918252908152600060208201528160006113a98686846115d3565b9250905060006113ba878785611a31565b9350905060008167ffffffffffffffff8111156113d9576113d96123b6565b60405190808252806020026020018201604052801561141e57816020015b60408051808201909152600080825260208201528152602001906001900390816113f75790505b50905060005b815181101561146c57611438898987611af9565b83838151811061144a5761144a612a03565b602002602001018197508290525050808061146490612a38565b915050611424565b50604080516060810182529081019182529081526020810192909252509590945092505050565b6040805180820190915260608152600060208201528160006114b68686846115d3565b9250905060608686848181106114ce576114ce612a03565b909101357fff000000000000000000000000000000000000000000000000000000000000001615905061156e578261150581612a38565b604080516001808252818301909252919550909150816020015b611527611f43565b81526020019060019003908161151f579050509050611547878785611c04565b8260008151811061155a5761155a612a03565b6020026020010181955082905250506115b2565b8261157881612a38565b604080516000808252602082019092529195509091506115ae565b61159b611f43565b8152602001906001900390816115935790505b5090505b60405180604001604052808281526020018381525093505050935093915050565b600081816115e2868684611a31565b9097909650945050505050565b600081815b600481101561164a5760088363ffffffff16901b925085858381811061161c5761161c612a03565b919091013560f81c9390931792508161163481612a38565b925050808061164290612a38565b9150506115f4565b50935093915050565b60208101518151515160005b818110156116e257835161167c906116779083611c9d565b611cd5565b6040517f56616c756520737461636b3a00000000000000000000000000000000000000006020820152602c810191909152604c8101849052606c0160405160208183030381529060405280519060200120925080806116da90612a38565b91505061165f565b5050919050565b602081015160005b825151811015611787576117218360000151828151811061171457611714612a03565b6020026020010151611cf2565b6040517f537461636b206672616d6520737461636b3a00000000000000000000000000006020820152603281019190915260528101839052607201604051602081830303815290604052805190602001209150808061177f90612a38565b9150506116f1565b50919050565b600081815b600881101561164a5760088367ffffffffffffffff16901b92508585838181106117be576117be612a03565b919091013560f81c939093179250816117d681612a38565b92505080806117e490612a38565b915050611792565b6040805160608101825260008082526020820181905291810191909152816000808061181988888661178d565b9450925061182888888661178d565b945091506118378888866115d3565b6040805160608101825267ffffffffffffffff96871681529490951660208501529383015250969095509350505050565b6000816000015161187c8360200151611d8b565b6040848101516060860151608087015192517f4d6f64756c653a000000000000000000000000000000000000000000000000006020820152602781019590955260478501939093526067840152608783019190915260e01b7fffffffff000000000000000000000000000000000000000000000000000000001660a782015260ab0161082f565b8160005b8551518110156119cf578460011660000361196b5782828760000151838151811061193457611934612a03565b602002602001015160405160200161194e93929190612a70565b6040516020818303038152906040528051906020012091506119b6565b828660000151828151811061198257611982612a03565b60200260200101518360405160200161199d93929190612a70565b6040516020818303038152906040528051906020012091505b60019490941c93806119c781612a38565b915050611907565b50949350505050565b600081815b600281101561164a5760088361ffff16901b9250858583818110611a0357611a03612a03565b919091013560f81c93909317925081611a1b81612a38565b9250508080611a2990612a38565b9150506119dd565b600081815b602081101561164a57600883901b9250858583818110611a5857611a58612a03565b919091013560f81c93909317925081611a7081612a38565b9250508080611a7e90612a38565b915050611a36565b60008160000151826020015160405160200161082f9291907f496e737472756374696f6e3a0000000000000000000000000000000000000000815260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600c830152600e820152602e0190565b6040805180820190915260008082526020820152816000858583818110611b2257611b22612a03565b919091013560f81c9150829050611b3881612a38565b925050611b43600690565b6006811115611b5457611b54612014565b60ff168160ff161115611ba95760405162461bcd60e51b815260206004820152600e60248201527f4241445f56414c55455f5459504500000000000000000000000000000000000060448201526064016101ae565b6000611bb6878785611a31565b809450819250505060405180604001604052808360ff166006811115611bde57611bde612014565b6006811115611bef57611bef612014565b81526020018281525093505050935093915050565b611c0c611f43565b81611c27604080518082019091526000808252602082015290565b6000806000611c37898987611af9565b95509350611c468989876115d3565b95509250611c558989876115ef565b95509150611c648989876115ef565b60408051608081018252968752602087019590955263ffffffff9384169486019490945290911660608401525090969095509350505050565b60408051808201909152600080825260208201528251805183908110611cc557611cc5612a03565b6020026020010151905092915050565b60008160000151826020015160405160200161082f929190612aa7565b6000611d018260000151611cd5565b602080840151604080860151606087015191517f537461636b206672616d653a000000000000000000000000000000000000000094810194909452602c840194909452604c8301919091527fffffffff0000000000000000000000000000000000000000000000000000000060e093841b8116606c840152921b909116607082015260740161082f565b805160208083015160408085015190517f4d656d6f72793a00000000000000000000000000000000000000000000000000938101939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c094851b811660278501529190931b16602f820152603781019190915260009060570161082f565b6040805161012081019091528060008152602001611e4260408051606080820183529181019182529081526000602082015290565b8152602001611e6860408051606080820183529181019182529081526000602082015290565b8152602001611e8d604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b6040805160a0810182526000808252825160608101845281815260208181018390529381019190915290918201905b81526000602082018190526040820181905260609091015290565b6040518060400160405280611f13611f25565b8152602001611f20611f25565b905290565b60405180604001604052806002906020820280368337509192915050565b6040805160c0810190915260006080820181815260a08301919091528190611ee5565b600080600080600085870360c0811215611f7f57600080fd5b6060811215611f8d57600080fd5b50859450606086013593506080860135925060a086013567ffffffffffffffff80821115611fba57600080fd5b818801915088601f830112611fce57600080fd5b813581811115611fdd57600080fd5b896020828501011115611fef57600080fd5b9699959850939650602001949392505050565b600060a0828403121561178757600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110345761103461202a565b6000808585111561206357600080fd5b8386111561207057600080fd5b5050820193919092039150565b63ffffffff81811683821601908082111561209a5761209a61202a565b5092915050565b61ffff81811683821601908082111561209a5761209a61202a565b600381106120cc576120cc612014565b9052565b8051600781106120e2576120e2612014565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b8084101561213f5761212b8286516120d0565b938201936001939093019290850190612118565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156121be57845161218a8582516120d0565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101612175565b509687015197909601969096525093949350505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60006101c08835835260208901356001600160a01b03811680821461222457600080fd5b80602086015250506040890135604084015280606084015261224981840189516120bc565b5060208701516101206101e08401526122666102e08401826120ef565b905060408801517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4080858403016102008601526122a383836120ef565b925060608a015191508085840301610220860152506122c28282612153565b915050608088015161024084015260a08801516122e861026085018263ffffffff169052565b5060c088015163ffffffff81166102808501525060e088015163ffffffff81166102a0850152506101008801516102c084015261237e608084018880518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b855161ffff1661016084015260208601516101808401528281036101a08401526123a98185876121d5565b9998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156123ef576123ef6123b6565b60405290565b6040516020810167ffffffffffffffff811182821017156123ef576123ef6123b6565b6040516080810167ffffffffffffffff811182821017156123ef576123ef6123b6565b60405160a0810167ffffffffffffffff811182821017156123ef576123ef6123b6565b6040516060810167ffffffffffffffff811182821017156123ef576123ef6123b6565b604051610120810167ffffffffffffffff811182821017156123ef576123ef6123b6565b604051601f8201601f1916810167ffffffffffffffff811182821017156124ce576124ce6123b6565b604052919050565b600381106124e357600080fd5b50565b8051610907816124d6565b600067ffffffffffffffff82111561250b5761250b6123b6565b5060051b60200190565b60006040828403121561252757600080fd5b61252f6123cc565b905081516007811061254057600080fd5b808252506020820151602082015292915050565b6000604080838503121561256757600080fd5b61256f6123cc565b9150825167ffffffffffffffff8082111561258957600080fd5b8185019150602080838803121561259f57600080fd5b6125a76123f5565b8351838111156125b657600080fd5b80850194505087601f8501126125cb57600080fd5b835192506125e06125db846124f1565b6124a5565b83815260069390931b840182019282810190898511156125ff57600080fd5b948301945b84861015612625576126168a87612515565b82529486019490830190612604565b8252508552948501519484019490945250909392505050565b805163ffffffff8116811461090757600080fd5b6000604080838503121561266557600080fd5b61266d6123cc565b9150825167ffffffffffffffff81111561268657600080fd5b8301601f8101851361269757600080fd5b805160206126a76125db836124f1565b82815260a092830284018201928282019190898511156126c657600080fd5b948301945b8486101561272f5780868b0312156126e35760008081fd5b6126eb612418565b6126f58b88612515565b81528787015185820152606061270c81890161263e565b8983015261271c6080890161263e565b90820152835294850194918301916126cb565b50808752505080860151818601525050505092915050565b67ffffffffffffffff811681146124e357600080fd5b600081830360e081121561277057600080fd5b61277861243b565b9150825182526060601f198201121561279057600080fd5b5061279961245e565b60208301516127a781612747565b815260408301516127b781612747565b8060208301525060608301516040820152806020830152506080820151604082015260a082015160608201526127ef60c0830161263e565b608082015292915050565b60008061010080848603121561280f57600080fd5b835167ffffffffffffffff8082111561282757600080fd5b90850190610120828803121561283c57600080fd5b612844612481565b61284d836124e6565b815260208301518281111561286157600080fd5b61286d89828601612554565b60208301525060408301518281111561288557600080fd5b61289189828601612554565b6040830152506060830151828111156128a957600080fd5b6128b589828601612652565b606083015250608083015160808201526128d160a0840161263e565b60a08201526128e260c0840161263e565b60c08201526128f360e0840161263e565b60e0820152838301518482015280955050505050612914846020850161275d565b90509250929050565b60006020828403121561292f57600080fd5b813561293a816124d6565b9392505050565b60006080828403121561295357600080fd5b61295b6123cc565b83601f84011261296a57600080fd5b6129726123cc565b80604085018681111561298457600080fd5b855b8181101561299e578035845260209384019301612986565b5081845286605f8701126129b157600080fd5b6129b96123cc565b925082915060808601878111156129cf57600080fd5b808210156129f45781356129e281612747565b845260209384019391909101906129cf565b50506020830152509392505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103612a2f57612a2f61202a565b60010192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a6957612a6961202a565b5060010190565b6000845160005b81811015612a915760208188018101518583015201612a77565b5091909101928352506020820152604001919050565b7f56616c75653a00000000000000000000000000000000000000000000000000008152600060078410612adc57612adc612014565b5060f89290921b600683015260078201526027019056fea2646970667358221220a7481ba109a271f66c96537528555ab0dbade4371ec3dfbeb4f218707f7a435164736f6c63430008110033", } // OneStepProofEntryABI is the input ABI used to generate the binding from. @@ -1356,7 +1356,7 @@ func (_OneStepProofEntry *OneStepProofEntryCallerSession) ProverMem() (common.Ad // OneStepProofEntryLibMetaData contains all meta data concerning the OneStepProofEntryLib contract. var OneStepProofEntryLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201164eb13ea71df8bf202477ed5677c94a6a12b52a8d5eeed231d865b9d1ead7864736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205c6a4b615b00d4b9666a59f434d68a2897c9120453e16ab066655ab38ce28c9c64736f6c63430008110033", } // OneStepProofEntryLibABI is the input ABI used to generate the binding from. @@ -1529,7 +1529,7 @@ func (_OneStepProofEntryLib *OneStepProofEntryLibTransactorRaw) Transact(opts *b // OneStepProver0MetaData contains all meta data concerning the OneStepProver0 contract. var OneStepProver0MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"startMach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"startMod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"opcode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"argumentData\",\"type\":\"uint256\"}],\"internalType\":\"structInstruction\",\"name\":\"inst\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"executeOneStep\",\"outputs\":[{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"mach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"mod\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50612d08806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e3660046122f0565b61005a565b6040516100519291906124f9565b60405180910390f35b61006261216f565b61006a612218565b610073876129ca565b915061008436879003870187612acf565b905060006100956020870187612b66565b905061226261ffff82166100ac575061046a61044c565b60001961ffff8316016100c2575061047561044c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161ffff8316016100f6575061047c61044c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff061ffff83160161012a57506105b561044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff761ffff83160161015e575061073361044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff661ffff831601610192575061089761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef61ffff8316016101c65750610a3b61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd61ffff8316016101fa5750610f3b61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffc61ffff83160161022e5750610faa61044c565b601f1961ffff831601610244575061103861044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf61ffff831601610278575061107a61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd61ffff8316016102ac57506110bf61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc61ffff8316016102e057506110e761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffe61ffff831601610314575061111761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ffff83160161034857506111b461044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe561ffff83160161037c57506111c161044c565b604161ffff8316108015906103965750604461ffff831611155b156103a4575061123061044c565b61ffff821661800514806103bd575061ffff8216618006145b156103cb57506113a161044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff861ffff8316016103ff575061147261044c565b60405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f4f50434f444500000000000000000000000000000000000060448201526064015b60405180910390fd5b61045d84848989898663ffffffff16565b5050965096945050505050565b505060029092525050565b5050505050565b600061048b8660600151611481565b9050600481515160068111156104a3576104a36123ca565b036104c9578560025b908160028111156104bf576104bf6123ca565b8152505050610475565b600681515160068111156104df576104df6123ca565b1461052c5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f52455455524e5f50435f54595045000000000000000000006044820152606401610443565b805160209081015190819081901c604082901c606083901c156105915760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f52455455524e5f50435f44415441000000000000000000006044820152606401610443565b63ffffffff92831660e08b015290821660c08a01521660a088015250505050505050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff0000000000000000169290921790820152610624905b602087015190611552565b60006106338660600151611562565b905061067e6106738260400151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602088015190611552565b6106bc6106738260600151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602084013563ffffffff811681146107165760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660c08701525050600060e090940193909352505050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff000000000000000016929092179082015261079b90610619565b6107d96106198660a00151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b6108176106198560800151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b6020808401359081901c604082901c156108735760405162461bcd60e51b815260206004820152601a60248201527f4241445f43524f53535f4d4f44554c455f43414c4c5f444154410000000000006044820152606401610443565b63ffffffff90811660a08801521660c08601525050600060e0909301929092525050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff00000000000000001692909217908201526108ff90610619565b61093d6106198660a00151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b61097b6106198560800151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b600061098a8660600151611562565b9050806060015163ffffffff166000036109a6578560026104ac565b602084013563ffffffff81168114610a005760405162461bcd60e51b815260206004820152601d60248201527f4241445f43414c4c45525f494e5445524e414c5f43414c4c5f444154410000006044820152606401610443565b604082015163ffffffff1660a08801526060820151610a20908290612ba0565b63ffffffff1660c08801525050600060e08601525050505050565b600080610a53610a4e88602001516115de565b611603565b9050600080600080806000610a746040518060200160405280606081525090565b610a7f8b8b876116c0565b95509350610a8e8b8b87611728565b9096509450610a9e8b8b87611744565b95509250610aad8b8b876116c0565b95509150610abc8b8b87611728565b9097509450610acc8b8b8761177a565b6040517f43616c6c20696e6469726563743a00000000000000000000000000000000000060208201527fffffffffffffffff00000000000000000000000000000000000000000000000060c088901b16602e8201526036810189905290965090915060009060560160408051601f19818403018152919052805160209182012091508d01358114610b9f5760405162461bcd60e51b815260206004820152601660248201527f4241445f43414c4c5f494e4449524543545f44415441000000000000000000006044820152606401610443565b610bb68267ffffffffffffffff871686868c611855565b90508d604001518114610c0b5760405162461bcd60e51b815260206004820152600f60248201527f4241445f5441424c45535f524f4f5400000000000000000000000000000000006044820152606401610443565b8267ffffffffffffffff168963ffffffff1610610c3657505060028d52506104759650505050505050565b50505050506000610c57604080518082019091526000808252602082015290565b604080516020810190915260608152610c718a8a86611728565b94509250610c808a8a86611949565b94509150610c8f8a8a8661177a565b945090506000610cac8263ffffffff808b169087908790611a5416565b9050868114610cfd5760405162461bcd60e51b815260206004820152601160248201527f4241445f454c454d454e54535f524f4f540000000000000000000000000000006044820152606401610443565b858414610d2d578d60025b90816002811115610d1b57610d1b6123ca565b81525050505050505050505050610475565b600483516006811115610d4257610d426123ca565b03610d4f578d6002610d08565b600583516006811115610d6457610d646123ca565b03610dca576020830151985063ffffffff89168914610dc55760405162461bcd60e51b815260206004820152601560248201527f4241445f46554e435f5245465f434f4e54454e545300000000000000000000006044820152606401610443565b610e12565b60405162461bcd60e51b815260206004820152600d60248201527f4241445f454c454d5f54595045000000000000000000000000000000000000006044820152606401610443565b5050505050505050610e8961067387604080518082018252600080825260209182015260e083015160c084015160a090940151835180850185526006815263ffffffff90921694831b67ffffffff0000000016949094179390921b6bffffffff000000000000000016929092179181019190915290565b6000610e988760600151611562565b9050610ee3610ed88260400151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602089015190611552565b610f21610ed88260600151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b5063ffffffff1660c0860152600060e08601525050505050565b602083013563ffffffff81168114610f955760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660e09095019490945250505050565b6000610fbc610a4e87602001516115de565b905063ffffffff81161561103057602084013563ffffffff811681146110245760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660e08701525b505050505050565b60006110478660600151611562565b9050600061105f826020015186602001358686611afd565b60208801519091506110719082611552565b50505050505050565b600061108986602001516115de565b9050600061109a8760600151611562565b90506110b181602001518660200135848787611bc5565b602090910152505050505050565b60006110d5856000015185602001358585611afd565b60208701519091506110309082611552565b60006110f686602001516115de565b905061110d85600001518560200135838686611bc5565b9094525050505050565b600061112686602001516115de565b9050600061113787602001516115de565b9050600061114888602001516115de565b905060006040518060800160405280838152602001886020013560001b815260200161117385611603565b63ffffffff16815260200161118786611603565b63ffffffff1681525090506111a9818a60600151611c8f90919063ffffffff16565b505050505050505050565b61103085602001516115de565b60006111d3610a4e87602001516115de565b905060006111e487602001516115de565b905060006111f588602001516115de565b905063ffffffff8316156112175760208801516112129082611552565b611226565b60208801516112269083611552565b5050505050505050565b600061123f6020850185612b66565b905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf61ffff83160161127657506000611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe61ffff8316016112a957506001611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd61ffff8316016112dc57506002611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61ffff83160161130f57506003611357565b60405162461bcd60e51b815260206004820152601960248201527f434f4e53545f505553485f494e56414c49445f4f50434f4445000000000000006044820152606401610443565b6110716040518060400160405280836006811115611377576113776123ca565b8152602001876020013567ffffffffffffffff16815250886020015161155290919063ffffffff16565b60408051808201909152600080825260208201526180056113c56020860186612b66565b61ffff16036113f2576113db86602001516115de565b60408701519091506113ed9082611552565b611030565b6180066114026020860186612b66565b61ffff160361142a5761141886604001516115de565b60208701519091506113ed9082611552565b60405162461bcd60e51b815260206004820152601c60248201527f4d4f56455f494e5445524e414c5f494e56414c49445f4f50434f4445000000006044820152606401610443565b60006110d58660200151611d77565b61148961226c565b8151516001146114db5760405162461bcd60e51b815260206004820152601160248201527f4241445f57494e444f575f4c454e4754480000000000000000000000000000006044820152606401610443565b815180516000906114ee576114ee612bc4565b60200260200101519050600067ffffffffffffffff81111561151257611512612640565b60405190808252806020026020018201604052801561154b57816020015b61153861226c565b8152602001906001900390816115305790505b5090915290565b815161155e9082611dac565b5050565b61156a61226c565b8151516001146115bc5760405162461bcd60e51b815260206004820152601160248201527f4241445f57494e444f575f4c454e4754480000000000000000000000000000006044820152606401610443565b815180516000906115cf576115cf612bc4565b60200260200101519050919050565b604080518082019091526000808252602082015281516115fd90611e76565b92915050565b6020810151600090818351600681111561161f5761161f6123ca565b1461166c5760405162461bcd60e51b815260206004820152600760248201527f4e4f545f493332000000000000000000000000000000000000000000000000006044820152606401610443565b64010000000081106115fd5760405162461bcd60e51b815260206004820152600760248201527f4241445f493332000000000000000000000000000000000000000000000000006044820152606401610443565b600081815b600881101561171f5760088367ffffffffffffffff16901b92508585838181106116f1576116f1612bc4565b919091013560f81c9390931792508161170981612bda565b925050808061171790612bda565b9150506116c5565b50935093915050565b60008181611737868684611f80565b9097909650945050505050565b60008184848281811061175957611759612bc4565b919091013560f81c925081905061176f81612bda565b915050935093915050565b604080516020810190915260608152816000611797868684611744565b92509050600060ff821667ffffffffffffffff8111156117b9576117b9612640565b6040519080825280602002602001820160405280156117e2578160200160208202803683370190505b50905060005b8260ff168160ff16101561183957611801888886611728565b838360ff168151811061181657611816612bc4565b60200260200101819650828152505050808061183190612bf4565b9150506117e8565b5060405180602001604052808281525093505050935093915050565b6040517f5461626c653a000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000060f885901b1660268201527fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166027820152602f81018290526000908190604f0160405160208183030381529060405280519060200120905061193e8787836040518060400160405280601281526020017f5461626c65206d65726b6c6520747265653a0000000000000000000000000000815250611fd5565b979650505050505050565b604080518082019091526000808252602082015281600085858381811061197257611972612bc4565b919091013560f81c915082905061198881612bda565b925050611993600690565b60068111156119a4576119a46123ca565b60ff168160ff1611156119f95760405162461bcd60e51b815260206004820152600e60248201527f4241445f56414c55455f545950450000000000000000000000000000000000006044820152606401610443565b6000611a06878785611f80565b809450819250505060405180604001604052808360ff166006811115611a2e57611a2e6123ca565b6006811115611a3f57611a3f6123ca565b81526020018281525093505050935093915050565b60008083611a61846120aa565b6040517f5461626c6520656c656d656e743a0000000000000000000000000000000000006020820152602e810192909252604e820152606e01604051602081830303815290604052805190602001209050611af38686836040518060400160405280601a81526020017f5461626c6520656c656d656e74206d65726b6c6520747265653a000000000000815250611fd5565b9695505050505050565b60408051808201909152600080825260208201526000611b2d604080518082019091526000808252602082015290565b604080516020810190915260608152611b47868685611949565b93509150611b5686868561177a565b935090506000611b678289856120e4565b9050888114611bb85760405162461bcd60e51b815260206004820152601160248201527f57524f4e475f4d45524b4c455f524f4f540000000000000000000000000000006044820152606401610443565b5090979650505050505050565b6000611be1604080518082019091526000808252602082015290565b6000611bf96040518060200160405280606081525090565b611c04868684611949565b9093509150611c1486868461177a565b925090506000611c25828a866120e4565b9050898114611c765760405162461bcd60e51b815260206004820152601160248201527f57524f4e475f4d45524b4c455f524f4f540000000000000000000000000000006044820152606401610443565b611c81828a8a6120e4565b9a9950505050505050505050565b815151600090611ca0906001612c13565b67ffffffffffffffff811115611cb857611cb8612640565b604051908082528060200260200182016040528015611cf157816020015b611cde61226c565b815260200190600190039081611cd65790505b50905060005b835151811015611d4d578351805182908110611d1557611d15612bc4565b6020026020010151828281518110611d2f57611d2f612bc4565b60200260200101819052508080611d4590612bda565b915050611cf7565b50818184600001515181518110611d6657611d66612bc4565b602090810291909101015290915250565b604080518082019091526000808252602082015281515151611da5611d9d600183612c26565b845190612137565b9392505050565b815151600090611dbd906001612c13565b67ffffffffffffffff811115611dd557611dd5612640565b604051908082528060200260200182016040528015611e1a57816020015b6040805180820190915260008082526020820152815260200190600190039081611df35790505b50905060005b835151811015611d4d578351805182908110611e3e57611e3e612bc4565b6020026020010151828281518110611e5857611e58612bc4565b60200260200101819052508080611e6e90612bda565b915050611e20565b604080518082019091526000808252602082015281518051611e9a90600190612c26565b81518110611eaa57611eaa612bc4565b6020026020010151905060006001836000015151611ec89190612c26565b67ffffffffffffffff811115611ee057611ee0612640565b604051908082528060200260200182016040528015611f2557816020015b6040805180820190915260008082526020820152815260200190600190039081611efe5790505b50905060005b815181101561154b578351805182908110611f4857611f48612bc4565b6020026020010151828281518110611f6257611f62612bc4565b60200260200101819052508080611f7890612bda565b915050611f2b565b600081815b602081101561171f57600883901b9250858583818110611fa757611fa7612bc4565b919091013560f81c93909317925081611fbf81612bda565b9250508080611fcd90612bda565b915050611f85565b8160005b8551518110156120a1578460011660000361203d5782828760000151838151811061200657612006612bc4565b602002602001015160405160200161202093929190612c39565b604051602081830303815290604052805190602001209150612088565b828660000151828151811061205457612054612bc4565b60200260200101518360405160200161206f93929190612c39565b6040516020818303038152906040528051906020012091505b60019490941c938061209981612bda565b915050611fd9565b50949350505050565b6000816000015182602001516040516020016120c7929190612c70565b604051602081830303815290604052805190602001209050919050565b600061212f84846120f4856120aa565b6040518060400160405280601281526020017f56616c7565206d65726b6c6520747265653a0000000000000000000000000000815250611fd5565b949350505050565b6040805180820190915260008082526020820152825180518390811061215f5761215f612bc4565b6020026020010151905092915050565b60408051610120810190915280600081526020016121a460408051606080820183529181019182529081526000602082015290565b81526020016121ca60408051606080820183529181019182529081526000602082015290565b81526020016121ef604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b6040805160a0810182526000808252825160608101845281815260208181018390529381019190915290918201905b81526000602082018190526040820181905260609091015290565b61226a612cbc565b565b6040805160c0810190915260006080820181815260a08301919091528190612247565b6000604082840312156122a157600080fd5b50919050565b60008083601f8401126122b957600080fd5b50813567ffffffffffffffff8111156122d157600080fd5b6020830191508360208285010111156122e957600080fd5b9250929050565b6000806000806000808688036101c081121561230b57600080fd5b606081121561231957600080fd5b879650606088013567ffffffffffffffff8082111561233757600080fd5b90890190610120828c03121561234c57600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808401121561237f57600080fd5b60808a0196506123938b6101608c0161228f565b95506101a08a01359250808311156123aa57600080fd5b50506123b889828a016122a7565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b600381106123f0576123f06123ca565b9052565b805160078110612406576124066123ca565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b808410156124635761244f8286516123f4565b93820193600193909301929085019061243c565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156124e25784516124ae8582516123f4565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101612499565b509687015197909601969096525093949350505050565b600061010080835261250e81840186516123e0565b602085015161012084810152612528610220850182612413565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0080868403016101408701526125658383612413565b9250606088015191508086840301610160870152506125848282612477565b915050608086015161018085015260a08601516125aa6101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050611da5602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561267957612679612640565b60405290565b6040516020810167ffffffffffffffff8111828210171561267957612679612640565b6040516080810167ffffffffffffffff8111828210171561267957612679612640565b604051610120810167ffffffffffffffff8111828210171561267957612679612640565b60405160a0810167ffffffffffffffff8111828210171561267957612679612640565b6040516060810167ffffffffffffffff8111828210171561267957612679612640565b604051601f8201601f1916810167ffffffffffffffff8111828210171561275857612758612640565b604052919050565b80356003811061276f57600080fd5b919050565b600067ffffffffffffffff82111561278e5761278e612640565b5060051b60200190565b6000604082840312156127aa57600080fd5b6127b2612656565b90508135600781106127c357600080fd5b808252506020820135602082015292915050565b600060408083850312156127ea57600080fd5b6127f2612656565b9150823567ffffffffffffffff8082111561280c57600080fd5b8185019150602080838803121561282257600080fd5b61282a61267f565b83358381111561283957600080fd5b80850194505087601f85011261284e57600080fd5b8335925061286361285e84612774565b61272f565b83815260069390931b8401820192828101908985111561288257600080fd5b948301945b848610156128a8576128998a87612798565b82529486019490830190612887565b8252508552948501359484019490945250909392505050565b803563ffffffff8116811461276f57600080fd5b600060408083850312156128e857600080fd5b6128f0612656565b9150823567ffffffffffffffff81111561290957600080fd5b8301601f8101851361291a57600080fd5b8035602061292a61285e83612774565b82815260a0928302840182019282820191908985111561294957600080fd5b948301945b848610156129b25780868b0312156129665760008081fd5b61296e6126a2565b6129788b88612798565b81528787013585820152606061298f8189016128c1565b8983015261299f608089016128c1565b908201528352948501949183019161294e565b50808752505080860135818601525050505092915050565b600061012082360312156129dd57600080fd5b6129e56126c5565b6129ee83612760565b8152602083013567ffffffffffffffff80821115612a0b57600080fd5b612a17368387016127d7565b60208401526040850135915080821115612a3057600080fd5b612a3c368387016127d7565b60408401526060850135915080821115612a5557600080fd5b50612a62368286016128d5565b60608301525060808301356080820152612a7e60a084016128c1565b60a0820152612a8f60c084016128c1565b60c0820152612aa060e084016128c1565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff8116811461276f57600080fd5b600081830360e0811215612ae257600080fd5b612aea6126e9565b833581526060601f1983011215612b0057600080fd5b612b0861270c565b9150612b1660208501612ab7565b8252612b2460408501612ab7565b6020830152606084013560408301528160208201526080840135604082015260a08401356060820152612b5960c085016128c1565b6080820152949350505050565b600060208284031215612b7857600080fd5b813561ffff81168114611da557600080fd5b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115612bbd57612bbd612b8a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b60006000198203612bed57612bed612b8a565b5060010190565b600060ff821660ff8103612c0a57612c0a612b8a565b60010192915050565b808201808211156115fd576115fd612b8a565b818103818111156115fd576115fd612b8a565b6000845160005b81811015612c5a5760208188018101518583015201612c40565b5091909101928352506020820152604001919050565b7f56616c75653a00000000000000000000000000000000000000000000000000008152600060078410612ca557612ca56123ca565b5060f89290921b6006830152600782015260270190565b634e487b7160e01b600052605160045260246000fdfea2646970667358221220c8a00303bfbd425a4c1c16797ed8e891936e2bcd4519d39db3d1dc490bfb996f64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50612d08806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e3660046122f0565b61005a565b6040516100519291906124f9565b60405180910390f35b61006261216f565b61006a612218565b610073876129ca565b915061008436879003870187612acf565b905060006100956020870187612b66565b905061226261ffff82166100ac575061046a61044c565b60001961ffff8316016100c2575061047561044c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161ffff8316016100f6575061047c61044c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff061ffff83160161012a57506105b561044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff761ffff83160161015e575061073361044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff661ffff831601610192575061089761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef61ffff8316016101c65750610a3b61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd61ffff8316016101fa5750610f3b61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffc61ffff83160161022e5750610faa61044c565b601f1961ffff831601610244575061103861044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf61ffff831601610278575061107a61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd61ffff8316016102ac57506110bf61044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc61ffff8316016102e057506110e761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffe61ffff831601610314575061111761044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ffff83160161034857506111b461044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe561ffff83160161037c57506111c161044c565b604161ffff8316108015906103965750604461ffff831611155b156103a4575061123061044c565b61ffff821661800514806103bd575061ffff8216618006145b156103cb57506113a161044c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff861ffff8316016103ff575061147261044c565b60405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f4f50434f444500000000000000000000000000000000000060448201526064015b60405180910390fd5b61045d84848989898663ffffffff16565b5050965096945050505050565b505060029092525050565b5050505050565b600061048b8660600151611481565b9050600481515160068111156104a3576104a36123ca565b036104c9578560025b908160028111156104bf576104bf6123ca565b8152505050610475565b600681515160068111156104df576104df6123ca565b1461052c5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f52455455524e5f50435f54595045000000000000000000006044820152606401610443565b805160209081015190819081901c604082901c606083901c156105915760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f52455455524e5f50435f44415441000000000000000000006044820152606401610443565b63ffffffff92831660e08b015290821660c08a01521660a088015250505050505050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff0000000000000000169290921790820152610624905b602087015190611552565b60006106338660600151611562565b905061067e6106738260400151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602088015190611552565b6106bc6106738260600151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602084013563ffffffff811681146107165760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660c08701525050600060e090940193909352505050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff000000000000000016929092179082015261079b90610619565b6107d96106198660a00151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b6108176106198560800151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b6020808401359081901c604082901c156108735760405162461bcd60e51b815260206004820152601a60248201527f4241445f43524f53535f4d4f44554c455f43414c4c5f444154410000000000006044820152606401610443565b63ffffffff90811660a08801521660c08601525050600060e0909301929092525050565b604080518082018252600080825260209182015260e087015160c088015160a0890151845180860186526006815263ffffffff90931691841b67ffffffff000000001691909117931b6bffffffff00000000000000001692909217908201526108ff90610619565b61093d6106198660a00151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b61097b6106198560800151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b600061098a8660600151611562565b9050806060015163ffffffff166000036109a6578560026104ac565b602084013563ffffffff81168114610a005760405162461bcd60e51b815260206004820152601d60248201527f4241445f43414c4c45525f494e5445524e414c5f43414c4c5f444154410000006044820152606401610443565b604082015163ffffffff1660a08801526060820151610a20908290612ba0565b63ffffffff1660c08801525050600060e08601525050505050565b600080610a53610a4e88602001516115de565b611603565b9050600080600080806000610a746040518060200160405280606081525090565b610a7f8b8b876116c0565b95509350610a8e8b8b87611728565b9096509450610a9e8b8b87611744565b95509250610aad8b8b876116c0565b95509150610abc8b8b87611728565b9097509450610acc8b8b8761177a565b6040517f43616c6c20696e6469726563743a00000000000000000000000000000000000060208201527fffffffffffffffff00000000000000000000000000000000000000000000000060c088901b16602e8201526036810189905290965090915060009060560160408051601f19818403018152919052805160209182012091508d01358114610b9f5760405162461bcd60e51b815260206004820152601660248201527f4241445f43414c4c5f494e4449524543545f44415441000000000000000000006044820152606401610443565b610bb68267ffffffffffffffff871686868c611855565b90508d604001518114610c0b5760405162461bcd60e51b815260206004820152600f60248201527f4241445f5441424c45535f524f4f5400000000000000000000000000000000006044820152606401610443565b8267ffffffffffffffff168963ffffffff1610610c3657505060028d52506104759650505050505050565b50505050506000610c57604080518082019091526000808252602082015290565b604080516020810190915260608152610c718a8a86611728565b94509250610c808a8a86611949565b94509150610c8f8a8a8661177a565b945090506000610cac8263ffffffff808b169087908790611a5416565b9050868114610cfd5760405162461bcd60e51b815260206004820152601160248201527f4241445f454c454d454e54535f524f4f540000000000000000000000000000006044820152606401610443565b858414610d2d578d60025b90816002811115610d1b57610d1b6123ca565b81525050505050505050505050610475565b600483516006811115610d4257610d426123ca565b03610d4f578d6002610d08565b600583516006811115610d6457610d646123ca565b03610dca576020830151985063ffffffff89168914610dc55760405162461bcd60e51b815260206004820152601560248201527f4241445f46554e435f5245465f434f4e54454e545300000000000000000000006044820152606401610443565b610e12565b60405162461bcd60e51b815260206004820152600d60248201527f4241445f454c454d5f54595045000000000000000000000000000000000000006044820152606401610443565b5050505050505050610e8961067387604080518082018252600080825260209182015260e083015160c084015160a090940151835180850185526006815263ffffffff90921694831b67ffffffff0000000016949094179390921b6bffffffff000000000000000016929092179181019190915290565b6000610e988760600151611562565b9050610ee3610ed88260400151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b602089015190611552565b610f21610ed88260600151604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b5063ffffffff1660c0860152600060e08601525050505050565b602083013563ffffffff81168114610f955760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660e09095019490945250505050565b6000610fbc610a4e87602001516115de565b905063ffffffff81161561103057602084013563ffffffff811681146110245760405162461bcd60e51b815260206004820152600d60248201527f4241445f43414c4c5f44415441000000000000000000000000000000000000006044820152606401610443565b63ffffffff1660e08701525b505050505050565b60006110478660600151611562565b9050600061105f826020015186602001358686611afd565b60208801519091506110719082611552565b50505050505050565b600061108986602001516115de565b9050600061109a8760600151611562565b90506110b181602001518660200135848787611bc5565b602090910152505050505050565b60006110d5856000015185602001358585611afd565b60208701519091506110309082611552565b60006110f686602001516115de565b905061110d85600001518560200135838686611bc5565b9094525050505050565b600061112686602001516115de565b9050600061113787602001516115de565b9050600061114888602001516115de565b905060006040518060800160405280838152602001886020013560001b815260200161117385611603565b63ffffffff16815260200161118786611603565b63ffffffff1681525090506111a9818a60600151611c8f90919063ffffffff16565b505050505050505050565b61103085602001516115de565b60006111d3610a4e87602001516115de565b905060006111e487602001516115de565b905060006111f588602001516115de565b905063ffffffff8316156112175760208801516112129082611552565b611226565b60208801516112269083611552565b5050505050505050565b600061123f6020850185612b66565b905060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf61ffff83160161127657506000611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe61ffff8316016112a957506001611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd61ffff8316016112dc57506002611357565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61ffff83160161130f57506003611357565b60405162461bcd60e51b815260206004820152601960248201527f434f4e53545f505553485f494e56414c49445f4f50434f4445000000000000006044820152606401610443565b6110716040518060400160405280836006811115611377576113776123ca565b8152602001876020013567ffffffffffffffff16815250886020015161155290919063ffffffff16565b60408051808201909152600080825260208201526180056113c56020860186612b66565b61ffff16036113f2576113db86602001516115de565b60408701519091506113ed9082611552565b611030565b6180066114026020860186612b66565b61ffff160361142a5761141886604001516115de565b60208701519091506113ed9082611552565b60405162461bcd60e51b815260206004820152601c60248201527f4d4f56455f494e5445524e414c5f494e56414c49445f4f50434f4445000000006044820152606401610443565b60006110d58660200151611d77565b61148961226c565b8151516001146114db5760405162461bcd60e51b815260206004820152601160248201527f4241445f57494e444f575f4c454e4754480000000000000000000000000000006044820152606401610443565b815180516000906114ee576114ee612bc4565b60200260200101519050600067ffffffffffffffff81111561151257611512612640565b60405190808252806020026020018201604052801561154b57816020015b61153861226c565b8152602001906001900390816115305790505b5090915290565b815161155e9082611dac565b5050565b61156a61226c565b8151516001146115bc5760405162461bcd60e51b815260206004820152601160248201527f4241445f57494e444f575f4c454e4754480000000000000000000000000000006044820152606401610443565b815180516000906115cf576115cf612bc4565b60200260200101519050919050565b604080518082019091526000808252602082015281516115fd90611e76565b92915050565b6020810151600090818351600681111561161f5761161f6123ca565b1461166c5760405162461bcd60e51b815260206004820152600760248201527f4e4f545f493332000000000000000000000000000000000000000000000000006044820152606401610443565b64010000000081106115fd5760405162461bcd60e51b815260206004820152600760248201527f4241445f493332000000000000000000000000000000000000000000000000006044820152606401610443565b600081815b600881101561171f5760088367ffffffffffffffff16901b92508585838181106116f1576116f1612bc4565b919091013560f81c9390931792508161170981612bda565b925050808061171790612bda565b9150506116c5565b50935093915050565b60008181611737868684611f80565b9097909650945050505050565b60008184848281811061175957611759612bc4565b919091013560f81c925081905061176f81612bda565b915050935093915050565b604080516020810190915260608152816000611797868684611744565b92509050600060ff821667ffffffffffffffff8111156117b9576117b9612640565b6040519080825280602002602001820160405280156117e2578160200160208202803683370190505b50905060005b8260ff168160ff16101561183957611801888886611728565b838360ff168151811061181657611816612bc4565b60200260200101819650828152505050808061183190612bf4565b9150506117e8565b5060405180602001604052808281525093505050935093915050565b6040517f5461626c653a000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000060f885901b1660268201527fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166027820152602f81018290526000908190604f0160405160208183030381529060405280519060200120905061193e8787836040518060400160405280601281526020017f5461626c65206d65726b6c6520747265653a0000000000000000000000000000815250611fd5565b979650505050505050565b604080518082019091526000808252602082015281600085858381811061197257611972612bc4565b919091013560f81c915082905061198881612bda565b925050611993600690565b60068111156119a4576119a46123ca565b60ff168160ff1611156119f95760405162461bcd60e51b815260206004820152600e60248201527f4241445f56414c55455f545950450000000000000000000000000000000000006044820152606401610443565b6000611a06878785611f80565b809450819250505060405180604001604052808360ff166006811115611a2e57611a2e6123ca565b6006811115611a3f57611a3f6123ca565b81526020018281525093505050935093915050565b60008083611a61846120aa565b6040517f5461626c6520656c656d656e743a0000000000000000000000000000000000006020820152602e810192909252604e820152606e01604051602081830303815290604052805190602001209050611af38686836040518060400160405280601a81526020017f5461626c6520656c656d656e74206d65726b6c6520747265653a000000000000815250611fd5565b9695505050505050565b60408051808201909152600080825260208201526000611b2d604080518082019091526000808252602082015290565b604080516020810190915260608152611b47868685611949565b93509150611b5686868561177a565b935090506000611b678289856120e4565b9050888114611bb85760405162461bcd60e51b815260206004820152601160248201527f57524f4e475f4d45524b4c455f524f4f540000000000000000000000000000006044820152606401610443565b5090979650505050505050565b6000611be1604080518082019091526000808252602082015290565b6000611bf96040518060200160405280606081525090565b611c04868684611949565b9093509150611c1486868461177a565b925090506000611c25828a866120e4565b9050898114611c765760405162461bcd60e51b815260206004820152601160248201527f57524f4e475f4d45524b4c455f524f4f540000000000000000000000000000006044820152606401610443565b611c81828a8a6120e4565b9a9950505050505050505050565b815151600090611ca0906001612c13565b67ffffffffffffffff811115611cb857611cb8612640565b604051908082528060200260200182016040528015611cf157816020015b611cde61226c565b815260200190600190039081611cd65790505b50905060005b835151811015611d4d578351805182908110611d1557611d15612bc4565b6020026020010151828281518110611d2f57611d2f612bc4565b60200260200101819052508080611d4590612bda565b915050611cf7565b50818184600001515181518110611d6657611d66612bc4565b602090810291909101015290915250565b604080518082019091526000808252602082015281515151611da5611d9d600183612c26565b845190612137565b9392505050565b815151600090611dbd906001612c13565b67ffffffffffffffff811115611dd557611dd5612640565b604051908082528060200260200182016040528015611e1a57816020015b6040805180820190915260008082526020820152815260200190600190039081611df35790505b50905060005b835151811015611d4d578351805182908110611e3e57611e3e612bc4565b6020026020010151828281518110611e5857611e58612bc4565b60200260200101819052508080611e6e90612bda565b915050611e20565b604080518082019091526000808252602082015281518051611e9a90600190612c26565b81518110611eaa57611eaa612bc4565b6020026020010151905060006001836000015151611ec89190612c26565b67ffffffffffffffff811115611ee057611ee0612640565b604051908082528060200260200182016040528015611f2557816020015b6040805180820190915260008082526020820152815260200190600190039081611efe5790505b50905060005b815181101561154b578351805182908110611f4857611f48612bc4565b6020026020010151828281518110611f6257611f62612bc4565b60200260200101819052508080611f7890612bda565b915050611f2b565b600081815b602081101561171f57600883901b9250858583818110611fa757611fa7612bc4565b919091013560f81c93909317925081611fbf81612bda565b9250508080611fcd90612bda565b915050611f85565b8160005b8551518110156120a1578460011660000361203d5782828760000151838151811061200657612006612bc4565b602002602001015160405160200161202093929190612c39565b604051602081830303815290604052805190602001209150612088565b828660000151828151811061205457612054612bc4565b60200260200101518360405160200161206f93929190612c39565b6040516020818303038152906040528051906020012091505b60019490941c938061209981612bda565b915050611fd9565b50949350505050565b6000816000015182602001516040516020016120c7929190612c70565b604051602081830303815290604052805190602001209050919050565b600061212f84846120f4856120aa565b6040518060400160405280601281526020017f56616c7565206d65726b6c6520747265653a0000000000000000000000000000815250611fd5565b949350505050565b6040805180820190915260008082526020820152825180518390811061215f5761215f612bc4565b6020026020010151905092915050565b60408051610120810190915280600081526020016121a460408051606080820183529181019182529081526000602082015290565b81526020016121ca60408051606080820183529181019182529081526000602082015290565b81526020016121ef604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b6040805160a0810182526000808252825160608101845281815260208181018390529381019190915290918201905b81526000602082018190526040820181905260609091015290565b61226a612cbc565b565b6040805160c0810190915260006080820181815260a08301919091528190612247565b6000604082840312156122a157600080fd5b50919050565b60008083601f8401126122b957600080fd5b50813567ffffffffffffffff8111156122d157600080fd5b6020830191508360208285010111156122e957600080fd5b9250929050565b6000806000806000808688036101c081121561230b57600080fd5b606081121561231957600080fd5b879650606088013567ffffffffffffffff8082111561233757600080fd5b90890190610120828c03121561234c57600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808401121561237f57600080fd5b60808a0196506123938b6101608c0161228f565b95506101a08a01359250808311156123aa57600080fd5b50506123b889828a016122a7565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b600381106123f0576123f06123ca565b9052565b805160078110612406576124066123ca565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b808410156124635761244f8286516123f4565b93820193600193909301929085019061243c565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156124e25784516124ae8582516123f4565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101612499565b509687015197909601969096525093949350505050565b600061010080835261250e81840186516123e0565b602085015161012084810152612528610220850182612413565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0080868403016101408701526125658383612413565b9250606088015191508086840301610160870152506125848282612477565b915050608086015161018085015260a08601516125aa6101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050611da5602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561267957612679612640565b60405290565b6040516020810167ffffffffffffffff8111828210171561267957612679612640565b6040516080810167ffffffffffffffff8111828210171561267957612679612640565b604051610120810167ffffffffffffffff8111828210171561267957612679612640565b60405160a0810167ffffffffffffffff8111828210171561267957612679612640565b6040516060810167ffffffffffffffff8111828210171561267957612679612640565b604051601f8201601f1916810167ffffffffffffffff8111828210171561275857612758612640565b604052919050565b80356003811061276f57600080fd5b919050565b600067ffffffffffffffff82111561278e5761278e612640565b5060051b60200190565b6000604082840312156127aa57600080fd5b6127b2612656565b90508135600781106127c357600080fd5b808252506020820135602082015292915050565b600060408083850312156127ea57600080fd5b6127f2612656565b9150823567ffffffffffffffff8082111561280c57600080fd5b8185019150602080838803121561282257600080fd5b61282a61267f565b83358381111561283957600080fd5b80850194505087601f85011261284e57600080fd5b8335925061286361285e84612774565b61272f565b83815260069390931b8401820192828101908985111561288257600080fd5b948301945b848610156128a8576128998a87612798565b82529486019490830190612887565b8252508552948501359484019490945250909392505050565b803563ffffffff8116811461276f57600080fd5b600060408083850312156128e857600080fd5b6128f0612656565b9150823567ffffffffffffffff81111561290957600080fd5b8301601f8101851361291a57600080fd5b8035602061292a61285e83612774565b82815260a0928302840182019282820191908985111561294957600080fd5b948301945b848610156129b25780868b0312156129665760008081fd5b61296e6126a2565b6129788b88612798565b81528787013585820152606061298f8189016128c1565b8983015261299f608089016128c1565b908201528352948501949183019161294e565b50808752505080860135818601525050505092915050565b600061012082360312156129dd57600080fd5b6129e56126c5565b6129ee83612760565b8152602083013567ffffffffffffffff80821115612a0b57600080fd5b612a17368387016127d7565b60208401526040850135915080821115612a3057600080fd5b612a3c368387016127d7565b60408401526060850135915080821115612a5557600080fd5b50612a62368286016128d5565b60608301525060808301356080820152612a7e60a084016128c1565b60a0820152612a8f60c084016128c1565b60c0820152612aa060e084016128c1565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff8116811461276f57600080fd5b600081830360e0811215612ae257600080fd5b612aea6126e9565b833581526060601f1983011215612b0057600080fd5b612b0861270c565b9150612b1660208501612ab7565b8252612b2460408501612ab7565b6020830152606084013560408301528160208201526080840135604082015260a08401356060820152612b5960c085016128c1565b6080820152949350505050565b600060208284031215612b7857600080fd5b813561ffff81168114611da557600080fd5b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115612bbd57612bbd612b8a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b60006000198203612bed57612bed612b8a565b5060010190565b600060ff821660ff8103612c0a57612c0a612b8a565b60010192915050565b808201808211156115fd576115fd612b8a565b818103818111156115fd576115fd612b8a565b6000845160005b81811015612c5a5760208188018101518583015201612c40565b5091909101928352506020820152604001919050565b7f56616c75653a00000000000000000000000000000000000000000000000000008152600060078410612ca557612ca56123ca565b5060f89290921b6006830152600782015260270190565b634e487b7160e01b600052605160045260246000fdfea26469706673582212203e8a2a87005b5d59d696a43d4c20b6101b261e3d2f26c29c9de1f8276a2466df64736f6c63430008110033", } // OneStepProver0ABI is the input ABI used to generate the binding from. @@ -1747,7 +1747,7 @@ func (_OneStepProver0 *OneStepProver0CallerSession) ExecuteOneStep(arg0 Executio // OneStepProverHostIoMetaData contains all meta data concerning the OneStepProverHostIo contract. var OneStepProverHostIoMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"execCtx\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"startMach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"startMod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"opcode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"argumentData\",\"type\":\"uint256\"}],\"internalType\":\"structInstruction\",\"name\":\"inst\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"executeOneStep\",\"outputs\":[{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"mach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"mod\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506129f0806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e366004611e98565b61005a565b6040516100519291906120a1565b60405180910390f35b610062611d41565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae87612572565b91506100bf36879003870187612677565b905060006100d0602087018761270e565b9050611dea61801061ffff8316108015906100f1575061801361ffff831611155b156100ff57506102076101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe061ffff83160161013357506104b56101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fdf61ffff83160161016757506107916101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fde61ffff83160161019b5750610b116101e8565b60405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4d454d4f52595f4f50434f4445000000000000000000000060448201526064015b60405180910390fd5b6101fa8a85858a8a8a8763ffffffff16565b5050965096945050505050565b6000610216602085018561270e565b9050610220611df4565b600061022d858583610b1d565b60808a01518251805160209182015182860151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d909201905280519101209294509092501461031d5760405162461bcd60e51b815260206004820152601060248201527f4241445f474c4f42414c5f53544154450000000000000000000000000000000060448201526064016101df565b61ffff83166180101480610336575061ffff8316618011145b15610358576103538888848961034e8987818d612732565b610bf9565b61040a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fee61ffff84160161038d576103538883610da6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fed61ffff8416016103c2576103538883610e3e565b60405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f474c4f42414c53544154455f4f50434f444500000000000060448201526064016101df565b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d909201905280519101206080909801979097525050505050505050565b60006104cc6104c78760200151610eb5565b610eda565b63ffffffff16905060006104e66104c78860200151610eb5565b63ffffffff16905085602001516000015167ffffffffffffffff1681602061050e9190612772565b1180610523575061052060208261279b565b15155b1561054a578660025b9081600281111561053f5761053f611f72565b815250505050610789565b60006105576020836127af565b90506000806105726040518060200160405280606081525090565b60208a015161058490858a8a87610f97565b9094509092509050606060008989868181106105a2576105a26127c3565b919091013560f81c91508590506105b8816127d9565b9550508060ff166000036106a5573660006105d58b88818f612732565b915091508582826040516105ea929190612811565b60405180910390201461063f5760405162461bcd60e51b815260206004820152600c60248201527f4241445f505245494d414745000000000000000000000000000000000000000060448201526064016101df565b600061064c8b6020612772565b9050818111156106595750805b610665818c8486612732565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509297506106ed95505050505050565b60405162461bcd60e51b815260206004820152601660248201527f554e4b4e4f574e5f505245494d4147455f50524f4f460000000000000000000060448201526064016101df565b60005b82518110156107315761071d8582858481518110610710576107106127c3565b016020015160f81c611040565b945080610729816127d9565b9150506106f0565b5061073d8387866110ce565b60208d81015160409081019290925283518251808401845260008082529083018190528351808501909452835263ffffffff16828201528e015161078091611168565b50505050505050505b505050505050565b60006107a36104c78760200151610eb5565b63ffffffff16905060006107bd6104c78860200151610eb5565b63ffffffff16905060006107dc6107d78960200151610eb5565b611178565b67ffffffffffffffff16905060208601351580156107fb575088358110155b15610823578760025b9081600281111561081757610817611f72565b81525050505050610789565b6020808801515167ffffffffffffffff1690610840908490612772565b1180610855575061085260208361279b565b15155b1561086257876002610804565b600061086f6020846127af565b905060008061088a6040518060200160405280606081525090565b60208b015161089c90858b8b87610f97565b90945090925090508888848181106108b6576108b66127c3565b909101357fff000000000000000000000000000000000000000000000000000000000000001615905061092b5760405162461bcd60e51b815260206004820152601360248201527f554e4b4e4f574e5f494e424f585f50524f4f460000000000000000000000000060448201526064016101df565b82610935816127d9565b9350611dea9050600060208c01356109515761123a9150610990565b60018c6020013503610967576115959150610990565b8d60025b9081600281111561097e5761097e611f72565b81525050505050505050505050610789565b6109b08f888d8d899080926109a793929190612732565b8663ffffffff16565b9050806109bf578d600261096b565b505082881015610a115760405162461bcd60e51b815260206004820152601160248201527f4241445f4d4553534147455f50524f4f4600000000000000000000000000000060448201526064016101df565b6000610a1d848a612821565b905060005b60208163ffffffff16108015610a46575081610a4463ffffffff83168b612772565b105b15610a9f57610a8b8463ffffffff83168d8d82610a638f8c612772565b610a6d9190612772565b818110610a7c57610a7c6127c3565b919091013560f81c9050611040565b935080610a9781612834565b915050610a22565b610aaa8387866110ce565b60208e015160400152610b00610aed82604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8f6020015161116890919063ffffffff16565b505050505050505050505050505050565b50506001909252505050565b610b25611df4565b81610b2e611e19565b610b36611e19565b60005b600260ff82161015610b8157610b5088888661187d565b848360ff1660028110610b6557610b656127c3565b6020020191909152935080610b7981612857565b915050610b39565b5060005b600260ff82161015610bdc57610b9c888886611899565b838360ff1660028110610bb157610bb16127c3565b67ffffffffffffffff9093166020939093020191909152935080610bd481612857565b915050610b85565b506040805180820190915291825260208201529590945092505050565b6000610c0b6104c78860200151610eb5565b63ffffffff1690506000610c256104c78960200151610eb5565b9050600263ffffffff821610610c3d5787600261052c565b6020808801515167ffffffffffffffff1690610c5a908490612772565b1180610c6f5750610c6c60208361279b565b15155b15610c7c5787600261052c565b6000610c896020846127af565b9050600080610ca46040518060200160405280606081525090565b60208b0151610cb690858a8a87610f97565b9094509092509050618010610cce60208b018b61270e565b61ffff1603610d1257610d04848b600001518763ffffffff1660028110610cf757610cf76127c3565b60200201518391906110ce565b60208c015160400152610d98565b618011610d2260208b018b61270e565b61ffff1603610d50578951829063ffffffff871660028110610d4657610d466127c3565b6020020152610d98565b60405162461bcd60e51b815260206004820152601760248201527f4241445f474c4f42414c5f53544154455f4f50434f444500000000000000000060448201526064016101df565b505050505050505050505050565b6000610db86104c78460200151610eb5565b9050600263ffffffff821610610dd057505060029052565b610e39610e2e83602001518363ffffffff1660028110610df257610df26127c3565b6020020151604080518082019091526000808252602082015250604080518082019091526001815267ffffffffffffffff909116602082015290565b602085015190611168565b505050565b6000610e506107d78460200151610eb5565b90506000610e646104c78560200151610eb5565b9050600263ffffffff821610610e7e575050600290915250565b8183602001518263ffffffff1660028110610e9b57610e9b6127c3565b67ffffffffffffffff909216602092909202015250505050565b60408051808201909152600080825260208201528151610ed490611901565b92915050565b60208101516000908183516006811115610ef657610ef6611f72565b14610f435760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4933320000000000000000000000000000000000000000000000000060448201526064016101df565b6401000000008110610ed45760405162461bcd60e51b815260206004820152600760248201527f4241445f4933320000000000000000000000000000000000000000000000000060448201526064016101df565b600080610fb06040518060200160405280606081525090565b839150610fbe86868461187d565b9093509150610fce868684611a12565b925090506000610fdf8289866110ce565b9050886040015181146110345760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4d454d5f524f4f5400000000000000000000000000000000000060448201526064016101df565b50955095509592505050565b6000602083106110925760405162461bcd60e51b815260206004820152601560248201527f4241445f5345545f4c4541465f425954455f494458000000000000000000000060448201526064016101df565b6000836110a160016020612821565b6110ab9190612821565b6110b6906008612876565b60ff848116821b911b198616179150505b9392505050565b6040517f4d656d6f7279206c6561663a00000000000000000000000000000000000000006020820152602c81018290526000908190604c0160405160208183030381529060405280519060200120905061115f8585836040518060400160405280601381526020017f4d656d6f7279206d65726b6c6520747265653a00000000000000000000000000815250611aed565b95945050505050565b81516111749082611bc2565b5050565b602081015160009060018351600681111561119557611195611f72565b146111e25760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4936340000000000000000000000000000000000000000000000000060448201526064016101df565b680100000000000000008110610ed45760405162461bcd60e51b815260206004820152600760248201527f4241445f4936340000000000000000000000000000000000000000000000000060448201526064016101df565b6000602882101561128d5760405162461bcd60e51b815260206004820152601260248201527f4241445f534551494e424f585f50524f4f46000000000000000000000000000060448201526064016101df565b600061129b84846020611899565b5080915050600084846040516112b2929190612811565b604051908190039020905060008067ffffffffffffffff88161561138a576112e060408a0160208b0161288d565b73ffffffffffffffffffffffffffffffffffffffff166316bf557961130660018b6128c3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015611363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138791906128eb565b91505b67ffffffffffffffff841615611454576113aa60408a0160208b0161288d565b73ffffffffffffffffffffffffffffffffffffffff1663d5719dc26113d06001876128c3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145191906128eb565b90505b60408051602081018490529081018490526060810182905260009060800160405160208183030381529060405280519060200120905089602001602081019061149d919061288d565b6040517f16bf557900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b16600482015273ffffffffffffffffffffffffffffffffffffffff91909116906316bf557990602401602060405180830381865afa158015611513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153791906128eb565b81146115855760405162461bcd60e51b815260206004820152601460248201527f4241445f534551494e424f585f4d45535341474500000000000000000000000060448201526064016101df565b5060019998505050505050505050565b600060718210156115e85760405162461bcd60e51b815260206004820152601160248201527f4241445f44454c415945445f50524f4f4600000000000000000000000000000060448201526064016101df565b600067ffffffffffffffff8516156116b45761160a604087016020880161288d565b73ffffffffffffffffffffffffffffffffffffffff1663d5719dc26116306001886128c3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa15801561168d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b191906128eb565b90505b60006116c38460718188612732565b6040516116d1929190612811565b604051809103902090506000858560008181106116f0576116f06127c3565b9050013560f81c60f81b9050600061170a87876001611cb6565b5090506000828261171f607160218b8d612732565b87604051602001611734959493929190612904565b60408051601f1981840301815282825280516020918201208382018990528383018190528251808503840181526060909401909252825192019190912090915061178460408c0160208d0161288d565b6040517fd5719dc200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063d5719dc290602401602060405180830381865afa1580156117fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181e91906128eb565b811461186c5760405162461bcd60e51b815260206004820152601360248201527f4241445f44454c415945445f4d4553534147450000000000000000000000000060448201526064016101df565b5060019a9950505050505050505050565b6000818161188c868684611cb6565b9097909650945050505050565b600081815b60088110156118f85760088367ffffffffffffffff16901b92508585838181106118ca576118ca6127c3565b919091013560f81c939093179250816118e2816127d9565b92505080806118f0906127d9565b91505061189e565b50935093915050565b60408051808201909152600080825260208201528151805161192590600190612821565b81518110611935576119356127c3565b60200260200101519050600060018360000151516119539190612821565b67ffffffffffffffff81111561196b5761196b6121e8565b6040519080825280602002602001820160405280156119b057816020015b60408051808201909152600080825260208201528152602001906001900390816119895790505b50905060005b8151811015611a0b5783518051829081106119d3576119d36127c3565b60200260200101518282815181106119ed576119ed6127c3565b60200260200101819052508080611a03906127d9565b9150506119b6565b5090915290565b604080516020810190915260608152816000611a2f868684611d0b565b92509050600060ff821667ffffffffffffffff811115611a5157611a516121e8565b604051908082528060200260200182016040528015611a7a578160200160208202803683370190505b50905060005b8260ff168160ff161015611ad157611a9988888661187d565b838360ff1681518110611aae57611aae6127c3565b602002602001018196508281525050508080611ac990612857565b915050611a80565b5060405180602001604052808281525093505050935093915050565b8160005b855151811015611bb95784600116600003611b5557828287600001518381518110611b1e57611b1e6127c3565b6020026020010151604051602001611b389392919061296d565b604051602081830303815290604052805190602001209150611ba0565b8286600001518281518110611b6c57611b6c6127c3565b602002602001015183604051602001611b879392919061296d565b6040516020818303038152906040528051906020012091505b60019490941c9380611bb1816127d9565b915050611af1565b50949350505050565b815151600090611bd3906001612772565b67ffffffffffffffff811115611beb57611beb6121e8565b604051908082528060200260200182016040528015611c3057816020015b6040805180820190915260008082526020820152815260200190600190039081611c095790505b50905060005b835151811015611c8c578351805182908110611c5457611c546127c3565b6020026020010151828281518110611c6e57611c6e6127c3565b60200260200101819052508080611c84906127d9565b915050611c36565b50818184600001515181518110611ca557611ca56127c3565b602090810291909101015290915250565b600081815b60208110156118f857600883901b9250858583818110611cdd57611cdd6127c3565b919091013560f81c93909317925081611cf5816127d9565b9250508080611d03906127d9565b915050611cbb565b600081848482818110611d2057611d206127c3565b919091013560f81c9250819050611d36816127d9565b915050935093915050565b6040805161012081019091528060008152602001611d7660408051606080820183529181019182529081526000602082015290565b8152602001611d9c60408051606080820183529181019182529081526000602082015290565b8152602001611dc1604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b611df26129a4565b565b6040518060400160405280611e07611e19565b8152602001611e14611e19565b905290565b60405180604001604052806002906020820280368337509192915050565b600060408284031215611e4957600080fd5b50919050565b60008083601f840112611e6157600080fd5b50813567ffffffffffffffff811115611e7957600080fd5b602083019150836020828501011115611e9157600080fd5b9250929050565b6000806000806000808688036101c0811215611eb357600080fd5b6060811215611ec157600080fd5b879650606088013567ffffffffffffffff80821115611edf57600080fd5b90890190610120828c031215611ef457600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8084011215611f2757600080fd5b60808a019650611f3b8b6101608c01611e37565b95506101a08a0135925080831115611f5257600080fd5b5050611f6089828a01611e4f565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b60038110611f9857611f98611f72565b9052565b805160078110611fae57611fae611f72565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b8084101561200b57611ff7828651611f9c565b938201936001939093019290850190611fe4565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b8281101561208a578451612056858251611f9c565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101612041565b509687015197909601969096525093949350505050565b60006101008083526120b68184018651611f88565b6020850151610120848101526120d0610220850182611fbb565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00808684030161014087015261210d8383611fbb565b92506060880151915080868403016101608701525061212c828261201f565b915050608086015161018085015260a08601516121526101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e0860152509085015161020084015290506110c7602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612221576122216121e8565b60405290565b6040516020810167ffffffffffffffff81118282101715612221576122216121e8565b6040516080810167ffffffffffffffff81118282101715612221576122216121e8565b604051610120810167ffffffffffffffff81118282101715612221576122216121e8565b60405160a0810167ffffffffffffffff81118282101715612221576122216121e8565b6040516060810167ffffffffffffffff81118282101715612221576122216121e8565b604051601f8201601f1916810167ffffffffffffffff81118282101715612300576123006121e8565b604052919050565b80356003811061231757600080fd5b919050565b600067ffffffffffffffff821115612336576123366121e8565b5060051b60200190565b60006040828403121561235257600080fd5b61235a6121fe565b905081356007811061236b57600080fd5b808252506020820135602082015292915050565b6000604080838503121561239257600080fd5b61239a6121fe565b9150823567ffffffffffffffff808211156123b457600080fd5b818501915060208083880312156123ca57600080fd5b6123d2612227565b8335838111156123e157600080fd5b80850194505087601f8501126123f657600080fd5b8335925061240b6124068461231c565b6122d7565b83815260069390931b8401820192828101908985111561242a57600080fd5b948301945b84861015612450576124418a87612340565b8252948601949083019061242f565b8252508552948501359484019490945250909392505050565b803563ffffffff8116811461231757600080fd5b6000604080838503121561249057600080fd5b6124986121fe565b9150823567ffffffffffffffff8111156124b157600080fd5b8301601f810185136124c257600080fd5b803560206124d26124068361231c565b82815260a092830284018201928282019190898511156124f157600080fd5b948301945b8486101561255a5780868b03121561250e5760008081fd5b61251661224a565b6125208b88612340565b815287870135858201526060612537818901612469565b8983015261254760808901612469565b90820152835294850194918301916124f6565b50808752505080860135818601525050505092915050565b6000610120823603121561258557600080fd5b61258d61226d565b61259683612308565b8152602083013567ffffffffffffffff808211156125b357600080fd5b6125bf3683870161237f565b602084015260408501359150808211156125d857600080fd5b6125e43683870161237f565b604084015260608501359150808211156125fd57600080fd5b5061260a3682860161247d565b6060830152506080830135608082015261262660a08401612469565b60a082015261263760c08401612469565b60c082015261264860e08401612469565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff8116811461231757600080fd5b600081830360e081121561268a57600080fd5b612692612291565b833581526060601f19830112156126a857600080fd5b6126b06122b4565b91506126be6020850161265f565b82526126cc6040850161265f565b6020830152606084013560408301528160208201526080840135604082015260a0840135606082015261270160c08501612469565b6080820152949350505050565b60006020828403121561272057600080fd5b813561ffff811681146110c757600080fd5b6000808585111561274257600080fd5b8386111561274f57600080fd5b5050820193919092039150565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ed457610ed461275c565b634e487b7160e01b600052601260045260246000fd5b6000826127aa576127aa612785565b500690565b6000826127be576127be612785565b500490565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361280a5761280a61275c565b5060010190565b8183823760009101908152919050565b81810381811115610ed457610ed461275c565b600063ffffffff80831681810361284d5761284d61275c565b6001019392505050565b600060ff821660ff810361286d5761286d61275c565b60010192915050565b8082028115828204841417610ed457610ed461275c565b60006020828403121561289f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146110c757600080fd5b67ffffffffffffffff8281168282160390808211156128e4576128e461275c565b5092915050565b6000602082840312156128fd57600080fd5b5051919050565b7fff00000000000000000000000000000000000000000000000000000000000000861681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b1660018201528284601583013760159201918201526035019392505050565b6000845160005b8181101561298e5760208188018101518583015201612974565b5091909101928352506020820152604001919050565b634e487b7160e01b600052605160045260246000fdfea2646970667358221220ea7b1576baf26084cc90e3c1e0e39aa8b3052c93e8adae1fc8547a89e583cbfe64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506130f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e366004612522565b61005a565b60405161005192919061272b565b60405180910390f35b6100626123cb565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae87612bfc565b91506100bf36879003870187612d01565b905060006100d06020870187612d98565b905061247461801061ffff8316108015906100f1575061801361ffff831611155b156100ff57506102076101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fe061ffff83160161013357506104b56101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fdf61ffff8316016101675750610cce6101e8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fde61ffff83160161019b575061104e6101e8565b60405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4d454d4f52595f4f50434f4445000000000000000000000060448201526064015b60405180910390fd5b6101fa8a85858a8a8a8763ffffffff16565b5050965096945050505050565b60006102166020850185612d98565b905061022061247e565b600061022d85858361105a565b60808a01518251805160209182015182860151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d909201905280519101209294509092501461031d5760405162461bcd60e51b815260206004820152601060248201527f4241445f474c4f42414c5f53544154450000000000000000000000000000000060448201526064016101df565b61ffff83166180101480610336575061ffff8316618011145b15610358576103538888848961034e8987818d612dbc565b611136565b61040a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fee61ffff84160161038d5761035388836112e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fed61ffff8416016103c257610353888361137b565b60405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f474c4f42414c53544154455f4f50434f444500000000000060448201526064016101df565b8151805160209182015182850151805190840151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081880152602d810195909552604d8501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d860152911b1660758301528051808303605d018152607d909201905280519101206080909801979097525050505050505050565b60006104cc6104c787602001516113f2565b611417565b63ffffffff16905060006104e66104c788602001516113f2565b63ffffffff1690506104f9602083612dfc565b15158061052057506020808701515167ffffffffffffffff169061051e908390612e26565b115b806105345750610531602082612dfc565b15155b1561055b578660025b90816002811115610550576105506125fc565b815250505050610cc6565b6000610568602083612e39565b90506000806105836040518060200160405280606081525090565b60208a015161059590858a8a876114d4565b9094509092509050606060008989868181106105b3576105b3612e4d565b919091013560f81c91508590506105c981612e63565b9550508a6020013560000361070a578060ff166000036106c2573660006105f28b88818f612dbc565b91509150858282604051610607929190612e7d565b60405180910390201461065c5760405162461bcd60e51b815260206004820152600c60248201527f4241445f505245494d414745000000000000000000000000000000000000000060448201526064016101df565b60006106698b6020612e26565b9050818111156106765750805b610682818c8486612dbc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929750610c2a95505050505050565b60405162461bcd60e51b815260206004820152601660248201527f554e4b4e4f574e5f505245494d4147455f50524f4f460000000000000000000060448201526064016101df565b8a6020013560010361081a5760ff8116156107675760405162461bcd60e51b815260206004820152601660248201527f554e4b4e4f574e5f505245494d4147455f50524f4f460000000000000000000060448201526064016101df565b3660006107768b88818f612dbc565b91509150856002838360405161078d929190612e7d565b602060405180830381855afa1580156107aa573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107cd9190612e8d565b1461065c5760405162461bcd60e51b815260206004820152600c60248201527f4241445f505245494d414745000000000000000000000000000000000000000060448201526064016101df565b8a60200135600203610be25760ff8116156108775760405162461bcd60e51b815260206004820152601660248201527f554e4b4e4f574e5f505245494d4147455f50524f4f460000000000000000000060448201526064016101df565b3660006108868b88818f612dbc565b90925090508561089a602060008486612dbc565b6108a391612ea6565b146108f05760405162461bcd60e51b815260206004820152601460248201527f4b5a475f50524f4f465f57524f4e475f4841534800000000000000000000000060448201526064016101df565b600080600080600a73ffffffffffffffffffffffffffffffffffffffff16868660405161091e929190612e7d565b600060405180830381855afa9150503d8060008114610959576040519150601f19603f3d011682016040523d82523d6000602084013e61095e565b606091505b5091509150816109b05760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f4b5a475f50524f4f4600000000000000000000000000000060448201526064016101df565b6000815111610a015760405162461bcd60e51b815260206004820152601660248201527f4b5a475f505245434f4d50494c455f4d495353494e470000000000000000000060448201526064016101df565b80806020019051810190610a159190612ec4565b9094509250507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000182149050610a8c5760405162461bcd60e51b815260206004820152601360248201527f554e4b4e4f574e5f424c535f4d4f44554c55530000000000000000000000000060448201526064016101df565b610a97826020612ee8565b8c1015610bd957600080610aac60208f612e39565b905060015b84811015610adb57600192831b928281169003610acf576001831792505b600191821c911b610ab1565b506000610aed85640100000000612e39565b9050610af98382612ee8565b90506000610b287f16a2a19edfe81f20d09b681922c813b4b63683508c2280b93829971f439f0d2b838761157d565b905080610b39604060208a8c612dbc565b610b4291612ea6565b14610b8f5760405162461bcd60e51b815260206004820152601160248201527f4b5a475f50524f4f465f57524f4e475f5a00000000000000000000000000000060448201526064016101df565b610b9d60606040898b612dbc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929c50505050505050505b50505050610c2a565b60405162461bcd60e51b815260206004820152601560248201527f554e4b4e4f574e5f505245494d4147455f54595045000000000000000000000060448201526064016101df565b60005b8251811015610c6e57610c5a8582858481518110610c4d57610c4d612e4d565b016020015160f81c6116cb565b945080610c6681612e63565b915050610c2d565b50610c7a838786611758565b60208d81015160409081019290925283518251808401845260008082529083018190528351808501909452835263ffffffff16828201528e0151610cbd916117f2565b50505050505050505b505050505050565b6000610ce06104c787602001516113f2565b63ffffffff1690506000610cfa6104c788602001516113f2565b63ffffffff1690506000610d19610d1489602001516113f2565b611802565b67ffffffffffffffff1690506020860135158015610d38575088358110155b15610d60578760025b90816002811115610d5457610d546125fc565b81525050505050610cc6565b6020808801515167ffffffffffffffff1690610d7d908490612e26565b1180610d925750610d8f602083612dfc565b15155b15610d9f57876002610d41565b6000610dac602084612e39565b9050600080610dc76040518060200160405280606081525090565b60208b0151610dd990858b8b876114d4565b9094509092509050888884818110610df357610df3612e4d565b909101357fff0000000000000000000000000000000000000000000000000000000000000016159050610e685760405162461bcd60e51b815260206004820152601360248201527f554e4b4e4f574e5f494e424f585f50524f4f460000000000000000000000000060448201526064016101df565b82610e7281612e63565b93506124749050600060208c0135610e8e576118c49150610ecd565b60018c6020013503610ea457611c1f9150610ecd565b8d60025b90816002811115610ebb57610ebb6125fc565b81525050505050505050505050610cc6565b610eed8f888d8d89908092610ee493929190612dbc565b8663ffffffff16565b905080610efc578d6002610ea8565b505082881015610f4e5760405162461bcd60e51b815260206004820152601160248201527f4241445f4d4553534147455f50524f4f4600000000000000000000000000000060448201526064016101df565b6000610f5a848a612eff565b905060005b60208163ffffffff16108015610f83575081610f8163ffffffff83168b612e26565b105b15610fdc57610fc88463ffffffff83168d8d82610fa08f8c612e26565b610faa9190612e26565b818110610fb957610fb9612e4d565b919091013560f81c90506116cb565b935080610fd481612f12565b915050610f5f565b610fe7838786611758565b60208e01516040015261103d61102a82604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b8f602001516117f290919063ffffffff16565b505050505050505050505050505050565b50506001909252505050565b61106261247e565b8161106b6124a3565b6110736124a3565b60005b600260ff821610156110be5761108d888886611f07565b848360ff16600281106110a2576110a2612e4d565b60200201919091529350806110b681612f35565b915050611076565b5060005b600260ff82161015611119576110d9888886611f23565b838360ff16600281106110ee576110ee612e4d565b67ffffffffffffffff909316602093909302019190915293508061111181612f35565b9150506110c2565b506040805180820190915291825260208201529590945092505050565b60006111486104c788602001516113f2565b63ffffffff16905060006111626104c789602001516113f2565b9050600263ffffffff82161061117a5787600261053d565b6020808801515167ffffffffffffffff1690611197908490612e26565b11806111ac57506111a9602083612dfc565b15155b156111b95787600261053d565b60006111c6602084612e39565b90506000806111e16040518060200160405280606081525090565b60208b01516111f390858a8a876114d4565b909450909250905061801061120b60208b018b612d98565b61ffff160361124f57611241848b600001518763ffffffff166002811061123457611234612e4d565b6020020151839190611758565b60208c0151604001526112d5565b61801161125f60208b018b612d98565b61ffff160361128d578951829063ffffffff87166002811061128357611283612e4d565b60200201526112d5565b60405162461bcd60e51b815260206004820152601760248201527f4241445f474c4f42414c5f53544154455f4f50434f444500000000000000000060448201526064016101df565b505050505050505050505050565b60006112f56104c784602001516113f2565b9050600263ffffffff82161061130d57505060029052565b61137661136b83602001518363ffffffff166002811061132f5761132f612e4d565b6020020151604080518082019091526000808252602082015250604080518082019091526001815267ffffffffffffffff909116602082015290565b6020850151906117f2565b505050565b600061138d610d1484602001516113f2565b905060006113a16104c785602001516113f2565b9050600263ffffffff8216106113bb575050600290915250565b8183602001518263ffffffff16600281106113d8576113d8612e4d565b67ffffffffffffffff909216602092909202015250505050565b6040805180820190915260008082526020820152815161141190611f8b565b92915050565b60208101516000908183516006811115611433576114336125fc565b146114805760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4933320000000000000000000000000000000000000000000000000060448201526064016101df565b64010000000081106114115760405162461bcd60e51b815260206004820152600760248201527f4241445f4933320000000000000000000000000000000000000000000000000060448201526064016101df565b6000806114ed6040518060200160405280606081525090565b8391506114fb868684611f07565b909350915061150b86868461209c565b92509050600061151c828986611758565b9050886040015181146115715760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4d454d5f524f4f5400000000000000000000000000000000000060448201526064016101df565b50955095509592505050565b60408051602080820181905281830181905260608201526080810185905260a0810184905260c08082018490528251808303909101815260e090910191829052600091829081906005906115d2908590612f78565b600060405180830381855afa9150503d806000811461160d576040519150601f19603f3d011682016040523d82523d6000602084013e611612565b606091505b5091509150816116645760405162461bcd60e51b815260206004820152600d60248201527f4d4f444558505f4641494c45440000000000000000000000000000000000000060448201526064016101df565b80516020146116b55760405162461bcd60e51b815260206004820152601360248201527f4d4f444558505f57524f4e475f4c454e4754480000000000000000000000000060448201526064016101df565b6116be81612f94565b93505050505b9392505050565b60006020831061171d5760405162461bcd60e51b815260206004820152601560248201527f4241445f5345545f4c4541465f425954455f494458000000000000000000000060448201526064016101df565b60008361172c60016020612eff565b6117369190612eff565b611741906008612ee8565b60ff848116821b911b198616179150509392505050565b6040517f4d656d6f7279206c6561663a00000000000000000000000000000000000000006020820152602c81018290526000908190604c016040516020818303038152906040528051906020012090506117e98585836040518060400160405280601381526020017f4d656d6f7279206d65726b6c6520747265653a00000000000000000000000000815250612177565b95945050505050565b81516117fe908261224c565b5050565b602081015160009060018351600681111561181f5761181f6125fc565b1461186c5760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4936340000000000000000000000000000000000000000000000000060448201526064016101df565b6801000000000000000081106114115760405162461bcd60e51b815260206004820152600760248201527f4241445f4936340000000000000000000000000000000000000000000000000060448201526064016101df565b600060288210156119175760405162461bcd60e51b815260206004820152601260248201527f4241445f534551494e424f585f50524f4f46000000000000000000000000000060448201526064016101df565b600061192584846020611f23565b50809150506000848460405161193c929190612e7d565b604051908190039020905060008067ffffffffffffffff881615611a145761196a60408a0160208b01612fb8565b73ffffffffffffffffffffffffffffffffffffffff166316bf557961199060018b612fee565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa1580156119ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a119190612e8d565b91505b67ffffffffffffffff841615611ade57611a3460408a0160208b01612fb8565b73ffffffffffffffffffffffffffffffffffffffff1663d5719dc2611a5a600187612fee565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190612e8d565b90505b604080516020810184905290810184905260608101829052600090608001604051602081830303815290604052805190602001209050896020016020810190611b279190612fb8565b6040517f16bf557900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b16600482015273ffffffffffffffffffffffffffffffffffffffff91909116906316bf557990602401602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190612e8d565b8114611c0f5760405162461bcd60e51b815260206004820152601460248201527f4241445f534551494e424f585f4d45535341474500000000000000000000000060448201526064016101df565b5060019998505050505050505050565b60006071821015611c725760405162461bcd60e51b815260206004820152601160248201527f4241445f44454c415945445f50524f4f4600000000000000000000000000000060448201526064016101df565b600067ffffffffffffffff851615611d3e57611c946040870160208801612fb8565b73ffffffffffffffffffffffffffffffffffffffff1663d5719dc2611cba600188612fee565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b9190612e8d565b90505b6000611d4d8460718188612dbc565b604051611d5b929190612e7d565b60405180910390209050600085856000818110611d7a57611d7a612e4d565b9050013560f81c60f81b90506000611d9487876001612340565b50905060008282611da9607160218b8d612dbc565b87604051602001611dbe959493929190613016565b60408051601f19818403018152828252805160209182012083820189905283830181905282518085038401815260609094019092528251920191909120909150611e0e60408c0160208d01612fb8565b6040517fd5719dc200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063d5719dc290602401602060405180830381865afa158015611e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea89190612e8d565b8114611ef65760405162461bcd60e51b815260206004820152601360248201527f4241445f44454c415945445f4d4553534147450000000000000000000000000060448201526064016101df565b5060019a9950505050505050505050565b60008181611f16868684612340565b9097909650945050505050565b600081815b6008811015611f825760088367ffffffffffffffff16901b9250858583818110611f5457611f54612e4d565b919091013560f81c93909317925081611f6c81612e63565b9250508080611f7a90612e63565b915050611f28565b50935093915050565b604080518082019091526000808252602082015281518051611faf90600190612eff565b81518110611fbf57611fbf612e4d565b6020026020010151905060006001836000015151611fdd9190612eff565b67ffffffffffffffff811115611ff557611ff5612872565b60405190808252806020026020018201604052801561203a57816020015b60408051808201909152600080825260208201528152602001906001900390816120135790505b50905060005b815181101561209557835180518290811061205d5761205d612e4d565b602002602001015182828151811061207757612077612e4d565b6020026020010181905250808061208d90612e63565b915050612040565b5090915290565b6040805160208101909152606081528160006120b9868684612395565b92509050600060ff821667ffffffffffffffff8111156120db576120db612872565b604051908082528060200260200182016040528015612104578160200160208202803683370190505b50905060005b8260ff168160ff16101561215b57612123888886611f07565b838360ff168151811061213857612138612e4d565b60200260200101819650828152505050808061215390612f35565b91505061210a565b5060405180602001604052808281525093505050935093915050565b8160005b85515181101561224357846001166000036121df578282876000015183815181106121a8576121a8612e4d565b60200260200101516040516020016121c29392919061307f565b60405160208183030381529060405280519060200120915061222a565b82866000015182815181106121f6576121f6612e4d565b6020026020010151836040516020016122119392919061307f565b6040516020818303038152906040528051906020012091505b60019490941c938061223b81612e63565b91505061217b565b50949350505050565b81515160009061225d906001612e26565b67ffffffffffffffff81111561227557612275612872565b6040519080825280602002602001820160405280156122ba57816020015b60408051808201909152600080825260208201528152602001906001900390816122935790505b50905060005b8351518110156123165783518051829081106122de576122de612e4d565b60200260200101518282815181106122f8576122f8612e4d565b6020026020010181905250808061230e90612e63565b9150506122c0565b5081818460000151518151811061232f5761232f612e4d565b602090810291909101015290915250565b600081815b6020811015611f8257600883901b925085858381811061236757612367612e4d565b919091013560f81c9390931792508161237f81612e63565b925050808061238d90612e63565b915050612345565b6000818484828181106123aa576123aa612e4d565b919091013560f81c92508190506123c081612e63565b915050935093915050565b604080516101208101909152806000815260200161240060408051606080820183529181019182529081526000602082015290565b815260200161242660408051606080820183529181019182529081526000602082015290565b815260200161244b604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b61247c6130a6565b565b60405180604001604052806124916124a3565b815260200161249e6124a3565b905290565b60405180604001604052806002906020820280368337509192915050565b6000604082840312156124d357600080fd5b50919050565b60008083601f8401126124eb57600080fd5b50813567ffffffffffffffff81111561250357600080fd5b60208301915083602082850101111561251b57600080fd5b9250929050565b6000806000806000808688036101c081121561253d57600080fd5b606081121561254b57600080fd5b879650606088013567ffffffffffffffff8082111561256957600080fd5b90890190610120828c03121561257e57600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80840112156125b157600080fd5b60808a0196506125c58b6101608c016124c1565b95506101a08a01359250808311156125dc57600080fd5b50506125ea89828a016124d9565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b60038110612622576126226125fc565b9052565b805160078110612638576126386125fc565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b8084101561269557612681828651612626565b93820193600193909301929085019061266e565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156127145784516126e0858251612626565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a0909301926001016126cb565b509687015197909601969096525093949350505050565b60006101008083526127408184018651612612565b60208501516101208481015261275a610220850182612645565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0080868403016101408701526127978383612645565b9250606088015191508086840301610160870152506127b682826126a9565b915050608086015161018085015260a08601516127dc6101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e0860152509085015161020084015290506116c4602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156128ab576128ab612872565b60405290565b6040516020810167ffffffffffffffff811182821017156128ab576128ab612872565b6040516080810167ffffffffffffffff811182821017156128ab576128ab612872565b604051610120810167ffffffffffffffff811182821017156128ab576128ab612872565b60405160a0810167ffffffffffffffff811182821017156128ab576128ab612872565b6040516060810167ffffffffffffffff811182821017156128ab576128ab612872565b604051601f8201601f1916810167ffffffffffffffff8111828210171561298a5761298a612872565b604052919050565b8035600381106129a157600080fd5b919050565b600067ffffffffffffffff8211156129c0576129c0612872565b5060051b60200190565b6000604082840312156129dc57600080fd5b6129e4612888565b90508135600781106129f557600080fd5b808252506020820135602082015292915050565b60006040808385031215612a1c57600080fd5b612a24612888565b9150823567ffffffffffffffff80821115612a3e57600080fd5b81850191506020808388031215612a5457600080fd5b612a5c6128b1565b833583811115612a6b57600080fd5b80850194505087601f850112612a8057600080fd5b83359250612a95612a90846129a6565b612961565b83815260069390931b84018201928281019089851115612ab457600080fd5b948301945b84861015612ada57612acb8a876129ca565b82529486019490830190612ab9565b8252508552948501359484019490945250909392505050565b803563ffffffff811681146129a157600080fd5b60006040808385031215612b1a57600080fd5b612b22612888565b9150823567ffffffffffffffff811115612b3b57600080fd5b8301601f81018513612b4c57600080fd5b80356020612b5c612a90836129a6565b82815260a09283028401820192828201919089851115612b7b57600080fd5b948301945b84861015612be45780868b031215612b985760008081fd5b612ba06128d4565b612baa8b886129ca565b815287870135858201526060612bc1818901612af3565b89830152612bd160808901612af3565b9082015283529485019491830191612b80565b50808752505080860135818601525050505092915050565b60006101208236031215612c0f57600080fd5b612c176128f7565b612c2083612992565b8152602083013567ffffffffffffffff80821115612c3d57600080fd5b612c4936838701612a09565b60208401526040850135915080821115612c6257600080fd5b612c6e36838701612a09565b60408401526060850135915080821115612c8757600080fd5b50612c9436828601612b07565b60608301525060808301356080820152612cb060a08401612af3565b60a0820152612cc160c08401612af3565b60c0820152612cd260e08401612af3565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff811681146129a157600080fd5b600081830360e0811215612d1457600080fd5b612d1c61291b565b833581526060601f1983011215612d3257600080fd5b612d3a61293e565b9150612d4860208501612ce9565b8252612d5660408501612ce9565b6020830152606084013560408301528160208201526080840135604082015260a08401356060820152612d8b60c08501612af3565b6080820152949350505050565b600060208284031215612daa57600080fd5b813561ffff811681146116c457600080fd5b60008085851115612dcc57600080fd5b83861115612dd957600080fd5b5050820193919092039150565b634e487b7160e01b600052601260045260246000fd5b600082612e0b57612e0b612de6565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561141157611411612e10565b600082612e4857612e48612de6565b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198203612e7657612e76612e10565b5060010190565b8183823760009101908152919050565b600060208284031215612e9f57600080fd5b5051919050565b8035602083101561141157600019602084900360031b1b1692915050565b60008060408385031215612ed757600080fd5b505080516020909101519092909150565b808202811582820484141761141157611411612e10565b8181038181111561141157611411612e10565b600063ffffffff808316818103612f2b57612f2b612e10565b6001019392505050565b600060ff821660ff8103612f4b57612f4b612e10565b60010192915050565b60005b83811015612f6f578181015183820152602001612f57565b50506000910152565b60008251612f8a818460208701612f54565b9190910192915050565b805160208083015191908110156124d35760001960209190910360031b1b16919050565b600060208284031215612fca57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146116c457600080fd5b67ffffffffffffffff82811682821603908082111561300f5761300f612e10565b5092915050565b7fff00000000000000000000000000000000000000000000000000000000000000861681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b1660018201528284601583013760159201918201526035019392505050565b60008451613091818460208901612f54565b91909101928352506020820152604001919050565b634e487b7160e01b600052605160045260246000fdfea26469706673582212207f8a229256c956fc51ab9aee6730f126569f5023f5e57eeada0aab1847cb741464736f6c63430008110033", } // OneStepProverHostIoABI is the input ABI used to generate the binding from. @@ -1965,7 +1965,7 @@ func (_OneStepProverHostIo *OneStepProverHostIoCallerSession) ExecuteOneStep(exe // OneStepProverMathMetaData contains all meta data concerning the OneStepProverMath contract. var OneStepProverMathMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"startMach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"startMod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"opcode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"argumentData\",\"type\":\"uint256\"}],\"internalType\":\"structInstruction\",\"name\":\"inst\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"executeOneStep\",\"outputs\":[{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"mach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"mod\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506126ed806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e366004611c78565b61005a565b604051610051929190611e81565b60405180910390f35b610062611b64565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae8761234d565b91506100bf36879003870187612452565b905060006100d060208701876124e9565b9050611c0d61ffff8216604514806100ec575061ffff82166050145b156100fa5750610336610318565b604661ffff831610801590610122575061011660096046612523565b61ffff168261ffff1611155b1561013057506104e6610318565b606761ffff831610801590610158575061014c60026067612523565b61ffff168261ffff1611155b1561016657506105c9610318565b606a61ffff8316108015906101805750607861ffff831611155b1561018e5750610656610318565b605161ffff8316108015906101b657506101aa60096051612523565b61ffff168261ffff1611155b156101c4575061087e610318565b607961ffff8316108015906101ec57506101e060026079612523565b61ffff168261ffff1611155b156101fa57506108e3610318565b607c61ffff8316108015906102145750608a61ffff831611155b15610222575061095d610318565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5961ffff8316016102565750610b5b610318565b61ffff821660ac148061026d575061ffff821660ad145b1561027b5750610ba6610318565b60c061ffff831610801590610295575060c461ffff831611155b156102a35750610c25610318565b60bc61ffff8316108015906102bd575060bf61ffff831611155b156102cb5750610e3e610318565b60405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f4f50434f444500000000000000000000000000000000000060448201526064015b60405180910390fd5b61032984848989898663ffffffff16565b5050965096945050505050565b60006103458660200151610fd4565b9050604561035660208601866124e9565b61ffff16036103c65760008151600681111561037457610374611d52565b146103c15760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b610488565b60506103d560208601866124e9565b61ffff1603610440576001815160068111156103f3576103f3611d52565b146103c15760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b60405162461bcd60e51b815260206004820152600760248201527f4241445f45515a00000000000000000000000000000000000000000000000000604482015260640161030f565b6000816020015160000361049e575060016104a2565b5060005b604080518082018252600080825260209182018190528251808401909352825263ffffffff8316908201526104dd905b602089015190610ff9565b50505050505050565b60006104fd6104f88760200151610fd4565b611009565b905060006105116104f88860200151610fd4565b90506000604661052460208801886124e9565b61052e9190612545565b905060008061ffff83166002148061054a575061ffff83166004145b80610559575061ffff83166006145b80610568575061ffff83166008145b1561058857610576846110c6565b9150610581856110c6565b9050610596565b505063ffffffff8083169084165b60006105a38383866110f2565b90506105bc6105b18261138c565b60208d015190610ff9565b5050505050505050505050565b60006105db6104f88760200151610fd4565b9050600060676105ee60208701876124e9565b6105f89190612545565b9050600061060e8363ffffffff16836020611400565b604080518082018252600080825260209182018190528251808401909352825263ffffffff83169082015290915061064c905b60208a015190610ff9565b5050505050505050565b60006106686104f88760200151610fd4565b9050600061067c6104f88860200151610fd4565b9050600080606a61069060208901896124e9565b61069a9190612545565b90508061ffff166003036107325763ffffffff841615806106ec57508260030b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000001480156106ec57508360030b600019145b15610715578860025b9081600281111561070857610708611d52565b8152505050505050610877565b8360030b8360030b8161072a5761072a612560565b059150610837565b8061ffff16600503610771578363ffffffff16600003610754578860026106f5565b8360030b8360030b8161076957610769612560565b079150610837565b8061ffff16600a036107905763ffffffff8316601f85161b9150610837565b8061ffff16600c036107af5763ffffffff8316601f85161c9150610837565b8061ffff16600b036107cc57600383900b601f85161d9150610837565b8061ffff16600d036107e9576107e283856115e0565b9150610837565b8061ffff16600e036107ff576107e28385611622565b6000806108198563ffffffff168763ffffffff1685611664565b915091508015610833575050600289525061087792505050565b5091505b604080518082018252600080825260209182018190528251808401909352825263ffffffff841690820152610872905b60208b015190610ff9565b505050505b5050505050565b60006108956108908760200151610fd4565b6117f9565b905060006108a96108908860200151610fd4565b9050600060516108bc60208801886124e9565b6108c69190612545565b905060006108d58385846110f2565b90506108726108678261138c565b60006108f56108908760200151610fd4565b90506000607961090860208701876124e9565b6109129190612545565b9050600061092283836040611400565b604080518082018252600080825260209182015281518083019092526001825263ffffffff9290921691810182905290915061064c90610641565b600061096f6108908760200151610fd4565b905060006109836108908860200151610fd4565b9050600080607c61099760208901896124e9565b6109a19190612545565b90508061ffff16600303610a215767ffffffffffffffff841615806109f757508260070b7fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000001480156109f757508360070b600019145b15610a04578860026106f5565b8360070b8360070b81610a1957610a19612560565b059150610b23565b8061ffff16600503610a64578367ffffffffffffffff16600003610a47578860026106f5565b8360070b8360070b81610a5c57610a5c612560565b079150610b23565b8061ffff16600a03610a875767ffffffffffffffff8316603f85161b9150610b23565b8061ffff16600c03610aaa5767ffffffffffffffff8316603f85161c9150610b23565b8061ffff16600b03610ac757600783900b603f85161d9150610b23565b8061ffff16600d03610ae457610add83856118bb565b9150610b23565b8061ffff16600e03610afa57610add838561190d565b6000610b07848684611664565b90935090508015610b215750506002885250610877915050565b505b604080518082018252600080825260209182015281518083019092526001825267ffffffffffffffff84169082015261087290610867565b6000610b6d6108908760200151610fd4565b604080518082018252600080825260209182018190528251808401909352825263ffffffff83169082015290915081906104dd906104d2565b6000610bb86104f88760200151610fd4565b9050600060ac610bcb60208701876124e9565b61ffff1603610be457610bdd826110c6565b9050610bed565b5063ffffffff81165b604080518082018252600080825260209182015281518083019092526001825267ffffffffffffffff8316908201526104dd906104d2565b60008060c0610c3760208701876124e9565b61ffff1603610c4c5750600090506008610d24565b60c1610c5b60208701876124e9565b61ffff1603610c705750600090506010610d24565b60c2610c7f60208701876124e9565b61ffff1603610c945750600190506008610d24565b60c3610ca360208701876124e9565b61ffff1603610cb85750600190506010610d24565b60c4610cc760208701876124e9565b61ffff1603610cdc5750600190506020610d24565b60405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f455854454e445f53414d455f545950450000000000000000604482015260640161030f565b600080836006811115610d3957610d39611d52565b03610d49575063ffffffff610d54565b5067ffffffffffffffff5b6000610d638960200151610fd4565b9050836006811115610d7757610d77611d52565b81516006811115610d8a57610d8a611d52565b14610dd75760405162461bcd60e51b815260206004820152601960248201527f4241445f455854454e445f53414d455f545950455f5459504500000000000000604482015260640161030f565b6000610dea600160ff861681901b612576565b602083018051821690529050610e01600185612589565b60ff166001901b826020015116600014610e2357602082018051821985161790525b60208a0151610e329083610ff9565b50505050505050505050565b60008060bc610e5060208701876124e9565b61ffff1603610e655750600090506002610f19565b60bd610e7460208701876124e9565b61ffff1603610e895750600190506003610f19565b60be610e9860208701876124e9565b61ffff1603610ead5750600290506000610f19565b60bf610ebc60208701876124e9565b61ffff1603610ed15750600390506001610f19565b60405162461bcd60e51b815260206004820152601360248201527f494e56414c49445f5245494e5445525052455400000000000000000000000000604482015260640161030f565b6000610f288860200151610fd4565b9050816006811115610f3c57610f3c611d52565b81516006811115610f4f57610f4f611d52565b14610f9c5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5245494e544552505245545f545950450000000000000000604482015260640161030f565b80836006811115610faf57610faf611d52565b90816006811115610fc257610fc2611d52565b905250602088015161064c9082610ff9565b60408051808201909152600080825260208201528151610ff39061195f565b92915050565b81516110059082611a70565b5050565b6020810151600090818351600681111561102557611025611d52565b146110725760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b6401000000008110610ff35760405162461bcd60e51b815260206004820152600760248201527f4241445f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b600063800000008216156110e8575063ffffffff1667ffffffff000000001790565b5063ffffffff1690565b600061ffff821661111b578267ffffffffffffffff168467ffffffffffffffff16149050611385565b60001961ffff831601611147578267ffffffffffffffff168467ffffffffffffffff1614159050611385565b60011961ffff831601611164578260070b8460070b129050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd61ffff8316016111ad578267ffffffffffffffff168467ffffffffffffffff16109050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61ffff8316016111e8578260070b8460070b139050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb61ffff831601611231578267ffffffffffffffff168467ffffffffffffffff16119050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa61ffff83160161126d578260070b8460070b13159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff961ffff8316016112b7578267ffffffffffffffff168467ffffffffffffffff1611159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861ffff8316016112f3578260070b8460070b12159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff761ffff83160161133d578267ffffffffffffffff168467ffffffffffffffff1610159050611385565b60405162461bcd60e51b815260206004820152600a60248201527f424144204952454c4f5000000000000000000000000000000000000000000000604482015260640161030f565b9392505050565b604080518082019091526000808252602082015281156113d1576040805180820182526000808252602091820181905282518084019093528252600190820152610ff3565b60408051808201825260008082526020918201819052825180840190935280835290820152610ff3565b919050565b60008161ffff166020148061141957508161ffff166040145b6114655760405162461bcd60e51b815260206004820152601860248201527f57524f4e4720555345204f462067656e65726963556e4f700000000000000000604482015260640161030f565b61ffff83166114d75761ffff82165b60008163ffffffff161180156114aa57506114906001826125a2565b63ffffffff166001901b8567ffffffffffffffff16166000145b156114c1576114ba6001826125a2565b9050611474565b6114cf8161ffff85166125a2565b915050611385565b60001961ffff8416016115315760005b8261ffff168163ffffffff161080156115135750600163ffffffff82161b851667ffffffffffffffff16155b1561152a576115236001826125bf565b90506114e7565b9050611385565b60011961ffff841601611598576000805b8361ffff168263ffffffff16101561158f57600163ffffffff83161b861667ffffffffffffffff161561157d5761157a6001826125bf565b90505b81611587816125dc565b925050611542565b91506113859050565b60405162461bcd60e51b815260206004820152600960248201527f4241442049556e4f700000000000000000000000000000000000000000000000604482015260640161030f565b60006115ed6020836125ff565b91506115fa8260206125a2565b63ffffffff168363ffffffff16901c8263ffffffff168463ffffffff16901b17905092915050565b600061162f6020836125ff565b915061163c8260206125a2565b63ffffffff168363ffffffff16901b8263ffffffff168463ffffffff16901c17905092915050565b6000808261ffff1660000361167f57505082820160006117f1565b8261ffff1660010361169757505081830360006117f1565b8261ffff166002036116af57505082820260006117f1565b8261ffff16600403611708578367ffffffffffffffff166000036116d957506000905060016117f1565b8367ffffffffffffffff168567ffffffffffffffff16816116fc576116fc612560565b046000915091506117f1565b8261ffff16600603611761578367ffffffffffffffff1660000361173257506000905060016117f1565b8367ffffffffffffffff168567ffffffffffffffff168161175557611755612560565b066000915091506117f1565b8261ffff1660070361177957505082821660006117f1565b8261ffff1660080361179157505082821760006117f1565b8261ffff166009036117a957505082821860006117f1565b60405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f47454e455249435f42494e5f4f5000000000000000000000604482015260640161030f565b935093915050565b602081015160009060018351600681111561181657611816611d52565b146118635760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b680100000000000000008110610ff35760405162461bcd60e51b815260206004820152600760248201527f4241445f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b60006118c8604083612622565b91506118d582604061263d565b67ffffffffffffffff168367ffffffffffffffff16901c8267ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b600061191a604083612622565b915061192782604061263d565b67ffffffffffffffff168367ffffffffffffffff16901b8267ffffffffffffffff168467ffffffffffffffff16901c17905092915050565b60408051808201909152600080825260208201528151805161198390600190612576565b815181106119935761199361265e565b60200260200101519050600060018360000151516119b19190612576565b67ffffffffffffffff8111156119c9576119c9611fc8565b604051908082528060200260200182016040528015611a0e57816020015b60408051808201909152600080825260208201528152602001906001900390816119e75790505b50905060005b8151811015611a69578351805182908110611a3157611a3161265e565b6020026020010151828281518110611a4b57611a4b61265e565b60200260200101819052508080611a6190612674565b915050611a14565b5090915290565b815151600090611a8190600161268e565b67ffffffffffffffff811115611a9957611a99611fc8565b604051908082528060200260200182016040528015611ade57816020015b6040805180820190915260008082526020820152815260200190600190039081611ab75790505b50905060005b835151811015611b3a578351805182908110611b0257611b0261265e565b6020026020010151828281518110611b1c57611b1c61265e565b60200260200101819052508080611b3290612674565b915050611ae4565b50818184600001515181518110611b5357611b5361265e565b602090810291909101015290915250565b6040805161012081019091528060008152602001611b9960408051606080820183529181019182529081526000602082015290565b8152602001611bbf60408051606080820183529181019182529081526000602082015290565b8152602001611be4604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b611c156126a1565b565b600060408284031215611c2957600080fd5b50919050565b60008083601f840112611c4157600080fd5b50813567ffffffffffffffff811115611c5957600080fd5b602083019150836020828501011115611c7157600080fd5b9250929050565b6000806000806000808688036101c0811215611c9357600080fd5b6060811215611ca157600080fd5b879650606088013567ffffffffffffffff80821115611cbf57600080fd5b90890190610120828c031215611cd457600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8084011215611d0757600080fd5b60808a019650611d1b8b6101608c01611c17565b95506101a08a0135925080831115611d3257600080fd5b5050611d4089828a01611c2f565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b60038110611d7857611d78611d52565b9052565b805160078110611d8e57611d8e611d52565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b80841015611deb57611dd7828651611d7c565b938201936001939093019290850190611dc4565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b82811015611e6a578451611e36858251611d7c565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101611e21565b509687015197909601969096525093949350505050565b6000610100808352611e968184018651611d68565b602085015161012084810152611eb0610220850182611d9b565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008086840301610140870152611eed8383611d9b565b925060608801519150808684030161016087015250611f0c8282611dff565b915050608086015161018085015260a0860151611f326101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050611385602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561200157612001611fc8565b60405290565b6040516020810167ffffffffffffffff8111828210171561200157612001611fc8565b6040516080810167ffffffffffffffff8111828210171561200157612001611fc8565b604051610120810167ffffffffffffffff8111828210171561200157612001611fc8565b60405160a0810167ffffffffffffffff8111828210171561200157612001611fc8565b6040516060810167ffffffffffffffff8111828210171561200157612001611fc8565b604051601f8201601f1916810167ffffffffffffffff811182821017156120e0576120e0611fc8565b604052919050565b8035600381106113fb57600080fd5b600067ffffffffffffffff82111561211157612111611fc8565b5060051b60200190565b60006040828403121561212d57600080fd5b612135611fde565b905081356007811061214657600080fd5b808252506020820135602082015292915050565b6000604080838503121561216d57600080fd5b612175611fde565b9150823567ffffffffffffffff8082111561218f57600080fd5b818501915060208083880312156121a557600080fd5b6121ad612007565b8335838111156121bc57600080fd5b80850194505087601f8501126121d157600080fd5b833592506121e66121e1846120f7565b6120b7565b83815260069390931b8401820192828101908985111561220557600080fd5b948301945b8486101561222b5761221c8a8761211b565b8252948601949083019061220a565b8252508552948501359484019490945250909392505050565b803563ffffffff811681146113fb57600080fd5b6000604080838503121561226b57600080fd5b612273611fde565b9150823567ffffffffffffffff81111561228c57600080fd5b8301601f8101851361229d57600080fd5b803560206122ad6121e1836120f7565b82815260a092830284018201928282019190898511156122cc57600080fd5b948301945b848610156123355780868b0312156122e95760008081fd5b6122f161202a565b6122fb8b8861211b565b815287870135858201526060612312818901612244565b8983015261232260808901612244565b90820152835294850194918301916122d1565b50808752505080860135818601525050505092915050565b6000610120823603121561236057600080fd5b61236861204d565b612371836120e8565b8152602083013567ffffffffffffffff8082111561238e57600080fd5b61239a3683870161215a565b602084015260408501359150808211156123b357600080fd5b6123bf3683870161215a565b604084015260608501359150808211156123d857600080fd5b506123e536828601612258565b6060830152506080830135608082015261240160a08401612244565b60a082015261241260c08401612244565b60c082015261242360e08401612244565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff811681146113fb57600080fd5b600081830360e081121561246557600080fd5b61246d612071565b833581526060601f198301121561248357600080fd5b61248b612094565b91506124996020850161243a565b82526124a76040850161243a565b6020830152606084013560408301528160208201526080840135604082015260a084013560608201526124dc60c08501612244565b6080820152949350505050565b6000602082840312156124fb57600080fd5b813561ffff8116811461138557600080fd5b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111561253e5761253e61250d565b5092915050565b61ffff82811682821603908082111561253e5761253e61250d565b634e487b7160e01b600052601260045260246000fd5b81810381811115610ff357610ff361250d565b60ff8281168282160390811115610ff357610ff361250d565b63ffffffff82811682821603908082111561253e5761253e61250d565b63ffffffff81811683821601908082111561253e5761253e61250d565b600063ffffffff8083168181036125f5576125f561250d565b6001019392505050565b600063ffffffff8084168061261657612616612560565b92169190910692915050565b600067ffffffffffffffff8084168061261657612616612560565b67ffffffffffffffff82811682821603908082111561253e5761253e61250d565b634e487b7160e01b600052603260045260246000fd5b600060001982036126875761268761250d565b5060010190565b80820180821115610ff357610ff361250d565b634e487b7160e01b600052605160045260246000fdfea26469706673582212203454c1c30c97ca6d3e22c07fe2f741872668b8d35ac2b22c3d0f5a6dd237388d64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b506126ed806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e366004611c78565b61005a565b604051610051929190611e81565b60405180910390f35b610062611b64565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae8761234d565b91506100bf36879003870187612452565b905060006100d060208701876124e9565b9050611c0d61ffff8216604514806100ec575061ffff82166050145b156100fa5750610336610318565b604661ffff831610801590610122575061011660096046612523565b61ffff168261ffff1611155b1561013057506104e6610318565b606761ffff831610801590610158575061014c60026067612523565b61ffff168261ffff1611155b1561016657506105c9610318565b606a61ffff8316108015906101805750607861ffff831611155b1561018e5750610656610318565b605161ffff8316108015906101b657506101aa60096051612523565b61ffff168261ffff1611155b156101c4575061087e610318565b607961ffff8316108015906101ec57506101e060026079612523565b61ffff168261ffff1611155b156101fa57506108e3610318565b607c61ffff8316108015906102145750608a61ffff831611155b15610222575061095d610318565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5961ffff8316016102565750610b5b610318565b61ffff821660ac148061026d575061ffff821660ad145b1561027b5750610ba6610318565b60c061ffff831610801590610295575060c461ffff831611155b156102a35750610c25610318565b60bc61ffff8316108015906102bd575060bf61ffff831611155b156102cb5750610e3e610318565b60405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f4f50434f444500000000000000000000000000000000000060448201526064015b60405180910390fd5b61032984848989898663ffffffff16565b5050965096945050505050565b60006103458660200151610fd4565b9050604561035660208601866124e9565b61ffff16036103c65760008151600681111561037457610374611d52565b146103c15760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b610488565b60506103d560208601866124e9565b61ffff1603610440576001815160068111156103f3576103f3611d52565b146103c15760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b60405162461bcd60e51b815260206004820152600760248201527f4241445f45515a00000000000000000000000000000000000000000000000000604482015260640161030f565b6000816020015160000361049e575060016104a2565b5060005b604080518082018252600080825260209182018190528251808401909352825263ffffffff8316908201526104dd905b602089015190610ff9565b50505050505050565b60006104fd6104f88760200151610fd4565b611009565b905060006105116104f88860200151610fd4565b90506000604661052460208801886124e9565b61052e9190612545565b905060008061ffff83166002148061054a575061ffff83166004145b80610559575061ffff83166006145b80610568575061ffff83166008145b1561058857610576846110c6565b9150610581856110c6565b9050610596565b505063ffffffff8083169084165b60006105a38383866110f2565b90506105bc6105b18261138c565b60208d015190610ff9565b5050505050505050505050565b60006105db6104f88760200151610fd4565b9050600060676105ee60208701876124e9565b6105f89190612545565b9050600061060e8363ffffffff16836020611400565b604080518082018252600080825260209182018190528251808401909352825263ffffffff83169082015290915061064c905b60208a015190610ff9565b5050505050505050565b60006106686104f88760200151610fd4565b9050600061067c6104f88860200151610fd4565b9050600080606a61069060208901896124e9565b61069a9190612545565b90508061ffff166003036107325763ffffffff841615806106ec57508260030b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000001480156106ec57508360030b600019145b15610715578860025b9081600281111561070857610708611d52565b8152505050505050610877565b8360030b8360030b8161072a5761072a612560565b059150610837565b8061ffff16600503610771578363ffffffff16600003610754578860026106f5565b8360030b8360030b8161076957610769612560565b079150610837565b8061ffff16600a036107905763ffffffff8316601f85161b9150610837565b8061ffff16600c036107af5763ffffffff8316601f85161c9150610837565b8061ffff16600b036107cc57600383900b601f85161d9150610837565b8061ffff16600d036107e9576107e283856115e0565b9150610837565b8061ffff16600e036107ff576107e28385611622565b6000806108198563ffffffff168763ffffffff1685611664565b915091508015610833575050600289525061087792505050565b5091505b604080518082018252600080825260209182018190528251808401909352825263ffffffff841690820152610872905b60208b015190610ff9565b505050505b5050505050565b60006108956108908760200151610fd4565b6117f9565b905060006108a96108908860200151610fd4565b9050600060516108bc60208801886124e9565b6108c69190612545565b905060006108d58385846110f2565b90506108726108678261138c565b60006108f56108908760200151610fd4565b90506000607961090860208701876124e9565b6109129190612545565b9050600061092283836040611400565b604080518082018252600080825260209182015281518083019092526001825263ffffffff9290921691810182905290915061064c90610641565b600061096f6108908760200151610fd4565b905060006109836108908860200151610fd4565b9050600080607c61099760208901896124e9565b6109a19190612545565b90508061ffff16600303610a215767ffffffffffffffff841615806109f757508260070b7fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000001480156109f757508360070b600019145b15610a04578860026106f5565b8360070b8360070b81610a1957610a19612560565b059150610b23565b8061ffff16600503610a64578367ffffffffffffffff16600003610a47578860026106f5565b8360070b8360070b81610a5c57610a5c612560565b079150610b23565b8061ffff16600a03610a875767ffffffffffffffff8316603f85161b9150610b23565b8061ffff16600c03610aaa5767ffffffffffffffff8316603f85161c9150610b23565b8061ffff16600b03610ac757600783900b603f85161d9150610b23565b8061ffff16600d03610ae457610add83856118bb565b9150610b23565b8061ffff16600e03610afa57610add838561190d565b6000610b07848684611664565b90935090508015610b215750506002885250610877915050565b505b604080518082018252600080825260209182015281518083019092526001825267ffffffffffffffff84169082015261087290610867565b6000610b6d6108908760200151610fd4565b604080518082018252600080825260209182018190528251808401909352825263ffffffff83169082015290915081906104dd906104d2565b6000610bb86104f88760200151610fd4565b9050600060ac610bcb60208701876124e9565b61ffff1603610be457610bdd826110c6565b9050610bed565b5063ffffffff81165b604080518082018252600080825260209182015281518083019092526001825267ffffffffffffffff8316908201526104dd906104d2565b60008060c0610c3760208701876124e9565b61ffff1603610c4c5750600090506008610d24565b60c1610c5b60208701876124e9565b61ffff1603610c705750600090506010610d24565b60c2610c7f60208701876124e9565b61ffff1603610c945750600190506008610d24565b60c3610ca360208701876124e9565b61ffff1603610cb85750600190506010610d24565b60c4610cc760208701876124e9565b61ffff1603610cdc5750600190506020610d24565b60405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f455854454e445f53414d455f545950450000000000000000604482015260640161030f565b600080836006811115610d3957610d39611d52565b03610d49575063ffffffff610d54565b5067ffffffffffffffff5b6000610d638960200151610fd4565b9050836006811115610d7757610d77611d52565b81516006811115610d8a57610d8a611d52565b14610dd75760405162461bcd60e51b815260206004820152601960248201527f4241445f455854454e445f53414d455f545950455f5459504500000000000000604482015260640161030f565b6000610dea600160ff861681901b612576565b602083018051821690529050610e01600185612589565b60ff166001901b826020015116600014610e2357602082018051821985161790525b60208a0151610e329083610ff9565b50505050505050505050565b60008060bc610e5060208701876124e9565b61ffff1603610e655750600090506002610f19565b60bd610e7460208701876124e9565b61ffff1603610e895750600190506003610f19565b60be610e9860208701876124e9565b61ffff1603610ead5750600290506000610f19565b60bf610ebc60208701876124e9565b61ffff1603610ed15750600390506001610f19565b60405162461bcd60e51b815260206004820152601360248201527f494e56414c49445f5245494e5445525052455400000000000000000000000000604482015260640161030f565b6000610f288860200151610fd4565b9050816006811115610f3c57610f3c611d52565b81516006811115610f4f57610f4f611d52565b14610f9c5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5245494e544552505245545f545950450000000000000000604482015260640161030f565b80836006811115610faf57610faf611d52565b90816006811115610fc257610fc2611d52565b905250602088015161064c9082610ff9565b60408051808201909152600080825260208201528151610ff39061195f565b92915050565b81516110059082611a70565b5050565b6020810151600090818351600681111561102557611025611d52565b146110725760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b6401000000008110610ff35760405162461bcd60e51b815260206004820152600760248201527f4241445f49333200000000000000000000000000000000000000000000000000604482015260640161030f565b600063800000008216156110e8575063ffffffff1667ffffffff000000001790565b5063ffffffff1690565b600061ffff821661111b578267ffffffffffffffff168467ffffffffffffffff16149050611385565b60001961ffff831601611147578267ffffffffffffffff168467ffffffffffffffff1614159050611385565b60011961ffff831601611164578260070b8460070b129050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd61ffff8316016111ad578267ffffffffffffffff168467ffffffffffffffff16109050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61ffff8316016111e8578260070b8460070b139050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb61ffff831601611231578267ffffffffffffffff168467ffffffffffffffff16119050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa61ffff83160161126d578260070b8460070b13159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff961ffff8316016112b7578267ffffffffffffffff168467ffffffffffffffff1611159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861ffff8316016112f3578260070b8460070b12159050611385565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff761ffff83160161133d578267ffffffffffffffff168467ffffffffffffffff1610159050611385565b60405162461bcd60e51b815260206004820152600a60248201527f424144204952454c4f5000000000000000000000000000000000000000000000604482015260640161030f565b9392505050565b604080518082019091526000808252602082015281156113d1576040805180820182526000808252602091820181905282518084019093528252600190820152610ff3565b60408051808201825260008082526020918201819052825180840190935280835290820152610ff3565b919050565b60008161ffff166020148061141957508161ffff166040145b6114655760405162461bcd60e51b815260206004820152601860248201527f57524f4e4720555345204f462067656e65726963556e4f700000000000000000604482015260640161030f565b61ffff83166114d75761ffff82165b60008163ffffffff161180156114aa57506114906001826125a2565b63ffffffff166001901b8567ffffffffffffffff16166000145b156114c1576114ba6001826125a2565b9050611474565b6114cf8161ffff85166125a2565b915050611385565b60001961ffff8416016115315760005b8261ffff168163ffffffff161080156115135750600163ffffffff82161b851667ffffffffffffffff16155b1561152a576115236001826125bf565b90506114e7565b9050611385565b60011961ffff841601611598576000805b8361ffff168263ffffffff16101561158f57600163ffffffff83161b861667ffffffffffffffff161561157d5761157a6001826125bf565b90505b81611587816125dc565b925050611542565b91506113859050565b60405162461bcd60e51b815260206004820152600960248201527f4241442049556e4f700000000000000000000000000000000000000000000000604482015260640161030f565b60006115ed6020836125ff565b91506115fa8260206125a2565b63ffffffff168363ffffffff16901c8263ffffffff168463ffffffff16901b17905092915050565b600061162f6020836125ff565b915061163c8260206125a2565b63ffffffff168363ffffffff16901b8263ffffffff168463ffffffff16901c17905092915050565b6000808261ffff1660000361167f57505082820160006117f1565b8261ffff1660010361169757505081830360006117f1565b8261ffff166002036116af57505082820260006117f1565b8261ffff16600403611708578367ffffffffffffffff166000036116d957506000905060016117f1565b8367ffffffffffffffff168567ffffffffffffffff16816116fc576116fc612560565b046000915091506117f1565b8261ffff16600603611761578367ffffffffffffffff1660000361173257506000905060016117f1565b8367ffffffffffffffff168567ffffffffffffffff168161175557611755612560565b066000915091506117f1565b8261ffff1660070361177957505082821660006117f1565b8261ffff1660080361179157505082821760006117f1565b8261ffff166009036117a957505082821860006117f1565b60405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f47454e455249435f42494e5f4f5000000000000000000000604482015260640161030f565b935093915050565b602081015160009060018351600681111561181657611816611d52565b146118635760405162461bcd60e51b815260206004820152600760248201527f4e4f545f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b680100000000000000008110610ff35760405162461bcd60e51b815260206004820152600760248201527f4241445f49363400000000000000000000000000000000000000000000000000604482015260640161030f565b60006118c8604083612622565b91506118d582604061263d565b67ffffffffffffffff168367ffffffffffffffff16901c8267ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b600061191a604083612622565b915061192782604061263d565b67ffffffffffffffff168367ffffffffffffffff16901b8267ffffffffffffffff168467ffffffffffffffff16901c17905092915050565b60408051808201909152600080825260208201528151805161198390600190612576565b815181106119935761199361265e565b60200260200101519050600060018360000151516119b19190612576565b67ffffffffffffffff8111156119c9576119c9611fc8565b604051908082528060200260200182016040528015611a0e57816020015b60408051808201909152600080825260208201528152602001906001900390816119e75790505b50905060005b8151811015611a69578351805182908110611a3157611a3161265e565b6020026020010151828281518110611a4b57611a4b61265e565b60200260200101819052508080611a6190612674565b915050611a14565b5090915290565b815151600090611a8190600161268e565b67ffffffffffffffff811115611a9957611a99611fc8565b604051908082528060200260200182016040528015611ade57816020015b6040805180820190915260008082526020820152815260200190600190039081611ab75790505b50905060005b835151811015611b3a578351805182908110611b0257611b0261265e565b6020026020010151828281518110611b1c57611b1c61265e565b60200260200101819052508080611b3290612674565b915050611ae4565b50818184600001515181518110611b5357611b5361265e565b602090810291909101015290915250565b6040805161012081019091528060008152602001611b9960408051606080820183529181019182529081526000602082015290565b8152602001611bbf60408051606080820183529181019182529081526000602082015290565b8152602001611be4604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b611c156126a1565b565b600060408284031215611c2957600080fd5b50919050565b60008083601f840112611c4157600080fd5b50813567ffffffffffffffff811115611c5957600080fd5b602083019150836020828501011115611c7157600080fd5b9250929050565b6000806000806000808688036101c0811215611c9357600080fd5b6060811215611ca157600080fd5b879650606088013567ffffffffffffffff80821115611cbf57600080fd5b90890190610120828c031215611cd457600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8084011215611d0757600080fd5b60808a019650611d1b8b6101608c01611c17565b95506101a08a0135925080831115611d3257600080fd5b5050611d4089828a01611c2f565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b60038110611d7857611d78611d52565b9052565b805160078110611d8e57611d8e611d52565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b80841015611deb57611dd7828651611d7c565b938201936001939093019290850190611dc4565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b82811015611e6a578451611e36858251611d7c565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a090930192600101611e21565b509687015197909601969096525093949350505050565b6000610100808352611e968184018651611d68565b602085015161012084810152611eb0610220850182611d9b565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008086840301610140870152611eed8383611d9b565b925060608801519150808684030161016087015250611f0c8282611dff565b915050608086015161018085015260a0860151611f326101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050611385602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561200157612001611fc8565b60405290565b6040516020810167ffffffffffffffff8111828210171561200157612001611fc8565b6040516080810167ffffffffffffffff8111828210171561200157612001611fc8565b604051610120810167ffffffffffffffff8111828210171561200157612001611fc8565b60405160a0810167ffffffffffffffff8111828210171561200157612001611fc8565b6040516060810167ffffffffffffffff8111828210171561200157612001611fc8565b604051601f8201601f1916810167ffffffffffffffff811182821017156120e0576120e0611fc8565b604052919050565b8035600381106113fb57600080fd5b600067ffffffffffffffff82111561211157612111611fc8565b5060051b60200190565b60006040828403121561212d57600080fd5b612135611fde565b905081356007811061214657600080fd5b808252506020820135602082015292915050565b6000604080838503121561216d57600080fd5b612175611fde565b9150823567ffffffffffffffff8082111561218f57600080fd5b818501915060208083880312156121a557600080fd5b6121ad612007565b8335838111156121bc57600080fd5b80850194505087601f8501126121d157600080fd5b833592506121e66121e1846120f7565b6120b7565b83815260069390931b8401820192828101908985111561220557600080fd5b948301945b8486101561222b5761221c8a8761211b565b8252948601949083019061220a565b8252508552948501359484019490945250909392505050565b803563ffffffff811681146113fb57600080fd5b6000604080838503121561226b57600080fd5b612273611fde565b9150823567ffffffffffffffff81111561228c57600080fd5b8301601f8101851361229d57600080fd5b803560206122ad6121e1836120f7565b82815260a092830284018201928282019190898511156122cc57600080fd5b948301945b848610156123355780868b0312156122e95760008081fd5b6122f161202a565b6122fb8b8861211b565b815287870135858201526060612312818901612244565b8983015261232260808901612244565b90820152835294850194918301916122d1565b50808752505080860135818601525050505092915050565b6000610120823603121561236057600080fd5b61236861204d565b612371836120e8565b8152602083013567ffffffffffffffff8082111561238e57600080fd5b61239a3683870161215a565b602084015260408501359150808211156123b357600080fd5b6123bf3683870161215a565b604084015260608501359150808211156123d857600080fd5b506123e536828601612258565b6060830152506080830135608082015261240160a08401612244565b60a082015261241260c08401612244565b60c082015261242360e08401612244565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff811681146113fb57600080fd5b600081830360e081121561246557600080fd5b61246d612071565b833581526060601f198301121561248357600080fd5b61248b612094565b91506124996020850161243a565b82526124a76040850161243a565b6020830152606084013560408301528160208201526080840135604082015260a084013560608201526124dc60c08501612244565b6080820152949350505050565b6000602082840312156124fb57600080fd5b813561ffff8116811461138557600080fd5b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111561253e5761253e61250d565b5092915050565b61ffff82811682821603908082111561253e5761253e61250d565b634e487b7160e01b600052601260045260246000fd5b81810381811115610ff357610ff361250d565b60ff8281168282160390811115610ff357610ff361250d565b63ffffffff82811682821603908082111561253e5761253e61250d565b63ffffffff81811683821601908082111561253e5761253e61250d565b600063ffffffff8083168181036125f5576125f561250d565b6001019392505050565b600063ffffffff8084168061261657612616612560565b92169190910692915050565b600067ffffffffffffffff8084168061261657612616612560565b67ffffffffffffffff82811682821603908082111561253e5761253e61250d565b634e487b7160e01b600052603260045260246000fd5b600060001982036126875761268761250d565b5060010190565b80820180821115610ff357610ff361250d565b634e487b7160e01b600052605160045260246000fdfea264697066735822122030f1911527c8aa8921748eb04b0cb249cf6f01ff68b55b5be3df0792017fe73564736f6c63430008110033", } // OneStepProverMathABI is the input ABI used to generate the binding from. @@ -2183,7 +2183,7 @@ func (_OneStepProverMath *OneStepProverMathCallerSession) ExecuteOneStep(arg0 Ex // OneStepProverMemoryMetaData contains all meta data concerning the OneStepProverMemory contract. var OneStepProverMemoryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"maxInboxMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"initialWasmModuleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structExecutionContext\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"startMach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"startMod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"opcode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"argumentData\",\"type\":\"uint256\"}],\"internalType\":\"structInstruction\",\"name\":\"inst\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"executeOneStep\",\"outputs\":[{\"components\":[{\"internalType\":\"enumMachineStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"valueStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue[]\",\"name\":\"inner\",\"type\":\"tuple[]\"}],\"internalType\":\"structValueArray\",\"name\":\"proved\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structValueStack\",\"name\":\"internalStack\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"enumValueType\",\"name\":\"valueType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"contents\",\"type\":\"uint256\"}],\"internalType\":\"structValue\",\"name\":\"returnPc\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"localsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"callerModule\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"callerModuleInternals\",\"type\":\"uint32\"}],\"internalType\":\"structStackFrame[]\",\"name\":\"proved\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"remainingHash\",\"type\":\"bytes32\"}],\"internalType\":\"structStackFrameWindow\",\"name\":\"frameStack\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"globalStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"moduleIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionIdx\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"functionPc\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"modulesRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structMachine\",\"name\":\"mach\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"globalsMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSize\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structModuleMemory\",\"name\":\"moduleMemory\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"tablesMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"functionsMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"internalsOffset\",\"type\":\"uint32\"}],\"internalType\":\"structModule\",\"name\":\"mod\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50611f4b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e3660046114d3565b61005a565b6040516100519291906116dc565b60405180910390f35b6100626113bf565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae87611bad565b91506100bf36879003870187611cb2565b905060006100d06020870187611d49565b9050611468602861ffff8316108015906100ef5750603561ffff831611155b156100fd57506101f86101da565b603661ffff8316108015906101175750603e61ffff831611155b1561012557506107016101da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc161ffff8316016101595750610ab86101da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc061ffff83160161018d5750610b126101da565b60405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4d454d4f52595f4f50434f4445000000000000000000000060448201526064015b60405180910390fd5b6101eb84848989898663ffffffff16565b5050965096945050505050565b60008080602861020b6020880188611d49565b61ffff1603610223575060009150600490508161046b565b60296102326020880188611d49565b61ffff160361024b57506001915060089050600061046b565b602a61025a6020880188611d49565b61ffff160361027357506002915060049050600061046b565b602b6102826020880188611d49565b61ffff160361029b57506003915060089050600061046b565b602c6102aa6020880188611d49565b61ffff16036102c2575060009150600190508061046b565b602d6102d16020880188611d49565b61ffff16036102e9575060009150600190508161046b565b602e6102f86020880188611d49565b61ffff160361031157506000915060029050600161046b565b602f6103206020880188611d49565b61ffff1603610338575060009150600290508161046b565b60306103476020880188611d49565b61ffff160361035e5750600191508190508061046b565b603161036d6020880188611d49565b61ffff1603610385575060019150819050600061046b565b60326103946020880188611d49565b61ffff16036103ac575060019150600290508161046b565b60336103bb6020880188611d49565b61ffff16036103d457506001915060029050600061046b565b60346103e36020880188611d49565b61ffff16036103fb575060019150600490508161046b565b603561040a6020880188611d49565b61ffff160361042357506001915060049050600061046b565b60405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d454d4f52595f4c4f41445f4f50434f444500000000000060448201526064016101d1565b600061048261047d8a60200151610c15565b610c3a565b6104969063ffffffff166020890135611d83565b60208901515190915067ffffffffffffffff166104b38483611d83565b11156104c757505060028752506106fa9050565b60006000198180805b8781101561056e5760006104e48288611d83565b905060006104f3602083611dac565b90508581146105175761050d8f60200151828f8f8b610cf7565b5097509095509350845b6000610524602084611dc0565b9050610531846008611dd4565b67ffffffffffffffff166105458783610da0565b60ff1667ffffffffffffffff16901b85179450505050808061056690611deb565b9150506104d0565b5085156106b55786600114801561059657506000886006811115610594576105946115ad565b145b156105ac578060000b63ffffffff1690506106b5565b8660011480156105cd575060018860068111156105cb576105cb6115ad565b145b156105da5760000b6106b5565b8660021480156105fb575060008860068111156105f9576105f96115ad565b145b15610611578060010b63ffffffff1690506106b5565b86600214801561063257506001886006811115610630576106306115ad565b145b1561063f5760010b6106b5565b8660041480156106605750600188600681111561065e5761065e6115ad565b145b1561066d5760030b6106b5565b60405162461bcd60e51b815260206004820152601560248201527f4241445f524541445f42595445535f5349474e4544000000000000000000000060448201526064016101d1565b6106f160405180604001604052808a60068111156106d5576106d56115ad565b815267ffffffffffffffff84166020918201528f015190610e21565b50505050505050505b5050505050565b6000808060366107146020880188611d49565b61ffff16036107295750600491506000610890565b60376107386020880188611d49565b61ffff160361074d5750600891506001610890565b603861075c6020880188611d49565b61ffff16036107715750600491506002610890565b60396107806020880188611d49565b61ffff16036107955750600891506003610890565b603a6107a46020880188611d49565b61ffff16036107b95750600191506000610890565b603b6107c86020880188611d49565b61ffff16036107dd5750600291506000610890565b603c6107ec6020880188611d49565b61ffff160361080057506001915081610890565b603d61080f6020880188611d49565b61ffff16036108245750600291506001610890565b603e6108336020880188611d49565b61ffff16036108485750600491506001610890565b60405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f4d454d4f52595f53544f52455f4f50434f4445000000000060448201526064016101d1565b600061089f8960200151610c15565b90508160068111156108b3576108b36115ad565b815160068111156108c6576108c66115ad565b146109135760405162461bcd60e51b815260206004820152600e60248201527f4241445f53544f52455f5459504500000000000000000000000000000000000060448201526064016101d1565b8060200151925060088467ffffffffffffffff16101561096157600161093a856008611e05565b67ffffffffffffffff16600167ffffffffffffffff16901b61095c9190611e31565b831692505b5050600061097561047d8960200151610c15565b6109899063ffffffff166020880135611d83565b905086602001516000015167ffffffffffffffff168367ffffffffffffffff16826109b49190611d83565b11156109c657505060028652506106fa565b604080516020810190915260608152600090600019906000805b8767ffffffffffffffff16811015610a955760006109fe8288611d83565b90506000610a0d602083611dac565b9050858114610a52576000198614610a3457610a2a858786610e31565b60208f0151604001525b610a458e60200151828e8e8b610cf7565b9098509196509094509250845b6000610a5f602084611dc0565b9050610a6c85828c610ecd565b945060088a67ffffffffffffffff16901c99505050508080610a8d90611deb565b9150506109e0565b50610aa1828483610e31565b60208c015160400152505050505050505050505050565b602084015151600090610acf906201000090611e59565b604080518082018252600080825260209182018190528251808401909352825263ffffffff831682820152880151919250610b0a9190610e21565b505050505050565b602084015151600090610b29906201000090611e59565b90506000610b3d61047d8860200151610c15565b90506000610b5463ffffffff808416908516611d83565b905086602001516020015167ffffffffffffffff168111610bd957610b7c6201000082611dd4565b602088015167ffffffffffffffff9091169052610bd4610bc984604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b60208a015190610e21565b610c0b565b604080518082018252600080825260209182018190528251808401909352825263ffffffff90820152610c0b90610bc9565b5050505050505050565b60408051808201909152600080825260208201528151610c3490610f5a565b92915050565b60208101516000908183516006811115610c5657610c566115ad565b14610ca35760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4933320000000000000000000000000000000000000000000000000060448201526064016101d1565b6401000000008110610c345760405162461bcd60e51b815260206004820152600760248201527f4241445f4933320000000000000000000000000000000000000000000000000060448201526064016101d1565b600080610d106040518060200160405280606081525090565b839150610d1e86868461106b565b9093509150610d2e868684611087565b925090506000610d3f828986610e31565b905088604001518114610d945760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4d454d5f524f4f5400000000000000000000000000000000000060448201526064016101d1565b50955095509592505050565b600060208210610df25760405162461bcd60e51b815260206004820152601660248201527f4241445f50554c4c5f4c4541465f425954455f4944580000000000000000000060448201526064016101d1565b600082610e0160016020611e80565b610e0b9190611e80565b610e16906008611dd4565b9390931c9392505050565b8151610e2d9082611162565b5050565b6040517f4d656d6f7279206c6561663a00000000000000000000000000000000000000006020820152602c81018290526000908190604c01604051602081830303815290604052805190602001209050610ec28585836040518060400160405280601381526020017f4d656d6f7279206d65726b6c6520747265653a00000000000000000000000000815250611256565b9150505b9392505050565b600060208310610f1f5760405162461bcd60e51b815260206004820152601560248201527f4241445f5345545f4c4541465f425954455f494458000000000000000000000060448201526064016101d1565b600083610f2e60016020611e80565b610f389190611e80565b610f43906008611dd4565b60ff848116821b911b198616179150509392505050565b604080518082019091526000808252602082015281518051610f7e90600190611e80565b81518110610f8e57610f8e611e93565b6020026020010151905060006001836000015151610fac9190611e80565b67ffffffffffffffff811115610fc457610fc4611823565b60405190808252806020026020018201604052801561100957816020015b6040805180820190915260008082526020820152815260200190600190039081610fe25790505b50905060005b815181101561106457835180518290811061102c5761102c611e93565b602002602001015182828151811061104657611046611e93565b6020026020010181905250808061105c90611deb565b91505061100f565b5090915290565b6000818161107a86868461132b565b9097909650945050505050565b6040805160208101909152606081528160006110a4868684611389565b92509050600060ff821667ffffffffffffffff8111156110c6576110c6611823565b6040519080825280602002602001820160405280156110ef578160200160208202803683370190505b50905060005b8260ff168160ff1610156111465761110e88888661106b565b838360ff168151811061112357611123611e93565b60200260200101819650828152505050808061113e90611ea9565b9150506110f5565b5060405180602001604052808281525093505050935093915050565b815151600090611173906001611d83565b67ffffffffffffffff81111561118b5761118b611823565b6040519080825280602002602001820160405280156111d057816020015b60408051808201909152600080825260208201528152602001906001900390816111a95790505b50905060005b83515181101561122c5783518051829081106111f4576111f4611e93565b602002602001015182828151811061120e5761120e611e93565b6020026020010181905250808061122490611deb565b9150506111d6565b5081818460000151518151811061124557611245611e93565b602090810291909101015290915250565b8160005b85515181101561132257846001166000036112be5782828760000151838151811061128757611287611e93565b60200260200101516040516020016112a193929190611ec8565b604051602081830303815290604052805190602001209150611309565b82866000015182815181106112d5576112d5611e93565b6020026020010151836040516020016112f093929190611ec8565b6040516020818303038152906040528051906020012091505b60019490941c938061131a81611deb565b91505061125a565b50949350505050565b600081815b602081101561138057600883901b925085858381811061135257611352611e93565b919091013560f81c9390931792508161136a81611deb565b925050808061137890611deb565b915050611330565b50935093915050565b60008184848281811061139e5761139e611e93565b919091013560f81c92508190506113b481611deb565b915050935093915050565b60408051610120810190915280600081526020016113f460408051606080820183529181019182529081526000602082015290565b815260200161141a60408051606080820183529181019182529081526000602082015290565b815260200161143f604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b611470611eff565b565b60006040828403121561148457600080fd5b50919050565b60008083601f84011261149c57600080fd5b50813567ffffffffffffffff8111156114b457600080fd5b6020830191508360208285010111156114cc57600080fd5b9250929050565b6000806000806000808688036101c08112156114ee57600080fd5b60608112156114fc57600080fd5b879650606088013567ffffffffffffffff8082111561151a57600080fd5b90890190610120828c03121561152f57600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808401121561156257600080fd5b60808a0196506115768b6101608c01611472565b95506101a08a013592508083111561158d57600080fd5b505061159b89828a0161148a565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b600381106115d3576115d36115ad565b9052565b8051600781106115e9576115e96115ad565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b80841015611646576116328286516115d7565b93820193600193909301929085019061161f565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156116c55784516116918582516115d7565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a09093019260010161167c565b509687015197909601969096525093949350505050565b60006101008083526116f181840186516115c3565b60208501516101208481015261170b6102208501826115f6565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00808684030161014087015261174883836115f6565b925060608801519150808684030161016087015250611767828261165a565b915050608086015161018085015260a086015161178d6101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050610ec6602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561185c5761185c611823565b60405290565b6040516020810167ffffffffffffffff8111828210171561185c5761185c611823565b6040516080810167ffffffffffffffff8111828210171561185c5761185c611823565b604051610120810167ffffffffffffffff8111828210171561185c5761185c611823565b60405160a0810167ffffffffffffffff8111828210171561185c5761185c611823565b6040516060810167ffffffffffffffff8111828210171561185c5761185c611823565b604051601f8201601f1916810167ffffffffffffffff8111828210171561193b5761193b611823565b604052919050565b80356003811061195257600080fd5b919050565b600067ffffffffffffffff82111561197157611971611823565b5060051b60200190565b60006040828403121561198d57600080fd5b611995611839565b90508135600781106119a657600080fd5b808252506020820135602082015292915050565b600060408083850312156119cd57600080fd5b6119d5611839565b9150823567ffffffffffffffff808211156119ef57600080fd5b81850191506020808388031215611a0557600080fd5b611a0d611862565b833583811115611a1c57600080fd5b80850194505087601f850112611a3157600080fd5b83359250611a46611a4184611957565b611912565b83815260069390931b84018201928281019089851115611a6557600080fd5b948301945b84861015611a8b57611a7c8a8761197b565b82529486019490830190611a6a565b8252508552948501359484019490945250909392505050565b803563ffffffff8116811461195257600080fd5b60006040808385031215611acb57600080fd5b611ad3611839565b9150823567ffffffffffffffff811115611aec57600080fd5b8301601f81018513611afd57600080fd5b80356020611b0d611a4183611957565b82815260a09283028401820192828201919089851115611b2c57600080fd5b948301945b84861015611b955780868b031215611b495760008081fd5b611b51611885565b611b5b8b8861197b565b815287870135858201526060611b72818901611aa4565b89830152611b8260808901611aa4565b9082015283529485019491830191611b31565b50808752505080860135818601525050505092915050565b60006101208236031215611bc057600080fd5b611bc86118a8565b611bd183611943565b8152602083013567ffffffffffffffff80821115611bee57600080fd5b611bfa368387016119ba565b60208401526040850135915080821115611c1357600080fd5b611c1f368387016119ba565b60408401526060850135915080821115611c3857600080fd5b50611c4536828601611ab8565b60608301525060808301356080820152611c6160a08401611aa4565b60a0820152611c7260c08401611aa4565b60c0820152611c8360e08401611aa4565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff8116811461195257600080fd5b600081830360e0811215611cc557600080fd5b611ccd6118cc565b833581526060601f1983011215611ce357600080fd5b611ceb6118ef565b9150611cf960208501611c9a565b8252611d0760408501611c9a565b6020830152606084013560408301528160208201526080840135604082015260a08401356060820152611d3c60c08501611aa4565b6080820152949350505050565b600060208284031215611d5b57600080fd5b813561ffff81168114610ec657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3457610c34611d6d565b634e487b7160e01b600052601260045260246000fd5b600082611dbb57611dbb611d96565b500490565b600082611dcf57611dcf611d96565b500690565b8082028115828204841417610c3457610c34611d6d565b60006000198203611dfe57611dfe611d6d565b5060010190565b67ffffffffffffffff818116838216028082169190828114611e2957611e29611d6d565b505092915050565b67ffffffffffffffff828116828216039080821115611e5257611e52611d6d565b5092915050565b600067ffffffffffffffff80841680611e7457611e74611d96565b92169190910492915050565b81810381811115610c3457610c34611d6d565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611ebf57611ebf611d6d565b60010192915050565b6000845160005b81811015611ee95760208188018101518583015201611ecf565b5091909101928352506020820152604001919050565b634e487b7160e01b600052605160045260246000fdfea26469706673582212204c9570fa43a330c3369dbd598f2fc7f0dc097e49facea4fb5f4d58080493939764736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50611f4b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806397cc779a14610030575b600080fd5b61004361003e3660046114d3565b61005a565b6040516100519291906116dc565b60405180910390f35b6100626113bf565b6040805160a0810182526000808252825160608082018552828252602080830184905282860184905284019190915292820181905291810182905260808101919091526100ae87611bad565b91506100bf36879003870187611cb2565b905060006100d06020870187611d49565b9050611468602861ffff8316108015906100ef5750603561ffff831611155b156100fd57506101f86101da565b603661ffff8316108015906101175750603e61ffff831611155b1561012557506107016101da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc161ffff8316016101595750610ab86101da565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc061ffff83160161018d5750610b126101da565b60405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4d454d4f52595f4f50434f4445000000000000000000000060448201526064015b60405180910390fd5b6101eb84848989898663ffffffff16565b5050965096945050505050565b60008080602861020b6020880188611d49565b61ffff1603610223575060009150600490508161046b565b60296102326020880188611d49565b61ffff160361024b57506001915060089050600061046b565b602a61025a6020880188611d49565b61ffff160361027357506002915060049050600061046b565b602b6102826020880188611d49565b61ffff160361029b57506003915060089050600061046b565b602c6102aa6020880188611d49565b61ffff16036102c2575060009150600190508061046b565b602d6102d16020880188611d49565b61ffff16036102e9575060009150600190508161046b565b602e6102f86020880188611d49565b61ffff160361031157506000915060029050600161046b565b602f6103206020880188611d49565b61ffff1603610338575060009150600290508161046b565b60306103476020880188611d49565b61ffff160361035e5750600191508190508061046b565b603161036d6020880188611d49565b61ffff1603610385575060019150819050600061046b565b60326103946020880188611d49565b61ffff16036103ac575060019150600290508161046b565b60336103bb6020880188611d49565b61ffff16036103d457506001915060029050600061046b565b60346103e36020880188611d49565b61ffff16036103fb575060019150600490508161046b565b603561040a6020880188611d49565b61ffff160361042357506001915060049050600061046b565b60405162461bcd60e51b815260206004820152601a60248201527f494e56414c49445f4d454d4f52595f4c4f41445f4f50434f444500000000000060448201526064016101d1565b600061048261047d8a60200151610c15565b610c3a565b6104969063ffffffff166020890135611d83565b60208901515190915067ffffffffffffffff166104b38483611d83565b11156104c757505060028752506106fa9050565b60006000198180805b8781101561056e5760006104e48288611d83565b905060006104f3602083611dac565b90508581146105175761050d8f60200151828f8f8b610cf7565b5097509095509350845b6000610524602084611dc0565b9050610531846008611dd4565b67ffffffffffffffff166105458783610da0565b60ff1667ffffffffffffffff16901b85179450505050808061056690611deb565b9150506104d0565b5085156106b55786600114801561059657506000886006811115610594576105946115ad565b145b156105ac578060000b63ffffffff1690506106b5565b8660011480156105cd575060018860068111156105cb576105cb6115ad565b145b156105da5760000b6106b5565b8660021480156105fb575060008860068111156105f9576105f96115ad565b145b15610611578060010b63ffffffff1690506106b5565b86600214801561063257506001886006811115610630576106306115ad565b145b1561063f5760010b6106b5565b8660041480156106605750600188600681111561065e5761065e6115ad565b145b1561066d5760030b6106b5565b60405162461bcd60e51b815260206004820152601560248201527f4241445f524541445f42595445535f5349474e4544000000000000000000000060448201526064016101d1565b6106f160405180604001604052808a60068111156106d5576106d56115ad565b815267ffffffffffffffff84166020918201528f015190610e21565b50505050505050505b5050505050565b6000808060366107146020880188611d49565b61ffff16036107295750600491506000610890565b60376107386020880188611d49565b61ffff160361074d5750600891506001610890565b603861075c6020880188611d49565b61ffff16036107715750600491506002610890565b60396107806020880188611d49565b61ffff16036107955750600891506003610890565b603a6107a46020880188611d49565b61ffff16036107b95750600191506000610890565b603b6107c86020880188611d49565b61ffff16036107dd5750600291506000610890565b603c6107ec6020880188611d49565b61ffff160361080057506001915081610890565b603d61080f6020880188611d49565b61ffff16036108245750600291506001610890565b603e6108336020880188611d49565b61ffff16036108485750600491506001610890565b60405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f4d454d4f52595f53544f52455f4f50434f4445000000000060448201526064016101d1565b600061089f8960200151610c15565b90508160068111156108b3576108b36115ad565b815160068111156108c6576108c66115ad565b146109135760405162461bcd60e51b815260206004820152600e60248201527f4241445f53544f52455f5459504500000000000000000000000000000000000060448201526064016101d1565b8060200151925060088467ffffffffffffffff16101561096157600161093a856008611e05565b67ffffffffffffffff16600167ffffffffffffffff16901b61095c9190611e31565b831692505b5050600061097561047d8960200151610c15565b6109899063ffffffff166020880135611d83565b905086602001516000015167ffffffffffffffff168367ffffffffffffffff16826109b49190611d83565b11156109c657505060028652506106fa565b604080516020810190915260608152600090600019906000805b8767ffffffffffffffff16811015610a955760006109fe8288611d83565b90506000610a0d602083611dac565b9050858114610a52576000198614610a3457610a2a858786610e31565b60208f0151604001525b610a458e60200151828e8e8b610cf7565b9098509196509094509250845b6000610a5f602084611dc0565b9050610a6c85828c610ecd565b945060088a67ffffffffffffffff16901c99505050508080610a8d90611deb565b9150506109e0565b50610aa1828483610e31565b60208c015160400152505050505050505050505050565b602084015151600090610acf906201000090611e59565b604080518082018252600080825260209182018190528251808401909352825263ffffffff831682820152880151919250610b0a9190610e21565b505050505050565b602084015151600090610b29906201000090611e59565b90506000610b3d61047d8860200151610c15565b90506000610b5463ffffffff808416908516611d83565b905086602001516020015167ffffffffffffffff168111610bd957610b7c6201000082611dd4565b602088015167ffffffffffffffff9091169052610bd4610bc984604080518082019091526000808252602082015250604080518082019091526000815263ffffffff909116602082015290565b60208a015190610e21565b610c0b565b604080518082018252600080825260209182018190528251808401909352825263ffffffff90820152610c0b90610bc9565b5050505050505050565b60408051808201909152600080825260208201528151610c3490610f5a565b92915050565b60208101516000908183516006811115610c5657610c566115ad565b14610ca35760405162461bcd60e51b815260206004820152600760248201527f4e4f545f4933320000000000000000000000000000000000000000000000000060448201526064016101d1565b6401000000008110610c345760405162461bcd60e51b815260206004820152600760248201527f4241445f4933320000000000000000000000000000000000000000000000000060448201526064016101d1565b600080610d106040518060200160405280606081525090565b839150610d1e86868461106b565b9093509150610d2e868684611087565b925090506000610d3f828986610e31565b905088604001518114610d945760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4d454d5f524f4f5400000000000000000000000000000000000060448201526064016101d1565b50955095509592505050565b600060208210610df25760405162461bcd60e51b815260206004820152601660248201527f4241445f50554c4c5f4c4541465f425954455f4944580000000000000000000060448201526064016101d1565b600082610e0160016020611e80565b610e0b9190611e80565b610e16906008611dd4565b9390931c9392505050565b8151610e2d9082611162565b5050565b6040517f4d656d6f7279206c6561663a00000000000000000000000000000000000000006020820152602c81018290526000908190604c01604051602081830303815290604052805190602001209050610ec28585836040518060400160405280601381526020017f4d656d6f7279206d65726b6c6520747265653a00000000000000000000000000815250611256565b9150505b9392505050565b600060208310610f1f5760405162461bcd60e51b815260206004820152601560248201527f4241445f5345545f4c4541465f425954455f494458000000000000000000000060448201526064016101d1565b600083610f2e60016020611e80565b610f389190611e80565b610f43906008611dd4565b60ff848116821b911b198616179150509392505050565b604080518082019091526000808252602082015281518051610f7e90600190611e80565b81518110610f8e57610f8e611e93565b6020026020010151905060006001836000015151610fac9190611e80565b67ffffffffffffffff811115610fc457610fc4611823565b60405190808252806020026020018201604052801561100957816020015b6040805180820190915260008082526020820152815260200190600190039081610fe25790505b50905060005b815181101561106457835180518290811061102c5761102c611e93565b602002602001015182828151811061104657611046611e93565b6020026020010181905250808061105c90611deb565b91505061100f565b5090915290565b6000818161107a86868461132b565b9097909650945050505050565b6040805160208101909152606081528160006110a4868684611389565b92509050600060ff821667ffffffffffffffff8111156110c6576110c6611823565b6040519080825280602002602001820160405280156110ef578160200160208202803683370190505b50905060005b8260ff168160ff1610156111465761110e88888661106b565b838360ff168151811061112357611123611e93565b60200260200101819650828152505050808061113e90611ea9565b9150506110f5565b5060405180602001604052808281525093505050935093915050565b815151600090611173906001611d83565b67ffffffffffffffff81111561118b5761118b611823565b6040519080825280602002602001820160405280156111d057816020015b60408051808201909152600080825260208201528152602001906001900390816111a95790505b50905060005b83515181101561122c5783518051829081106111f4576111f4611e93565b602002602001015182828151811061120e5761120e611e93565b6020026020010181905250808061122490611deb565b9150506111d6565b5081818460000151518151811061124557611245611e93565b602090810291909101015290915250565b8160005b85515181101561132257846001166000036112be5782828760000151838151811061128757611287611e93565b60200260200101516040516020016112a193929190611ec8565b604051602081830303815290604052805190602001209150611309565b82866000015182815181106112d5576112d5611e93565b6020026020010151836040516020016112f093929190611ec8565b6040516020818303038152906040528051906020012091505b60019490941c938061131a81611deb565b91505061125a565b50949350505050565b600081815b602081101561138057600883901b925085858381811061135257611352611e93565b919091013560f81c9390931792508161136a81611deb565b925050808061137890611deb565b915050611330565b50935093915050565b60008184848281811061139e5761139e611e93565b919091013560f81c92508190506113b481611deb565b915050935093915050565b60408051610120810190915280600081526020016113f460408051606080820183529181019182529081526000602082015290565b815260200161141a60408051606080820183529181019182529081526000602082015290565b815260200161143f604051806040016040528060608152602001600080191681525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b611470611eff565b565b60006040828403121561148457600080fd5b50919050565b60008083601f84011261149c57600080fd5b50813567ffffffffffffffff8111156114b457600080fd5b6020830191508360208285010111156114cc57600080fd5b9250929050565b6000806000806000808688036101c08112156114ee57600080fd5b60608112156114fc57600080fd5b879650606088013567ffffffffffffffff8082111561151a57600080fd5b90890190610120828c03121561152f57600080fd5b81975060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808401121561156257600080fd5b60808a0196506115768b6101608c01611472565b95506101a08a013592508083111561158d57600080fd5b505061159b89828a0161148a565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b600381106115d3576115d36115ad565b9052565b8051600781106115e9576115e96115ad565b8252602090810151910152565b805160408084529051602084830181905281516060860181905260009392820191849160808801905b80841015611646576116328286516115d7565b93820193600193909301929085019061161f565b509581015196019590955250919392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156116c55784516116918582516115d7565b80830151858901528781015163ffffffff90811688870152908701511660808501529381019360a09093019260010161167c565b509687015197909601969096525093949350505050565b60006101008083526116f181840186516115c3565b60208501516101208481015261170b6102208501826115f6565b905060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00808684030161014087015261174883836115f6565b925060608801519150808684030161016087015250611767828261165a565b915050608086015161018085015260a086015161178d6101a086018263ffffffff169052565b5060c086015163ffffffff81166101c08601525060e086015163ffffffff81166101e086015250908501516102008401529050610ec6602083018480518252602081015167ffffffffffffffff80825116602085015280602083015116604085015250604081015160608401525060408101516080830152606081015160a083015263ffffffff60808201511660c08301525050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561185c5761185c611823565b60405290565b6040516020810167ffffffffffffffff8111828210171561185c5761185c611823565b6040516080810167ffffffffffffffff8111828210171561185c5761185c611823565b604051610120810167ffffffffffffffff8111828210171561185c5761185c611823565b60405160a0810167ffffffffffffffff8111828210171561185c5761185c611823565b6040516060810167ffffffffffffffff8111828210171561185c5761185c611823565b604051601f8201601f1916810167ffffffffffffffff8111828210171561193b5761193b611823565b604052919050565b80356003811061195257600080fd5b919050565b600067ffffffffffffffff82111561197157611971611823565b5060051b60200190565b60006040828403121561198d57600080fd5b611995611839565b90508135600781106119a657600080fd5b808252506020820135602082015292915050565b600060408083850312156119cd57600080fd5b6119d5611839565b9150823567ffffffffffffffff808211156119ef57600080fd5b81850191506020808388031215611a0557600080fd5b611a0d611862565b833583811115611a1c57600080fd5b80850194505087601f850112611a3157600080fd5b83359250611a46611a4184611957565b611912565b83815260069390931b84018201928281019089851115611a6557600080fd5b948301945b84861015611a8b57611a7c8a8761197b565b82529486019490830190611a6a565b8252508552948501359484019490945250909392505050565b803563ffffffff8116811461195257600080fd5b60006040808385031215611acb57600080fd5b611ad3611839565b9150823567ffffffffffffffff811115611aec57600080fd5b8301601f81018513611afd57600080fd5b80356020611b0d611a4183611957565b82815260a09283028401820192828201919089851115611b2c57600080fd5b948301945b84861015611b955780868b031215611b495760008081fd5b611b51611885565b611b5b8b8861197b565b815287870135858201526060611b72818901611aa4565b89830152611b8260808901611aa4565b9082015283529485019491830191611b31565b50808752505080860135818601525050505092915050565b60006101208236031215611bc057600080fd5b611bc86118a8565b611bd183611943565b8152602083013567ffffffffffffffff80821115611bee57600080fd5b611bfa368387016119ba565b60208401526040850135915080821115611c1357600080fd5b611c1f368387016119ba565b60408401526060850135915080821115611c3857600080fd5b50611c4536828601611ab8565b60608301525060808301356080820152611c6160a08401611aa4565b60a0820152611c7260c08401611aa4565b60c0820152611c8360e08401611aa4565b60e082015261010092830135928101929092525090565b803567ffffffffffffffff8116811461195257600080fd5b600081830360e0811215611cc557600080fd5b611ccd6118cc565b833581526060601f1983011215611ce357600080fd5b611ceb6118ef565b9150611cf960208501611c9a565b8252611d0760408501611c9a565b6020830152606084013560408301528160208201526080840135604082015260a08401356060820152611d3c60c08501611aa4565b6080820152949350505050565b600060208284031215611d5b57600080fd5b813561ffff81168114610ec657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3457610c34611d6d565b634e487b7160e01b600052601260045260246000fd5b600082611dbb57611dbb611d96565b500490565b600082611dcf57611dcf611d96565b500690565b8082028115828204841417610c3457610c34611d6d565b60006000198203611dfe57611dfe611d6d565b5060010190565b67ffffffffffffffff818116838216028082169190828114611e2957611e29611d6d565b505092915050565b67ffffffffffffffff828116828216039080821115611e5257611e52611d6d565b5092915050565b600067ffffffffffffffff80841680611e7457611e74611d96565b92169190910492915050565b81810381811115610c3457610c34611d6d565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611ebf57611ebf611d6d565b60010192915050565b6000845160005b81811015611ee95760208188018101518583015201611ecf565b5091909101928352506020820152604001919050565b634e487b7160e01b600052605160045260246000fdfea2646970667358221220ba4fe1c69597b5b1993c653907f8d66778a3fb9f05ab5cb30074f31644258e7264736f6c63430008110033", } // OneStepProverMemoryABI is the input ABI used to generate the binding from. diff --git a/solgen/go/precompilesgen/precompilesgen.go b/solgen/go/precompilesgen/precompilesgen.go index efcfb547d..f60daecdf 100644 --- a/solgen/go/precompilesgen/precompilesgen.go +++ b/solgen/go/precompilesgen/precompilesgen.go @@ -901,7 +901,7 @@ func (_ArbBLS *ArbBLSTransactorRaw) Transact(opts *bind.TransactOpts, method str // ArbDebugMetaData contains all meta data concerning the ArbDebug contract. var ArbDebugMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"Custom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unused\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"Basic\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"not\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"conn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Mixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"field\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"number\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"store\",\"type\":\"bytes\"}],\"name\":\"Store\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"becomeChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"number\",\"type\":\"uint64\"}],\"name\":\"customRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"Custom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unused\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"Basic\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"not\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"conn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Mixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"field\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"number\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"store\",\"type\":\"bytes\"}],\"name\":\"Store\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"becomeChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"number\",\"type\":\"uint64\"}],\"name\":\"customRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eventsView\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"legacyError\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", } // ArbDebugABI is the input ABI used to generate the binding from. @@ -1079,6 +1079,64 @@ func (_ArbDebug *ArbDebugCallerSession) CustomRevert(number uint64) error { return _ArbDebug.Contract.CustomRevert(&_ArbDebug.CallOpts, number) } +// EventsView is a free data retrieval call binding the contract method 0x8e5f30ab. +// +// Solidity: function eventsView() view returns() +func (_ArbDebug *ArbDebugCaller) EventsView(opts *bind.CallOpts) error { + var out []interface{} + err := _ArbDebug.contract.Call(opts, &out, "eventsView") + + if err != nil { + return err + } + + return err + +} + +// EventsView is a free data retrieval call binding the contract method 0x8e5f30ab. +// +// Solidity: function eventsView() view returns() +func (_ArbDebug *ArbDebugSession) EventsView() error { + return _ArbDebug.Contract.EventsView(&_ArbDebug.CallOpts) +} + +// EventsView is a free data retrieval call binding the contract method 0x8e5f30ab. +// +// Solidity: function eventsView() view returns() +func (_ArbDebug *ArbDebugCallerSession) EventsView() error { + return _ArbDebug.Contract.EventsView(&_ArbDebug.CallOpts) +} + +// LegacyError is a free data retrieval call binding the contract method 0x1e48fe82. +// +// Solidity: function legacyError() pure returns() +func (_ArbDebug *ArbDebugCaller) LegacyError(opts *bind.CallOpts) error { + var out []interface{} + err := _ArbDebug.contract.Call(opts, &out, "legacyError") + + if err != nil { + return err + } + + return err + +} + +// LegacyError is a free data retrieval call binding the contract method 0x1e48fe82. +// +// Solidity: function legacyError() pure returns() +func (_ArbDebug *ArbDebugSession) LegacyError() error { + return _ArbDebug.Contract.LegacyError(&_ArbDebug.CallOpts) +} + +// LegacyError is a free data retrieval call binding the contract method 0x1e48fe82. +// +// Solidity: function legacyError() pure returns() +func (_ArbDebug *ArbDebugCallerSession) LegacyError() error { + return _ArbDebug.Contract.LegacyError(&_ArbDebug.CallOpts) +} + // BecomeChainOwner is a paid mutator transaction binding the contract method 0x0e5bbc11. // // Solidity: function becomeChainOwner() returns() @@ -1828,7 +1886,7 @@ func (_ArbFunctionTable *ArbFunctionTableTransactorSession) Upload(buf []byte) ( // ArbGasInfoMetaData contains all meta data concerning the ArbGasInfo contract. var ArbGasInfoMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"getAmortizedCostCapBips\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentTxL1GasFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasAccountingParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasBacklog\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasBacklogTolerance\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BaseFeeEstimate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BaseFeeEstimateInertia\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1FeesAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1GasPriceEstimate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1PricingSurplus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1RewardRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1RewardRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumGasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerBatchGasCharge\",\"outputs\":[{\"internalType\":\"int64\",\"name\":\"\",\"type\":\"int64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricesInArbGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"getPricesInArbGasWithAggregator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricesInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"getPricesInWeiWithAggregator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricingInertia\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"getAmortizedCostCapBips\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentTxL1GasFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasAccountingParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasBacklog\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasBacklogTolerance\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BaseFeeEstimate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BaseFeeEstimateInertia\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1FeesAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1GasPriceEstimate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1PricingEquilibrationUnits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1PricingFundsDueForRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1PricingSurplus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1PricingUnitsSinceUpdate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1RewardRate\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1RewardRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastL1PricingSurplus\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastL1PricingUpdateTime\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumGasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerBatchGasCharge\",\"outputs\":[{\"internalType\":\"int64\",\"name\":\"\",\"type\":\"int64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricesInArbGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"getPricesInArbGasWithAggregator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricesInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"getPricesInWeiWithAggregator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPricingInertia\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ArbGasInfoABI is the input ABI used to generate the binding from. @@ -2258,6 +2316,68 @@ func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1GasPriceEstimate() (*big.Int, e return _ArbGasInfo.Contract.GetL1GasPriceEstimate(&_ArbGasInfo.CallOpts) } +// GetL1PricingEquilibrationUnits is a free data retrieval call binding the contract method 0xad26ce90. +// +// Solidity: function getL1PricingEquilibrationUnits() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoCaller) GetL1PricingEquilibrationUnits(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbGasInfo.contract.Call(opts, &out, "getL1PricingEquilibrationUnits") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL1PricingEquilibrationUnits is a free data retrieval call binding the contract method 0xad26ce90. +// +// Solidity: function getL1PricingEquilibrationUnits() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoSession) GetL1PricingEquilibrationUnits() (*big.Int, error) { + return _ArbGasInfo.Contract.GetL1PricingEquilibrationUnits(&_ArbGasInfo.CallOpts) +} + +// GetL1PricingEquilibrationUnits is a free data retrieval call binding the contract method 0xad26ce90. +// +// Solidity: function getL1PricingEquilibrationUnits() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1PricingEquilibrationUnits() (*big.Int, error) { + return _ArbGasInfo.Contract.GetL1PricingEquilibrationUnits(&_ArbGasInfo.CallOpts) +} + +// GetL1PricingFundsDueForRewards is a free data retrieval call binding the contract method 0x963d6002. +// +// Solidity: function getL1PricingFundsDueForRewards() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoCaller) GetL1PricingFundsDueForRewards(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbGasInfo.contract.Call(opts, &out, "getL1PricingFundsDueForRewards") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL1PricingFundsDueForRewards is a free data retrieval call binding the contract method 0x963d6002. +// +// Solidity: function getL1PricingFundsDueForRewards() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoSession) GetL1PricingFundsDueForRewards() (*big.Int, error) { + return _ArbGasInfo.Contract.GetL1PricingFundsDueForRewards(&_ArbGasInfo.CallOpts) +} + +// GetL1PricingFundsDueForRewards is a free data retrieval call binding the contract method 0x963d6002. +// +// Solidity: function getL1PricingFundsDueForRewards() view returns(uint256) +func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1PricingFundsDueForRewards() (*big.Int, error) { + return _ArbGasInfo.Contract.GetL1PricingFundsDueForRewards(&_ArbGasInfo.CallOpts) +} + // GetL1PricingSurplus is a free data retrieval call binding the contract method 0x520acdd7. // // Solidity: function getL1PricingSurplus() view returns(int256) @@ -2289,6 +2409,37 @@ func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1PricingSurplus() (*big.Int, err return _ArbGasInfo.Contract.GetL1PricingSurplus(&_ArbGasInfo.CallOpts) } +// GetL1PricingUnitsSinceUpdate is a free data retrieval call binding the contract method 0xeff01306. +// +// Solidity: function getL1PricingUnitsSinceUpdate() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoCaller) GetL1PricingUnitsSinceUpdate(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ArbGasInfo.contract.Call(opts, &out, "getL1PricingUnitsSinceUpdate") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetL1PricingUnitsSinceUpdate is a free data retrieval call binding the contract method 0xeff01306. +// +// Solidity: function getL1PricingUnitsSinceUpdate() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoSession) GetL1PricingUnitsSinceUpdate() (uint64, error) { + return _ArbGasInfo.Contract.GetL1PricingUnitsSinceUpdate(&_ArbGasInfo.CallOpts) +} + +// GetL1PricingUnitsSinceUpdate is a free data retrieval call binding the contract method 0xeff01306. +// +// Solidity: function getL1PricingUnitsSinceUpdate() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1PricingUnitsSinceUpdate() (uint64, error) { + return _ArbGasInfo.Contract.GetL1PricingUnitsSinceUpdate(&_ArbGasInfo.CallOpts) +} + // GetL1RewardRate is a free data retrieval call binding the contract method 0x8a5b1d28. // // Solidity: function getL1RewardRate() view returns(uint64) @@ -2351,6 +2502,68 @@ func (_ArbGasInfo *ArbGasInfoCallerSession) GetL1RewardRecipient() (common.Addre return _ArbGasInfo.Contract.GetL1RewardRecipient(&_ArbGasInfo.CallOpts) } +// GetLastL1PricingSurplus is a free data retrieval call binding the contract method 0x2987d027. +// +// Solidity: function getLastL1PricingSurplus() view returns(int256) +func (_ArbGasInfo *ArbGasInfoCaller) GetLastL1PricingSurplus(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbGasInfo.contract.Call(opts, &out, "getLastL1PricingSurplus") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetLastL1PricingSurplus is a free data retrieval call binding the contract method 0x2987d027. +// +// Solidity: function getLastL1PricingSurplus() view returns(int256) +func (_ArbGasInfo *ArbGasInfoSession) GetLastL1PricingSurplus() (*big.Int, error) { + return _ArbGasInfo.Contract.GetLastL1PricingSurplus(&_ArbGasInfo.CallOpts) +} + +// GetLastL1PricingSurplus is a free data retrieval call binding the contract method 0x2987d027. +// +// Solidity: function getLastL1PricingSurplus() view returns(int256) +func (_ArbGasInfo *ArbGasInfoCallerSession) GetLastL1PricingSurplus() (*big.Int, error) { + return _ArbGasInfo.Contract.GetLastL1PricingSurplus(&_ArbGasInfo.CallOpts) +} + +// GetLastL1PricingUpdateTime is a free data retrieval call binding the contract method 0x138b47b4. +// +// Solidity: function getLastL1PricingUpdateTime() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoCaller) GetLastL1PricingUpdateTime(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ArbGasInfo.contract.Call(opts, &out, "getLastL1PricingUpdateTime") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetLastL1PricingUpdateTime is a free data retrieval call binding the contract method 0x138b47b4. +// +// Solidity: function getLastL1PricingUpdateTime() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoSession) GetLastL1PricingUpdateTime() (uint64, error) { + return _ArbGasInfo.Contract.GetLastL1PricingUpdateTime(&_ArbGasInfo.CallOpts) +} + +// GetLastL1PricingUpdateTime is a free data retrieval call binding the contract method 0x138b47b4. +// +// Solidity: function getLastL1PricingUpdateTime() view returns(uint64) +func (_ArbGasInfo *ArbGasInfoCallerSession) GetLastL1PricingUpdateTime() (uint64, error) { + return _ArbGasInfo.Contract.GetLastL1PricingUpdateTime(&_ArbGasInfo.CallOpts) +} + // GetMinimumGasPrice is a free data retrieval call binding the contract method 0xf918379a. // // Solidity: function getMinimumGasPrice() view returns(uint256) @@ -2797,7 +3010,7 @@ func (_ArbInfo *ArbInfoCallerSession) GetCode(account common.Address) ([]byte, e // ArbOwnerMetaData contains all meta data concerning the ArbOwner contract. var ArbOwnerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"method\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"OwnerActs\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"addChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllChainOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInfraFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNetworkFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isChainOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxWeiToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseL1PricerSurplusFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerToRemove\",\"type\":\"address\"}],\"name\":\"removeChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"scheduleArbOSUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"cap\",\"type\":\"uint64\"}],\"name\":\"setAmortizedCostCapBips\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"setChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newInfraFeeAccount\",\"type\":\"address\"}],\"name\":\"setInfraFeeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"inertia\",\"type\":\"uint64\"}],\"name\":\"setL1BaseFeeEstimateInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pricePerUnit\",\"type\":\"uint256\"}],\"name\":\"setL1PricePerUnit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"equilibrationUnits\",\"type\":\"uint256\"}],\"name\":\"setL1PricingEquilibrationUnits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"inertia\",\"type\":\"uint64\"}],\"name\":\"setL1PricingInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weiPerUnit\",\"type\":\"uint64\"}],\"name\":\"setL1PricingRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"setL1PricingRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sec\",\"type\":\"uint64\"}],\"name\":\"setL2GasBacklogTolerance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sec\",\"type\":\"uint64\"}],\"name\":\"setL2GasPricingInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"}],\"name\":\"setMaxTxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"}],\"name\":\"setMinimumL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newNetworkFeeAccount\",\"type\":\"address\"}],\"name\":\"setNetworkFeeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"cost\",\"type\":\"int64\"}],\"name\":\"setPerBatchGasCharge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"}],\"name\":\"setSpeedLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"method\",\"type\":\"bytes4\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"OwnerActs\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"addChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllChainOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInfraFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNetworkFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isChainOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxWeiToRelease\",\"type\":\"uint256\"}],\"name\":\"releaseL1PricerSurplusFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerToRemove\",\"type\":\"address\"}],\"name\":\"removeChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"scheduleArbOSUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"cap\",\"type\":\"uint64\"}],\"name\":\"setAmortizedCostCapBips\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"level\",\"type\":\"uint64\"}],\"name\":\"setBrotliCompressionLevel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"setChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newInfraFeeAccount\",\"type\":\"address\"}],\"name\":\"setInfraFeeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"inertia\",\"type\":\"uint64\"}],\"name\":\"setL1BaseFeeEstimateInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pricePerUnit\",\"type\":\"uint256\"}],\"name\":\"setL1PricePerUnit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"equilibrationUnits\",\"type\":\"uint256\"}],\"name\":\"setL1PricingEquilibrationUnits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"inertia\",\"type\":\"uint64\"}],\"name\":\"setL1PricingInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weiPerUnit\",\"type\":\"uint64\"}],\"name\":\"setL1PricingRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"setL1PricingRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sec\",\"type\":\"uint64\"}],\"name\":\"setL2GasBacklogTolerance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sec\",\"type\":\"uint64\"}],\"name\":\"setL2GasPricingInertia\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"}],\"name\":\"setMaxTxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"}],\"name\":\"setMinimumL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newNetworkFeeAccount\",\"type\":\"address\"}],\"name\":\"setNetworkFeeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"cost\",\"type\":\"int64\"}],\"name\":\"setPerBatchGasCharge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"limit\",\"type\":\"uint64\"}],\"name\":\"setSpeedLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // ArbOwnerABI is the input ABI used to generate the binding from. @@ -3175,6 +3388,27 @@ func (_ArbOwner *ArbOwnerTransactorSession) SetAmortizedCostCapBips(cap uint64) return _ArbOwner.Contract.SetAmortizedCostCapBips(&_ArbOwner.TransactOpts, cap) } +// SetBrotliCompressionLevel is a paid mutator transaction binding the contract method 0x5399126f. +// +// Solidity: function setBrotliCompressionLevel(uint64 level) returns() +func (_ArbOwner *ArbOwnerTransactor) SetBrotliCompressionLevel(opts *bind.TransactOpts, level uint64) (*types.Transaction, error) { + return _ArbOwner.contract.Transact(opts, "setBrotliCompressionLevel", level) +} + +// SetBrotliCompressionLevel is a paid mutator transaction binding the contract method 0x5399126f. +// +// Solidity: function setBrotliCompressionLevel(uint64 level) returns() +func (_ArbOwner *ArbOwnerSession) SetBrotliCompressionLevel(level uint64) (*types.Transaction, error) { + return _ArbOwner.Contract.SetBrotliCompressionLevel(&_ArbOwner.TransactOpts, level) +} + +// SetBrotliCompressionLevel is a paid mutator transaction binding the contract method 0x5399126f. +// +// Solidity: function setBrotliCompressionLevel(uint64 level) returns() +func (_ArbOwner *ArbOwnerTransactorSession) SetBrotliCompressionLevel(level uint64) (*types.Transaction, error) { + return _ArbOwner.Contract.SetBrotliCompressionLevel(&_ArbOwner.TransactOpts, level) +} + // SetChainConfig is a paid mutator transaction binding the contract method 0xeda73212. // // Solidity: function setChainConfig(string chainConfig) returns() @@ -3667,7 +3901,7 @@ func (_ArbOwner *ArbOwnerFilterer) ParseOwnerActs(log types.Log) (*ArbOwnerOwner // ArbOwnerPublicMetaData contains all meta data concerning the ArbOwnerPublic contract. var ArbOwnerPublicMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rectifiedOwner\",\"type\":\"address\"}],\"name\":\"ChainOwnerRectified\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getAllChainOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInfraFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNetworkFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isChainOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerToRectify\",\"type\":\"address\"}],\"name\":\"rectifyChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rectifiedOwner\",\"type\":\"address\"}],\"name\":\"ChainOwnerRectified\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getAllChainOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBrotliCompressionLevel\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInfraFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNetworkFeeAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScheduledUpgrade\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"arbosVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"scheduledForTimestamp\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isChainOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerToRectify\",\"type\":\"address\"}],\"name\":\"rectifyChainOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // ArbOwnerPublicABI is the input ABI used to generate the binding from. @@ -3847,6 +4081,37 @@ func (_ArbOwnerPublic *ArbOwnerPublicCallerSession) GetAllChainOwners() ([]commo return _ArbOwnerPublic.Contract.GetAllChainOwners(&_ArbOwnerPublic.CallOpts) } +// GetBrotliCompressionLevel is a free data retrieval call binding the contract method 0x22d499c7. +// +// Solidity: function getBrotliCompressionLevel() view returns(uint64) +func (_ArbOwnerPublic *ArbOwnerPublicCaller) GetBrotliCompressionLevel(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ArbOwnerPublic.contract.Call(opts, &out, "getBrotliCompressionLevel") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetBrotliCompressionLevel is a free data retrieval call binding the contract method 0x22d499c7. +// +// Solidity: function getBrotliCompressionLevel() view returns(uint64) +func (_ArbOwnerPublic *ArbOwnerPublicSession) GetBrotliCompressionLevel() (uint64, error) { + return _ArbOwnerPublic.Contract.GetBrotliCompressionLevel(&_ArbOwnerPublic.CallOpts) +} + +// GetBrotliCompressionLevel is a free data retrieval call binding the contract method 0x22d499c7. +// +// Solidity: function getBrotliCompressionLevel() view returns(uint64) +func (_ArbOwnerPublic *ArbOwnerPublicCallerSession) GetBrotliCompressionLevel() (uint64, error) { + return _ArbOwnerPublic.Contract.GetBrotliCompressionLevel(&_ArbOwnerPublic.CallOpts) +} + // GetInfraFeeAccount is a free data retrieval call binding the contract method 0xee95a824. // // Solidity: function getInfraFeeAccount() view returns(address) @@ -3909,6 +4174,51 @@ func (_ArbOwnerPublic *ArbOwnerPublicCallerSession) GetNetworkFeeAccount() (comm return _ArbOwnerPublic.Contract.GetNetworkFeeAccount(&_ArbOwnerPublic.CallOpts) } +// GetScheduledUpgrade is a free data retrieval call binding the contract method 0x81ef944c. +// +// Solidity: function getScheduledUpgrade() view returns(uint64 arbosVersion, uint64 scheduledForTimestamp) +func (_ArbOwnerPublic *ArbOwnerPublicCaller) GetScheduledUpgrade(opts *bind.CallOpts) (struct { + ArbosVersion uint64 + ScheduledForTimestamp uint64 +}, error) { + var out []interface{} + err := _ArbOwnerPublic.contract.Call(opts, &out, "getScheduledUpgrade") + + outstruct := new(struct { + ArbosVersion uint64 + ScheduledForTimestamp uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.ArbosVersion = *abi.ConvertType(out[0], new(uint64)).(*uint64) + outstruct.ScheduledForTimestamp = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// GetScheduledUpgrade is a free data retrieval call binding the contract method 0x81ef944c. +// +// Solidity: function getScheduledUpgrade() view returns(uint64 arbosVersion, uint64 scheduledForTimestamp) +func (_ArbOwnerPublic *ArbOwnerPublicSession) GetScheduledUpgrade() (struct { + ArbosVersion uint64 + ScheduledForTimestamp uint64 +}, error) { + return _ArbOwnerPublic.Contract.GetScheduledUpgrade(&_ArbOwnerPublic.CallOpts) +} + +// GetScheduledUpgrade is a free data retrieval call binding the contract method 0x81ef944c. +// +// Solidity: function getScheduledUpgrade() view returns(uint64 arbosVersion, uint64 scheduledForTimestamp) +func (_ArbOwnerPublic *ArbOwnerPublicCallerSession) GetScheduledUpgrade() (struct { + ArbosVersion uint64 + ScheduledForTimestamp uint64 +}, error) { + return _ArbOwnerPublic.Contract.GetScheduledUpgrade(&_ArbOwnerPublic.CallOpts) +} + // IsChainOwner is a free data retrieval call binding the contract method 0x26ef7f68. // // Solidity: function isChainOwner(address addr) view returns(bool) @@ -5386,7 +5696,7 @@ func (_ArbStatistics *ArbStatisticsCallerSession) GetStats() (*big.Int, *big.Int // ArbSysMetaData contains all meta data concerning the ArbSys contract. var ArbSysMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"uniqueId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"indexInBatch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Transaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hash\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Tx\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserved\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"SendMerkleUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"}],\"name\":\"arbBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbChainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbOSVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageGasAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTopLevelCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"unused\",\"type\":\"address\"}],\"name\":\"mapL1SenderContractAddressToL2Alias\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"myCallersAddressWithoutAliasing\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendMerkleTreeState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"partials\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendTxToL1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasMyCallersAddressAliased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"current\",\"type\":\"uint256\"}],\"name\":\"InvalidBlockNumber\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"uniqueId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"indexInBatch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Transaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hash\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Tx\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserved\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"SendMerkleUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"}],\"name\":\"arbBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbChainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbOSVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageGasAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTopLevelCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"unused\",\"type\":\"address\"}],\"name\":\"mapL1SenderContractAddressToL2Alias\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"myCallersAddressWithoutAliasing\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendMerkleTreeState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"partials\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendTxToL1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasMyCallersAddressAliased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", } // ArbSysABI is the input ABI used to generate the binding from. diff --git a/solgen/go/rollupgen/rollupgen.go b/solgen/go/rollupgen/rollupgen.go index 2dda3a97c..ae7c72ced 100644 --- a/solgen/go/rollupgen/rollupgen.go +++ b/solgen/go/rollupgen/rollupgen.go @@ -109,6 +109,15 @@ type BeforeStateData struct { ConfigData ConfigData } +// BridgeCreatorBridgeContracts is an auto generated low-level Go binding around an user-defined struct. +type BridgeCreatorBridgeContracts struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +} + // Config is an auto generated low-level Go binding around an user-defined struct. type Config struct { ConfirmPeriodBlocks uint64 @@ -213,135 +222,125 @@ type OldStaker struct { IsStaked bool } -// AssertionNodeLibMetaData contains all meta data concerning the AssertionNodeLib contract. -var AssertionNodeLibMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ee276fe461b5accd733983d07e81e784ba3962e36359528221362e24cdc6fab64736f6c63430008110033", +// RollupCreatorRollupDeploymentParams is an auto generated low-level Go binding around an user-defined struct. +type RollupCreatorRollupDeploymentParams struct { + Config Config + Validators []common.Address + MaxDataSize *big.Int + NativeToken common.Address + DeployFactoriesToL2 bool + MaxFeePerGasForRetryables *big.Int + BatchPosters []common.Address + BatchPosterManager common.Address } -// AssertionNodeLibABI is the input ABI used to generate the binding from. -// Deprecated: Use AssertionNodeLibMetaData.ABI instead. -var AssertionNodeLibABI = AssertionNodeLibMetaData.ABI - -// AssertionNodeLibBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use AssertionNodeLibMetaData.Bin instead. -var AssertionNodeLibBin = AssertionNodeLibMetaData.Bin - -// DeployAssertionNodeLib deploys a new Ethereum contract, binding an instance of AssertionNodeLib to it. -func DeployAssertionNodeLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AssertionNodeLib, error) { - parsed, err := AssertionNodeLibMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AssertionNodeLibBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &AssertionNodeLib{AssertionNodeLibCaller: AssertionNodeLibCaller{contract: contract}, AssertionNodeLibTransactor: AssertionNodeLibTransactor{contract: contract}, AssertionNodeLibFilterer: AssertionNodeLibFilterer{contract: contract}}, nil +// AbsRollupEventInboxMetaData contains all meta data concerning the AbsRollupEventInbox contract. +var AbsRollupEventInboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } -// AssertionNodeLib is an auto generated Go binding around an Ethereum contract. -type AssertionNodeLib struct { - AssertionNodeLibCaller // Read-only binding to the contract - AssertionNodeLibTransactor // Write-only binding to the contract - AssertionNodeLibFilterer // Log filterer for contract events +// AbsRollupEventInboxABI is the input ABI used to generate the binding from. +// Deprecated: Use AbsRollupEventInboxMetaData.ABI instead. +var AbsRollupEventInboxABI = AbsRollupEventInboxMetaData.ABI + +// AbsRollupEventInbox is an auto generated Go binding around an Ethereum contract. +type AbsRollupEventInbox struct { + AbsRollupEventInboxCaller // Read-only binding to the contract + AbsRollupEventInboxTransactor // Write-only binding to the contract + AbsRollupEventInboxFilterer // Log filterer for contract events } -// AssertionNodeLibCaller is an auto generated read-only Go binding around an Ethereum contract. -type AssertionNodeLibCaller struct { +// AbsRollupEventInboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type AbsRollupEventInboxCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// AssertionNodeLibTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AssertionNodeLibTransactor struct { +// AbsRollupEventInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AbsRollupEventInboxTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// AssertionNodeLibFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AssertionNodeLibFilterer struct { +// AbsRollupEventInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbsRollupEventInboxFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// AssertionNodeLibSession is an auto generated Go binding around an Ethereum contract, +// AbsRollupEventInboxSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type AssertionNodeLibSession struct { - Contract *AssertionNodeLib // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type AbsRollupEventInboxSession struct { + Contract *AbsRollupEventInbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// AssertionNodeLibCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// AbsRollupEventInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type AssertionNodeLibCallerSession struct { - Contract *AssertionNodeLibCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type AbsRollupEventInboxCallerSession struct { + Contract *AbsRollupEventInboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// AssertionNodeLibTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// AbsRollupEventInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type AssertionNodeLibTransactorSession struct { - Contract *AssertionNodeLibTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type AbsRollupEventInboxTransactorSession struct { + Contract *AbsRollupEventInboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// AssertionNodeLibRaw is an auto generated low-level Go binding around an Ethereum contract. -type AssertionNodeLibRaw struct { - Contract *AssertionNodeLib // Generic contract binding to access the raw methods on +// AbsRollupEventInboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type AbsRollupEventInboxRaw struct { + Contract *AbsRollupEventInbox // Generic contract binding to access the raw methods on } -// AssertionNodeLibCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AssertionNodeLibCallerRaw struct { - Contract *AssertionNodeLibCaller // Generic read-only contract binding to access the raw methods on +// AbsRollupEventInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbsRollupEventInboxCallerRaw struct { + Contract *AbsRollupEventInboxCaller // Generic read-only contract binding to access the raw methods on } -// AssertionNodeLibTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AssertionNodeLibTransactorRaw struct { - Contract *AssertionNodeLibTransactor // Generic write-only contract binding to access the raw methods on +// AbsRollupEventInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbsRollupEventInboxTransactorRaw struct { + Contract *AbsRollupEventInboxTransactor // Generic write-only contract binding to access the raw methods on } -// NewAssertionNodeLib creates a new instance of AssertionNodeLib, bound to a specific deployed contract. -func NewAssertionNodeLib(address common.Address, backend bind.ContractBackend) (*AssertionNodeLib, error) { - contract, err := bindAssertionNodeLib(address, backend, backend, backend) +// NewAbsRollupEventInbox creates a new instance of AbsRollupEventInbox, bound to a specific deployed contract. +func NewAbsRollupEventInbox(address common.Address, backend bind.ContractBackend) (*AbsRollupEventInbox, error) { + contract, err := bindAbsRollupEventInbox(address, backend, backend, backend) if err != nil { return nil, err } - return &AssertionNodeLib{AssertionNodeLibCaller: AssertionNodeLibCaller{contract: contract}, AssertionNodeLibTransactor: AssertionNodeLibTransactor{contract: contract}, AssertionNodeLibFilterer: AssertionNodeLibFilterer{contract: contract}}, nil + return &AbsRollupEventInbox{AbsRollupEventInboxCaller: AbsRollupEventInboxCaller{contract: contract}, AbsRollupEventInboxTransactor: AbsRollupEventInboxTransactor{contract: contract}, AbsRollupEventInboxFilterer: AbsRollupEventInboxFilterer{contract: contract}}, nil } -// NewAssertionNodeLibCaller creates a new read-only instance of AssertionNodeLib, bound to a specific deployed contract. -func NewAssertionNodeLibCaller(address common.Address, caller bind.ContractCaller) (*AssertionNodeLibCaller, error) { - contract, err := bindAssertionNodeLib(address, caller, nil, nil) +// NewAbsRollupEventInboxCaller creates a new read-only instance of AbsRollupEventInbox, bound to a specific deployed contract. +func NewAbsRollupEventInboxCaller(address common.Address, caller bind.ContractCaller) (*AbsRollupEventInboxCaller, error) { + contract, err := bindAbsRollupEventInbox(address, caller, nil, nil) if err != nil { return nil, err } - return &AssertionNodeLibCaller{contract: contract}, nil + return &AbsRollupEventInboxCaller{contract: contract}, nil } -// NewAssertionNodeLibTransactor creates a new write-only instance of AssertionNodeLib, bound to a specific deployed contract. -func NewAssertionNodeLibTransactor(address common.Address, transactor bind.ContractTransactor) (*AssertionNodeLibTransactor, error) { - contract, err := bindAssertionNodeLib(address, nil, transactor, nil) +// NewAbsRollupEventInboxTransactor creates a new write-only instance of AbsRollupEventInbox, bound to a specific deployed contract. +func NewAbsRollupEventInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*AbsRollupEventInboxTransactor, error) { + contract, err := bindAbsRollupEventInbox(address, nil, transactor, nil) if err != nil { return nil, err } - return &AssertionNodeLibTransactor{contract: contract}, nil + return &AbsRollupEventInboxTransactor{contract: contract}, nil } -// NewAssertionNodeLibFilterer creates a new log filterer instance of AssertionNodeLib, bound to a specific deployed contract. -func NewAssertionNodeLibFilterer(address common.Address, filterer bind.ContractFilterer) (*AssertionNodeLibFilterer, error) { - contract, err := bindAssertionNodeLib(address, nil, nil, filterer) +// NewAbsRollupEventInboxFilterer creates a new log filterer instance of AbsRollupEventInbox, bound to a specific deployed contract. +func NewAbsRollupEventInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*AbsRollupEventInboxFilterer, error) { + contract, err := bindAbsRollupEventInbox(address, nil, nil, filterer) if err != nil { return nil, err } - return &AssertionNodeLibFilterer{contract: contract}, nil + return &AbsRollupEventInboxFilterer{contract: contract}, nil } -// bindAssertionNodeLib binds a generic wrapper to an already deployed contract. -func bindAssertionNodeLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := AssertionNodeLibMetaData.GetAbi() +// bindAbsRollupEventInbox binds a generic wrapper to an already deployed contract. +func bindAbsRollupEventInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AbsRollupEventInboxMetaData.GetAbi() if err != nil { return nil, err } @@ -352,392 +351,1537 @@ func bindAssertionNodeLib(address common.Address, caller bind.ContractCaller, tr // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_AssertionNodeLib *AssertionNodeLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssertionNodeLib.Contract.AssertionNodeLibCaller.contract.Call(opts, result, method, params...) +func (_AbsRollupEventInbox *AbsRollupEventInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsRollupEventInbox.Contract.AbsRollupEventInboxCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_AssertionNodeLib *AssertionNodeLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssertionNodeLib.Contract.AssertionNodeLibTransactor.contract.Transfer(opts) +func (_AbsRollupEventInbox *AbsRollupEventInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.AbsRollupEventInboxTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_AssertionNodeLib *AssertionNodeLibRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssertionNodeLib.Contract.AssertionNodeLibTransactor.contract.Transact(opts, method, params...) +func (_AbsRollupEventInbox *AbsRollupEventInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.AbsRollupEventInboxTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_AssertionNodeLib *AssertionNodeLibCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssertionNodeLib.Contract.contract.Call(opts, result, method, params...) +func (_AbsRollupEventInbox *AbsRollupEventInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbsRollupEventInbox.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_AssertionNodeLib *AssertionNodeLibTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssertionNodeLib.Contract.contract.Transfer(opts) +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_AssertionNodeLib *AssertionNodeLibTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssertionNodeLib.Contract.contract.Transact(opts, method, params...) -} - -// AssertionStateLibMetaData contains all meta data concerning the AssertionStateLib contract. -var AssertionStateLibMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122059b7e83e69d3ef99f51d5063ac251b754386561f931a5d848e3fd172c8e4ec5d64736f6c63430008110033", +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.contract.Transact(opts, method, params...) } -// AssertionStateLibABI is the input ABI used to generate the binding from. -// Deprecated: Use AssertionStateLibMetaData.ABI instead. -var AssertionStateLibABI = AssertionStateLibMetaData.ABI - -// AssertionStateLibBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use AssertionStateLibMetaData.Bin instead. -var AssertionStateLibBin = AssertionStateLibMetaData.Bin +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsRollupEventInbox.contract.Call(opts, &out, "bridge") -// DeployAssertionStateLib deploys a new Ethereum contract, binding an instance of AssertionStateLib to it. -func DeployAssertionStateLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AssertionStateLib, error) { - parsed, err := AssertionStateLibMetaData.GetAbi() if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") + return *new(common.Address), err } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AssertionStateLibBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &AssertionStateLib{AssertionStateLibCaller: AssertionStateLibCaller{contract: contract}, AssertionStateLibTransactor: AssertionStateLibTransactor{contract: contract}, AssertionStateLibFilterer: AssertionStateLibFilterer{contract: contract}}, nil -} + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -// AssertionStateLib is an auto generated Go binding around an Ethereum contract. -type AssertionStateLib struct { - AssertionStateLibCaller // Read-only binding to the contract - AssertionStateLibTransactor // Write-only binding to the contract - AssertionStateLibFilterer // Log filterer for contract events -} + return out0, err -// AssertionStateLibCaller is an auto generated read-only Go binding around an Ethereum contract. -type AssertionStateLibCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// AssertionStateLibTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AssertionStateLibTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxSession) Bridge() (common.Address, error) { + return _AbsRollupEventInbox.Contract.Bridge(&_AbsRollupEventInbox.CallOpts) } -// AssertionStateLibFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AssertionStateLibFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxCallerSession) Bridge() (common.Address, error) { + return _AbsRollupEventInbox.Contract.Bridge(&_AbsRollupEventInbox.CallOpts) } -// AssertionStateLibSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AssertionStateLibSession struct { - Contract *AssertionStateLib // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AbsRollupEventInbox.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + } -// AssertionStateLibCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AssertionStateLibCallerSession struct { - Contract *AssertionStateLibCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxSession) Rollup() (common.Address, error) { + return _AbsRollupEventInbox.Contract.Rollup(&_AbsRollupEventInbox.CallOpts) } -// AssertionStateLibTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AssertionStateLibTransactorSession struct { - Contract *AssertionStateLibTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_AbsRollupEventInbox *AbsRollupEventInboxCallerSession) Rollup() (common.Address, error) { + return _AbsRollupEventInbox.Contract.Rollup(&_AbsRollupEventInbox.CallOpts) } -// AssertionStateLibRaw is an auto generated low-level Go binding around an Ethereum contract. -type AssertionStateLibRaw struct { - Contract *AssertionStateLib // Generic contract binding to access the raw methods on +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _AbsRollupEventInbox.contract.Transact(opts, "initialize", _bridge) } -// AssertionStateLibCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AssertionStateLibCallerRaw struct { - Contract *AssertionStateLibCaller // Generic read-only contract binding to access the raw methods on +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.Initialize(&_AbsRollupEventInbox.TransactOpts, _bridge) } -// AssertionStateLibTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AssertionStateLibTransactorRaw struct { - Contract *AssertionStateLibTransactor // Generic write-only contract binding to access the raw methods on +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.Initialize(&_AbsRollupEventInbox.TransactOpts, _bridge) } -// NewAssertionStateLib creates a new instance of AssertionStateLib, bound to a specific deployed contract. -func NewAssertionStateLib(address common.Address, backend bind.ContractBackend) (*AssertionStateLib, error) { - contract, err := bindAssertionStateLib(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &AssertionStateLib{AssertionStateLibCaller: AssertionStateLibCaller{contract: contract}, AssertionStateLibTransactor: AssertionStateLibTransactor{contract: contract}, AssertionStateLibFilterer: AssertionStateLibFilterer{contract: contract}}, nil +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactor) RollupInitialized(opts *bind.TransactOpts, chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _AbsRollupEventInbox.contract.Transact(opts, "rollupInitialized", chainId, chainConfig) } -// NewAssertionStateLibCaller creates a new read-only instance of AssertionStateLib, bound to a specific deployed contract. -func NewAssertionStateLibCaller(address common.Address, caller bind.ContractCaller) (*AssertionStateLibCaller, error) { - contract, err := bindAssertionStateLib(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AssertionStateLibCaller{contract: contract}, nil +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.RollupInitialized(&_AbsRollupEventInbox.TransactOpts, chainId, chainConfig) } -// NewAssertionStateLibTransactor creates a new write-only instance of AssertionStateLib, bound to a specific deployed contract. -func NewAssertionStateLibTransactor(address common.Address, transactor bind.ContractTransactor) (*AssertionStateLibTransactor, error) { - contract, err := bindAssertionStateLib(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AssertionStateLibTransactor{contract: contract}, nil +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactorSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.RollupInitialized(&_AbsRollupEventInbox.TransactOpts, chainId, chainConfig) } -// NewAssertionStateLibFilterer creates a new log filterer instance of AssertionStateLib, bound to a specific deployed contract. -func NewAssertionStateLibFilterer(address common.Address, filterer bind.ContractFilterer) (*AssertionStateLibFilterer, error) { - contract, err := bindAssertionStateLib(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AssertionStateLibFilterer{contract: contract}, nil +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbsRollupEventInbox.contract.Transact(opts, "updateRollupAddress") } -// bindAssertionStateLib binds a generic wrapper to an already deployed contract. -func bindAssertionStateLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := AssertionStateLibMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxSession) UpdateRollupAddress() (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.UpdateRollupAddress(&_AbsRollupEventInbox.TransactOpts) } -// Call invokes the (constant) contract method with params as input values and +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_AbsRollupEventInbox *AbsRollupEventInboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { + return _AbsRollupEventInbox.Contract.UpdateRollupAddress(&_AbsRollupEventInbox.TransactOpts) +} + +// AbsRollupEventInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the AbsRollupEventInbox contract. +type AbsRollupEventInboxInboxMessageDeliveredIterator struct { + Event *AbsRollupEventInboxInboxMessageDelivered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsRollupEventInboxInboxMessageDeliveredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsRollupEventInboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsRollupEventInboxInboxMessageDelivered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsRollupEventInboxInboxMessageDeliveredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsRollupEventInboxInboxMessageDeliveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AbsRollupEventInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the AbsRollupEventInbox contract. +type AbsRollupEventInboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*AbsRollupEventInboxInboxMessageDeliveredIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _AbsRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return &AbsRollupEventInboxInboxMessageDeliveredIterator{contract: _AbsRollupEventInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *AbsRollupEventInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _AbsRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsRollupEventInboxInboxMessageDelivered) + if err := _AbsRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. +// +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*AbsRollupEventInboxInboxMessageDelivered, error) { + event := new(AbsRollupEventInboxInboxMessageDelivered) + if err := _AbsRollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the AbsRollupEventInbox contract. +type AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator struct { + Event *AbsRollupEventInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AbsRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AbsRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AbsRollupEventInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the AbsRollupEventInbox contract. +type AbsRollupEventInboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _AbsRollupEventInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return &AbsRollupEventInboxInboxMessageDeliveredFromOriginIterator{contract: _AbsRollupEventInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil +} + +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *AbsRollupEventInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _AbsRollupEventInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AbsRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _AbsRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_AbsRollupEventInbox *AbsRollupEventInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*AbsRollupEventInboxInboxMessageDeliveredFromOrigin, error) { + event := new(AbsRollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _AbsRollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AssertionNodeLibMetaData contains all meta data concerning the AssertionNodeLib contract. +var AssertionNodeLibMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122026b849da9857b2e011b51ce3143c11a5b61329b007765ca39e8366b66b6deaa264736f6c63430008110033", +} + +// AssertionNodeLibABI is the input ABI used to generate the binding from. +// Deprecated: Use AssertionNodeLibMetaData.ABI instead. +var AssertionNodeLibABI = AssertionNodeLibMetaData.ABI + +// AssertionNodeLibBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AssertionNodeLibMetaData.Bin instead. +var AssertionNodeLibBin = AssertionNodeLibMetaData.Bin + +// DeployAssertionNodeLib deploys a new Ethereum contract, binding an instance of AssertionNodeLib to it. +func DeployAssertionNodeLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AssertionNodeLib, error) { + parsed, err := AssertionNodeLibMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AssertionNodeLibBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AssertionNodeLib{AssertionNodeLibCaller: AssertionNodeLibCaller{contract: contract}, AssertionNodeLibTransactor: AssertionNodeLibTransactor{contract: contract}, AssertionNodeLibFilterer: AssertionNodeLibFilterer{contract: contract}}, nil +} + +// AssertionNodeLib is an auto generated Go binding around an Ethereum contract. +type AssertionNodeLib struct { + AssertionNodeLibCaller // Read-only binding to the contract + AssertionNodeLibTransactor // Write-only binding to the contract + AssertionNodeLibFilterer // Log filterer for contract events +} + +// AssertionNodeLibCaller is an auto generated read-only Go binding around an Ethereum contract. +type AssertionNodeLibCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionNodeLibTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AssertionNodeLibTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionNodeLibFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AssertionNodeLibFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionNodeLibSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AssertionNodeLibSession struct { + Contract *AssertionNodeLib // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssertionNodeLibCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AssertionNodeLibCallerSession struct { + Contract *AssertionNodeLibCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AssertionNodeLibTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AssertionNodeLibTransactorSession struct { + Contract *AssertionNodeLibTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssertionNodeLibRaw is an auto generated low-level Go binding around an Ethereum contract. +type AssertionNodeLibRaw struct { + Contract *AssertionNodeLib // Generic contract binding to access the raw methods on +} + +// AssertionNodeLibCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AssertionNodeLibCallerRaw struct { + Contract *AssertionNodeLibCaller // Generic read-only contract binding to access the raw methods on +} + +// AssertionNodeLibTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AssertionNodeLibTransactorRaw struct { + Contract *AssertionNodeLibTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAssertionNodeLib creates a new instance of AssertionNodeLib, bound to a specific deployed contract. +func NewAssertionNodeLib(address common.Address, backend bind.ContractBackend) (*AssertionNodeLib, error) { + contract, err := bindAssertionNodeLib(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AssertionNodeLib{AssertionNodeLibCaller: AssertionNodeLibCaller{contract: contract}, AssertionNodeLibTransactor: AssertionNodeLibTransactor{contract: contract}, AssertionNodeLibFilterer: AssertionNodeLibFilterer{contract: contract}}, nil +} + +// NewAssertionNodeLibCaller creates a new read-only instance of AssertionNodeLib, bound to a specific deployed contract. +func NewAssertionNodeLibCaller(address common.Address, caller bind.ContractCaller) (*AssertionNodeLibCaller, error) { + contract, err := bindAssertionNodeLib(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AssertionNodeLibCaller{contract: contract}, nil +} + +// NewAssertionNodeLibTransactor creates a new write-only instance of AssertionNodeLib, bound to a specific deployed contract. +func NewAssertionNodeLibTransactor(address common.Address, transactor bind.ContractTransactor) (*AssertionNodeLibTransactor, error) { + contract, err := bindAssertionNodeLib(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AssertionNodeLibTransactor{contract: contract}, nil +} + +// NewAssertionNodeLibFilterer creates a new log filterer instance of AssertionNodeLib, bound to a specific deployed contract. +func NewAssertionNodeLibFilterer(address common.Address, filterer bind.ContractFilterer) (*AssertionNodeLibFilterer, error) { + contract, err := bindAssertionNodeLib(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AssertionNodeLibFilterer{contract: contract}, nil +} + +// bindAssertionNodeLib binds a generic wrapper to an already deployed contract. +func bindAssertionNodeLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AssertionNodeLibMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssertionNodeLib *AssertionNodeLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssertionNodeLib.Contract.AssertionNodeLibCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssertionNodeLib *AssertionNodeLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssertionNodeLib.Contract.AssertionNodeLibTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssertionNodeLib *AssertionNodeLibRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssertionNodeLib.Contract.AssertionNodeLibTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssertionNodeLib *AssertionNodeLibCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssertionNodeLib.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssertionNodeLib *AssertionNodeLibTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssertionNodeLib.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssertionNodeLib *AssertionNodeLibTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssertionNodeLib.Contract.contract.Transact(opts, method, params...) +} + +// AssertionStateLibMetaData contains all meta data concerning the AssertionStateLib contract. +var AssertionStateLibMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e410277a0458732492a8905a86947d07492449e4ec9f30a1564a006ff9c1cfec64736f6c63430008110033", +} + +// AssertionStateLibABI is the input ABI used to generate the binding from. +// Deprecated: Use AssertionStateLibMetaData.ABI instead. +var AssertionStateLibABI = AssertionStateLibMetaData.ABI + +// AssertionStateLibBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AssertionStateLibMetaData.Bin instead. +var AssertionStateLibBin = AssertionStateLibMetaData.Bin + +// DeployAssertionStateLib deploys a new Ethereum contract, binding an instance of AssertionStateLib to it. +func DeployAssertionStateLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AssertionStateLib, error) { + parsed, err := AssertionStateLibMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AssertionStateLibBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AssertionStateLib{AssertionStateLibCaller: AssertionStateLibCaller{contract: contract}, AssertionStateLibTransactor: AssertionStateLibTransactor{contract: contract}, AssertionStateLibFilterer: AssertionStateLibFilterer{contract: contract}}, nil +} + +// AssertionStateLib is an auto generated Go binding around an Ethereum contract. +type AssertionStateLib struct { + AssertionStateLibCaller // Read-only binding to the contract + AssertionStateLibTransactor // Write-only binding to the contract + AssertionStateLibFilterer // Log filterer for contract events +} + +// AssertionStateLibCaller is an auto generated read-only Go binding around an Ethereum contract. +type AssertionStateLibCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionStateLibTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AssertionStateLibTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionStateLibFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AssertionStateLibFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AssertionStateLibSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AssertionStateLibSession struct { + Contract *AssertionStateLib // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssertionStateLibCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AssertionStateLibCallerSession struct { + Contract *AssertionStateLibCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AssertionStateLibTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AssertionStateLibTransactorSession struct { + Contract *AssertionStateLibTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AssertionStateLibRaw is an auto generated low-level Go binding around an Ethereum contract. +type AssertionStateLibRaw struct { + Contract *AssertionStateLib // Generic contract binding to access the raw methods on +} + +// AssertionStateLibCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AssertionStateLibCallerRaw struct { + Contract *AssertionStateLibCaller // Generic read-only contract binding to access the raw methods on +} + +// AssertionStateLibTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AssertionStateLibTransactorRaw struct { + Contract *AssertionStateLibTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAssertionStateLib creates a new instance of AssertionStateLib, bound to a specific deployed contract. +func NewAssertionStateLib(address common.Address, backend bind.ContractBackend) (*AssertionStateLib, error) { + contract, err := bindAssertionStateLib(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AssertionStateLib{AssertionStateLibCaller: AssertionStateLibCaller{contract: contract}, AssertionStateLibTransactor: AssertionStateLibTransactor{contract: contract}, AssertionStateLibFilterer: AssertionStateLibFilterer{contract: contract}}, nil +} + +// NewAssertionStateLibCaller creates a new read-only instance of AssertionStateLib, bound to a specific deployed contract. +func NewAssertionStateLibCaller(address common.Address, caller bind.ContractCaller) (*AssertionStateLibCaller, error) { + contract, err := bindAssertionStateLib(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AssertionStateLibCaller{contract: contract}, nil +} + +// NewAssertionStateLibTransactor creates a new write-only instance of AssertionStateLib, bound to a specific deployed contract. +func NewAssertionStateLibTransactor(address common.Address, transactor bind.ContractTransactor) (*AssertionStateLibTransactor, error) { + contract, err := bindAssertionStateLib(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AssertionStateLibTransactor{contract: contract}, nil +} + +// NewAssertionStateLibFilterer creates a new log filterer instance of AssertionStateLib, bound to a specific deployed contract. +func NewAssertionStateLibFilterer(address common.Address, filterer bind.ContractFilterer) (*AssertionStateLibFilterer, error) { + contract, err := bindAssertionStateLib(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AssertionStateLibFilterer{contract: contract}, nil +} + +// bindAssertionStateLib binds a generic wrapper to an already deployed contract. +func bindAssertionStateLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AssertionStateLibMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssertionStateLib *AssertionStateLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssertionStateLib.Contract.AssertionStateLibCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssertionStateLib *AssertionStateLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssertionStateLib.Contract.AssertionStateLibTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssertionStateLib *AssertionStateLibRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssertionStateLib.Contract.AssertionStateLibTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AssertionStateLib *AssertionStateLibCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AssertionStateLib.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AssertionStateLib *AssertionStateLibTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AssertionStateLib.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AssertionStateLib *AssertionStateLibTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AssertionStateLib.Contract.contract.Transact(opts, method, params...) +} + +// BOLDUpgradeActionMetaData contains all meta data concerning the BOLDUpgradeAction contract. +var BOLDUpgradeActionMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1Timelock\",\"type\":\"address\"},{\"internalType\":\"contractIOldRollup\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.ProxyAdmins\",\"name\":\"proxyAdmins\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Implementations\",\"name\":\"implementations\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengePeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"disableValidatorWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blockLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bigStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"smallStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structBOLDUpgradeAction.Settings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"name\":\"RollupMigrated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ANY_TRUST_FAST_CONFIRMER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIGSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_GRACE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CONFIRM_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISABLE_VALIDATOR_WHITELIST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_CHALLENGE_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_ADMIN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_PATCHED_OLD_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_TIMELOCK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINI_STAKE_AMOUNTS_STORAGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_BIGSTEP_LEVEL\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OLD_ROLLUP\",\"outputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OSP\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PREIMAGE_LOOKUP\",\"outputs\":[{\"internalType\":\"contractStateHashPreImageLookup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_BRIDGE\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_OUTBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_REI\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_READER\",\"outputs\":[{\"internalType\":\"contractRollupReader\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQ_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SMALLSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"name\":\"perform\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6104e06040523480156200001257600080fd5b50604051620079d8380380620079d8833981016040819052620000359162000670565b83516001600160a01b0390811661010052602080860151821661012052604080870151831661014052606080880151841661016052608088015184166101805260a088015184166101a05260c088015184166101c05260e088015184166103005286518416610320529186015183166103405285810151831661036052908501519091166103805251620000c99062000278565b604051809103906000f080158015620000e6573d6000803e3d6000fd5b506001600160a01b03166103a0526020840151604051620001079062000286565b6001600160a01b039091168152602001604051809103906000f08015801562000134573d6000803e3d6000fd5b506001600160a01b039081166103c052825181166103e05260208084015182166104005260408085015183166104205260608086015184166104405260808087015185166104605260a08088015186166104805260c088015186166104a05260e088015186166104c0528601516102605285516001600160401b039081166101e0529386015190931661020052848201519093166102205291830151610240528201519051620001e49062000294565b620001f0919062000797565b604051809103906000f0801580156200020d573d6000803e3d6000fd5b506001600160a01b039081166102e05260c0808301519091166102805260e08083015115156102a05261010083015160805261012083015160a05261014083015190915261016082015160ff16905261018001516001600160401b03166102c05250620007dd915050565b610a2d806200612883390190565b610be38062006b5583390190565b6102a0806200773883390190565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715620002de57620002de620002a2565b60405290565b6040516101a081016001600160401b0381118282101715620002de57620002de620002a2565b6001600160a01b03811681146200032057600080fd5b50565b805162000330816200030a565b919050565b6000608082840312156200034857600080fd5b604051608081016001600160401b03811182821017156200036d576200036d620002a2565b8060405250809150825162000382816200030a565b8152602083015162000394816200030a565b60208201526040830151620003a9816200030a565b60408201526060830151620003be816200030a565b6060919091015292915050565b60006101008284031215620003df57600080fd5b620003e9620002b8565b90508151620003f8816200030a565b815260208201516200040a816200030a565b60208201526200041d6040830162000323565b6040820152620004306060830162000323565b6060820152620004436080830162000323565b60808201526200045660a0830162000323565b60a08201526200046960c0830162000323565b60c08201526200047c60e0830162000323565b60e082015292915050565b80516001600160401b03811681146200033057600080fd5b600082601f830112620004b157600080fd5b815160206001600160401b0380831115620004d057620004d0620002a2565b8260051b604051601f19603f83011681018181108482111715620004f857620004f8620002a2565b6040529384528581018301938381019250878511156200051757600080fd5b83870191505b8482101562000538578151835291830191908301906200051d565b979650505050505050565b805180151581146200033057600080fd5b805160ff811681146200033057600080fd5b60006101a082840312156200057a57600080fd5b62000584620002e4565b9050620005918262000487565b8152620005a16020830162000487565b6020820152620005b46040830162000323565b60408201526060828101519082015260808201516001600160401b03811115620005dd57600080fd5b620005eb848285016200049f565b60808301525060a082015160a08201526200060960c0830162000323565b60c08201526200061c60e0830162000543565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101606200065281840162000554565b908201526101806200066683820162000487565b9082015292915050565b6000806000808486036102a08112156200068957600080fd5b610100808212156200069a57600080fd5b620006a4620002b8565b91508651620006b3816200030a565b8252620006c36020880162000323565b6020830152620006d66040880162000323565b6040830152620006e96060880162000323565b6060830152620006fc6080880162000323565b60808301526200070f60a0880162000323565b60a08301526200072260c0880162000323565b60c08301526200073560e0880162000323565b60e08301528195506200074b8882890162000335565b945050506200075f866101808701620003cb565b6102808601519092506001600160401b038111156200077d57600080fd5b6200078b8782880162000566565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015620007d157835183529284019291840191600101620007b3565b50909695505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516155fc62000b2c6000396000818161036e01526108a80152600081816102970152610a460152600081816104950152610a75015260008181610445015261155001526000818161071101526124e30152600081816106c1015261228d0152600081816106e901526120370152600081816107b10152611dc00152600081816104bd01528181610aa401528181610e22015281816111e1015281816112d90152818161138d015281816115e70152818161161601526119c201526000818161073901528181611756015261182001526000818161041d01528181612062015261215c01526000818161046d01528181612200015281816122b8015281816123b20152612456015260008181610304015281816108c901528181611d3301528181611deb01528181611f060152611faa0152600081816102dc0152818161250e01526126080152600081816105c00152610bdc0152600081816106210152611ac50152600081816107f20152611c2f0152600081816105e801528181610fe801526110350152600081816107610152611bd70152600081816105480152611a8a01526000818161086a015261199c0152600081816103be015261196d0152600081816105980152610bbb01526000818161032c015261193d01526000818161064901526109aa015260008181610396015281816109d901528181612427015261257001526000818161067101528181610a08015281816121d1015261231a0152600081816107890152818161097b01528181611f7b01526120c401526000818161081a0152818161094c01528181611d060152611e810152600081816105700152818161116a01528181611498015261157801526000818161069901528181610c140152611a5b0152600081816104e50152611c060152600081816108420152611ba50152600081816103e60152611b7f0152600081816105200152611b5901526155fc6000f3fe60806040523480156200001157600080fd5b50600436106200028c5760003560e01c80639f9854e5116200015f578063cc8089bb11620000cc578063ebe03a931162000097578063ee9a31a2116200007a578063ee9a31a21462000814578063fa287420146200083c578063faf5625f146200086457600080fd5b8063ebe03a9314620007d3578063ec4f74ce14620007ec57600080fd5b8063cc8089bb1462000733578063d1da2c5c146200075b578063d384cb951462000783578063dae7cb8b14620007ab57600080fd5b8063be41b367116200012a578063c21c4233116200010d578063c21c423314620006bb578063c519d15114620006e3578063c897f55e146200070b57600080fd5b8063be41b367146200066b578063bf5e3d52146200069357600080fd5b80639f9854e514620005ba578063b38d57f014620005e2578063b5e00c3f146200061b578063b7010697146200064357600080fd5b80632db93bdc11620001fe5780635d9e244411620001c957806385e1f4d011620001ac57806385e1f4d014620005425780638765240f146200056a57806391ddb285146200059257600080fd5b80635d9e244414620004df578063609fb503146200051a57600080fd5b80632db93bdc146200043f5780633c2b784014620004675780634692de5d146200048f5780634e0e75fb14620004b757600080fd5b806310a662e2116200025c5780631c39b672116200023f5780631c39b67214620003b85780631ccc2cd114620003e05780632cfb7ca3146200041757600080fd5b806310a662e214620003685780631b142ea7146200039057600080fd5b8062f9731e14620002915780630787484b14620002d65780630a54257d14620002fe5780631047fc521462000326575b600080fd5b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620005077f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001620002cd565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200060a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620007ea620007e436600462002919565b6200088c565b005b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b6200089662001168565b6000620008a2620015d9565b905060007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051620008f690620026b3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000939573d6000803e3d6000fd5b50905060006040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b279190620029c4565b6001600160a01b0316815250905060008360405160200162000b4a919062002cbb565b604051602081830303815290604052805190602001209050600062000b9c826040518060200162000b7b90620026c1565b6020820181038252601f19601f820116604052508051906020012062001c65565b905062000ba98162001cef565b836001600160a01b0316631a72d54c827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008961014001518a61016001518b61018001518c602001517f00000000000000000000000000000000000000000000000000000000000000008e61020001518f61010001516040518b63ffffffff1660e01b815260040162000c669a9998979695949392919062002cd0565b600060405180830381600087803b15801562000c8157600080fd5b505af115801562000c96573d6000803e3d6000fd5b5050505060008260405162000cab90620026c1565b8190604051809103906000f590508015801562000ccc573d6000803e3d6000fd5b509050816001600160a01b0316816001600160a01b03161462000d365760405162461bcd60e51b815260206004820152601560248201527f554e455850435445445f524f4c4c55505f41444452000000000000000000000060448201526064015b60405180910390fd5b608086018051309091526040517f8c2880910000000000000000000000000000000000000000000000000000000081526001600160a01b03831690638c2880919062000d89908a90899060040162002d4d565b600060405180830381600087803b15801562000da457600080fd5b505af115801562000db9573d6000803e3d6000fd5b50505050875160001462000fe6576000885167ffffffffffffffff81111562000de65762000de66200283c565b60405190808252806020026020018201604052801562000e10578160200160208202803683370190505b50905060005b895181101562000f66577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663facd743b8b838151811062000e645762000e6462002e33565b60200260200101516040518263ffffffff1660e01b815260040162000e9891906001600160a01b0391909116815260200190565b602060405180830381865afa15801562000eb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000edc919062002e5f565b62000f2a5760405162461bcd60e51b815260206004820152601860248201527f554e45585045435445445f4e45575f56414c494441544f520000000000000000604482015260640162000d2d565b600182828151811062000f415762000f4162002e33565b911515602092830291909101909101528062000f5d8162002e93565b91505062000e16565b506040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a3ffb7729062000fb0908c90859060040162002f09565b600060405180830381600087803b15801562000fcb57600080fd5b505af115801562000fe0573d6000803e3d6000fd5b50505050505b7f000000000000000000000000000000000000000000000000000000000000000015620010a4576040517fa2b4f1d80000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000151560048201526001600160a01b0383169063a2b4f1d890602401600060405180830381600087803b1580156200108a57600080fd5b505af11580156200109f573d6000803e3d6000fd5b505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906313af403590602401600060405180830381600087803b1580156200110157600080fd5b505af115801562001116573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528a1660208201527f7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314935001905060405180910390a15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011c457600080fd5b505af1158015620011d9573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200123e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001264919062002f7f565b905060328167ffffffffffffffff1611156200127e575060325b60005b8167ffffffffffffffff168167ffffffffffffffff1610156200151f576040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa15801562001329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200134f9190620029c4565b6040517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015620013d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fb919062002f9d565b9050806080015180156200141b5750606081015167ffffffffffffffff16155b1562001507576040805160018082528183019092526000916020808301908036833701905050905082816000815181106200145a576200145a62002e33565b6001600160a01b0392831660209182029290920101526040517f7c75c2980000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090911690637c75c29890620014d190849060040162003030565b600060405180830381600087803b158015620014ec57600080fd5b505af115801562001501573d6000803e3d6000fd5b50505050505b50508080620015169062003045565b91505062001281565b506040517f0d40a0fd0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690630d40a0fd90602401600060405180830381600087803b158015620015bd57600080fd5b505af1158015620015d2573d6000803e3d6000fd5b5050505050565b620015e3620026cf565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166392c8134c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001699919062002f7f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff909116600482015260240161018060405180830381865afa158015620016f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200171e91906200306f565b516040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081526004810182905290915060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638eaa6ac09060240160c060405180830381865afa158015620017a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017cc9190620031c3565b91509150620017da620027b4565b82518152602080840151908201906002811115620017fc57620017fc62002ad1565b9081600281111562001812576200181262002ad1565b905250836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166331644130620018508462002673565b856040518363ffffffff1660e01b81526004016200187092919062003294565b602060405180830381865afa1580156200188e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018b49190620032cb565b14620019035760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c617465737420657865637574696f6e2068617368000000604482015260640162000d2d565b6200192f6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518061024001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a459190620032cb565b8152602001306001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020016040518060200160405280600081525081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b0ec2ae16040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001b22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b4c9190810190620032e5565b81526020018281526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020018381526020018481526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000060ff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168152509550505050505090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b9392505050565b6040516310270e3d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008181166004840152916000917f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa15801562001d7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001da19190620029c4565b60405163266a23b160e21b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b15801562001e3257600080fd5b505af115801562001e47573d6000803e3d6000fd5b50506040517f919cc7060000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063919cc7069150602401600060405180830381600087803b15801562001ec857600080fd5b505af115801562001edd573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b15801562001f4d57600080fd5b505af115801562001f62573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa15801562001ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020189190620029c4565b60405163266a23b160e21b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b158015620020a957600080fd5b505af1158015620020be573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200211e57600080fd5b505af115801562002133573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b158015620021a357600080fd5b505af1158015620021b8573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa15801562002248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200226e9190620029c4565b60405163266a23b160e21b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b158015620022ff57600080fd5b505af115801562002314573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200237457600080fd5b505af115801562002389573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b158015620023f957600080fd5b505af11580156200240e573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa1580156200249e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024c49190620029c4565b60405163266a23b160e21b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906399a88ec490604401600060405180830381600087803b1580156200255557600080fd5b505af11580156200256a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ae71f126040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620025ca57600080fd5b505af1158015620025df573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b1580156200264f57600080fd5b505af115801562002664573d6000803e3d6000fd5b50505050505050505050505050565b6200267d620027dd565b60405180604001604052808360000151815260200183602001516002811115620026ab57620026ab62002ad1565b905292915050565b610ed3806200337583390190565b61137f806200424883390190565b604051806102400160405280600067ffffffffffffffff16815260200160006001600160a01b03168152602001600081526020016000801916815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016200276e6040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200160008152602001600081526020016000815260200162002792620027b4565b8152600060208201819052604082018190526060820181905260809091015290565b6040518060600160405280620027c9620027ff565b815260200160008152600060209091015290565b6040518060400160405280620027f2620027ff565b815260200160005b905290565b6040518060400160405280620028146200281e565b8152602001620027fa5b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156200287957620028796200283c565b60405290565b6040805190810167ffffffffffffffff811182821017156200287957620028796200283c565b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d157620028d16200283c565b604052919050565b600067ffffffffffffffff821115620028f657620028f66200283c565b5060051b60200190565b6001600160a01b03811681146200291657600080fd5b50565b600060208083850312156200292d57600080fd5b823567ffffffffffffffff8111156200294557600080fd5b8301601f810185136200295757600080fd5b80356200296e6200296882620028d9565b620028a5565b81815260059190911b820183019083810190878311156200298e57600080fd5b928401925b82841015620029b9578335620029a98162002900565b8252928401929084019062002993565b979650505050505050565b600060208284031215620029d757600080fd5b815162001ce88162002900565b6000815180845260005b8181101562002a0c57602081850181015186830182015201620029ee565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b8381101562002a5e5781518752958201959082019060010162002a40565b509495945050505050565b80518260005b600281101562002a9057825182526020928301929091019060010162002a6f565b5050506020808201516040840160005b600281101562002ac957825167ffffffffffffffff168252918301919083019060010162002aa0565b505050505050565b634e487b7160e01b600052602160045260246000fd5b6003811062002b0657634e487b7160e01b600052602160045260246000fd5b9052565b62002b1782825162002a69565b602081015162002b2b608084018262002ae7565b506040015160a09190910152565b805167ffffffffffffffff1682526000610340602083015162002b6760208601826001600160a01b03169052565b506040830151604085015260608301516060850152608083015162002b9760808601826001600160a01b03169052565b5060a083015162002bb360a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e086015262002bd782860182620029e4565b915050610100808401518583038287015262002bf4838262002a2c565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e08381890152828701519350610200925062002c728389018562002b0a565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff81166103208601525b509392505050565b60208152600062001ce8602083018462002b39565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff85166101008401528061012084015262002d3c8184018562002a2c565b9d9c50505050505050505050505050565b600061014080835262002d638184018662002b39565b9150506001600160a01b038351166020830152602083015162002d9160408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e083015161010062002e18818501836001600160a01b03169052565b8401516001600160a01b038116610120850152905062002cb3565b634e487b7160e01b600052603260045260246000fd5b8051801515811462002e5a57600080fd5b919050565b60006020828403121562002e7257600080fd5b62001ce88262002e49565b634e487b7160e01b600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002ec75762002ec762002e7d565b5060010190565b600081518084526020808501945080840160005b8381101562002a5e5781516001600160a01b03168752958201959082019060010162002ee2565b60408152600062002f1e604083018562002ece565b82810360208481019190915284518083528582019282019060005b8181101562002f5957845115158352938301939183019160010162002f39565b5090979650505050505050565b805167ffffffffffffffff8116811462002e5a57600080fd5b60006020828403121562002f9257600080fd5b62001ce88262002f66565b600060a0828403121562002fb057600080fd5b60405160a0810181811067ffffffffffffffff8211171562002fd65762002fd66200283c565b6040528251815262002feb6020840162002f66565b602082015262002ffe6040840162002f66565b6040820152620030116060840162002f66565b6060820152620030246080840162002e49565b60808201529392505050565b60208152600062001ce8602083018462002ece565b600067ffffffffffffffff80831681810362003065576200306562002e7d565b6001019392505050565b600061018082840312156200308357600080fd5b6200308d62002852565b825181526020830151602082015260408301516040820152620030b36060840162002f66565b6060820152620030c66080840162002f66565b6080820152620030d960a0840162002f66565b60a0820152620030ec60c0840162002f66565b60c0820152620030ff60e0840162002f66565b60e08201526101006200311481850162002f66565b908201526101206200312884820162002f66565b908201526101406200313c84820162002f66565b90820152610160928301519281019290925250919050565b600082601f8301126200316657600080fd5b620031706200287f565b8060408401858111156200318357600080fd5b845b81811015620031a857620031998162002f66565b84526020938401930162003185565b509095945050505050565b80516003811062002e5a57600080fd5b60008082840360c0811215620031d857600080fd5b60a0811215620031e757600080fd5b620031f16200287f565b60808212156200320057600080fd5b6200320a6200287f565b915085601f8601126200321c57600080fd5b620032266200287f565b8060408701888111156200323957600080fd5b875b81811015620032555780518452602093840193016200323b565b5081855262003265898262003154565b60208601525050508181526200327e60808601620031b3565b602082015260a094909401519395939450505050565b600060c082019050620032a982855162002a69565b6020840151620032bd608084018262002ae7565b508260a08301529392505050565b600060208284031215620032de57600080fd5b5051919050565b60006020808385031215620032f957600080fd5b825167ffffffffffffffff8111156200331157600080fd5b8301601f810185136200332357600080fd5b8051620033346200296882620028d9565b81815260059190911b820183019083810190878311156200335457600080fd5b928401925b82841015620029b9578351825292840192908401906200335956fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eb324ac237cee282d01c9b8eb285ad23578068c2023bb2eae5e324660dc7623964736f6c63430008110033a2646970667358221220f00466db5b735dfb9a1456f97bcde25bbf2ee6acb6873aeac59ff5e732dce9eb64736f6c63430008110033608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220a1f757a5902974df23daaa142a9d5301c059eb0eccd1b043081f7b8b6a2b1b0864736f6c6343000811003360a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea26469706673582212205e257ad4386cb97c913f69806e0d6838d107ffb4d1a2d411805f098e07201f3c64736f6c63430008110033608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea264697066735822122069938d416ea3ba5933fb5ea572e5f64721692cbb7e6e0066e13ef45b79281daf64736f6c63430008110033", +} + +// BOLDUpgradeActionABI is the input ABI used to generate the binding from. +// Deprecated: Use BOLDUpgradeActionMetaData.ABI instead. +var BOLDUpgradeActionABI = BOLDUpgradeActionMetaData.ABI + +// BOLDUpgradeActionBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BOLDUpgradeActionMetaData.Bin instead. +var BOLDUpgradeActionBin = BOLDUpgradeActionMetaData.Bin + +// DeployBOLDUpgradeAction deploys a new Ethereum contract, binding an instance of BOLDUpgradeAction to it. +func DeployBOLDUpgradeAction(auth *bind.TransactOpts, backend bind.ContractBackend, contracts BOLDUpgradeActionContracts, proxyAdmins BOLDUpgradeActionProxyAdmins, implementations BOLDUpgradeActionImplementations, settings BOLDUpgradeActionSettings) (common.Address, *types.Transaction, *BOLDUpgradeAction, error) { + parsed, err := BOLDUpgradeActionMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BOLDUpgradeActionBin), backend, contracts, proxyAdmins, implementations, settings) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BOLDUpgradeAction{BOLDUpgradeActionCaller: BOLDUpgradeActionCaller{contract: contract}, BOLDUpgradeActionTransactor: BOLDUpgradeActionTransactor{contract: contract}, BOLDUpgradeActionFilterer: BOLDUpgradeActionFilterer{contract: contract}}, nil +} + +// BOLDUpgradeAction is an auto generated Go binding around an Ethereum contract. +type BOLDUpgradeAction struct { + BOLDUpgradeActionCaller // Read-only binding to the contract + BOLDUpgradeActionTransactor // Write-only binding to the contract + BOLDUpgradeActionFilterer // Log filterer for contract events +} + +// BOLDUpgradeActionCaller is an auto generated read-only Go binding around an Ethereum contract. +type BOLDUpgradeActionCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BOLDUpgradeActionTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BOLDUpgradeActionTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BOLDUpgradeActionFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BOLDUpgradeActionFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BOLDUpgradeActionSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BOLDUpgradeActionSession struct { + Contract *BOLDUpgradeAction // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BOLDUpgradeActionCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BOLDUpgradeActionCallerSession struct { + Contract *BOLDUpgradeActionCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BOLDUpgradeActionTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BOLDUpgradeActionTransactorSession struct { + Contract *BOLDUpgradeActionTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BOLDUpgradeActionRaw is an auto generated low-level Go binding around an Ethereum contract. +type BOLDUpgradeActionRaw struct { + Contract *BOLDUpgradeAction // Generic contract binding to access the raw methods on +} + +// BOLDUpgradeActionCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BOLDUpgradeActionCallerRaw struct { + Contract *BOLDUpgradeActionCaller // Generic read-only contract binding to access the raw methods on +} + +// BOLDUpgradeActionTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BOLDUpgradeActionTransactorRaw struct { + Contract *BOLDUpgradeActionTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBOLDUpgradeAction creates a new instance of BOLDUpgradeAction, bound to a specific deployed contract. +func NewBOLDUpgradeAction(address common.Address, backend bind.ContractBackend) (*BOLDUpgradeAction, error) { + contract, err := bindBOLDUpgradeAction(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BOLDUpgradeAction{BOLDUpgradeActionCaller: BOLDUpgradeActionCaller{contract: contract}, BOLDUpgradeActionTransactor: BOLDUpgradeActionTransactor{contract: contract}, BOLDUpgradeActionFilterer: BOLDUpgradeActionFilterer{contract: contract}}, nil +} + +// NewBOLDUpgradeActionCaller creates a new read-only instance of BOLDUpgradeAction, bound to a specific deployed contract. +func NewBOLDUpgradeActionCaller(address common.Address, caller bind.ContractCaller) (*BOLDUpgradeActionCaller, error) { + contract, err := bindBOLDUpgradeAction(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BOLDUpgradeActionCaller{contract: contract}, nil +} + +// NewBOLDUpgradeActionTransactor creates a new write-only instance of BOLDUpgradeAction, bound to a specific deployed contract. +func NewBOLDUpgradeActionTransactor(address common.Address, transactor bind.ContractTransactor) (*BOLDUpgradeActionTransactor, error) { + contract, err := bindBOLDUpgradeAction(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BOLDUpgradeActionTransactor{contract: contract}, nil +} + +// NewBOLDUpgradeActionFilterer creates a new log filterer instance of BOLDUpgradeAction, bound to a specific deployed contract. +func NewBOLDUpgradeActionFilterer(address common.Address, filterer bind.ContractFilterer) (*BOLDUpgradeActionFilterer, error) { + contract, err := bindBOLDUpgradeAction(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BOLDUpgradeActionFilterer{contract: contract}, nil +} + +// bindBOLDUpgradeAction binds a generic wrapper to an already deployed contract. +func bindBOLDUpgradeAction(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BOLDUpgradeActionMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_AssertionStateLib *AssertionStateLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssertionStateLib.Contract.AssertionStateLibCaller.contract.Call(opts, result, method, params...) +func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BOLDUpgradeAction.Contract.BOLDUpgradeActionCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.BOLDUpgradeActionTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.BOLDUpgradeActionTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BOLDUpgradeAction.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.contract.Transact(opts, method, params...) +} + +// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// +// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) ANYTRUSTFASTCONFIRMER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "ANY_TRUST_FAST_CONFIRMER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// +// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) ANYTRUSTFASTCONFIRMER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.ANYTRUSTFASTCONFIRMER(&_BOLDUpgradeAction.CallOpts) +} + +// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// +// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) ANYTRUSTFASTCONFIRMER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.ANYTRUSTFASTCONFIRMER(&_BOLDUpgradeAction.CallOpts) +} + +// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// +// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BIGSTEPLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "BIGSTEP_LEAF_SIZE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// +// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BIGSTEPLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.BIGSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +} + +// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// +// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BIGSTEPLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.BIGSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +} + +// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// +// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BLOCKLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "BLOCK_LEAF_SIZE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// +// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BLOCKLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.BLOCKLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +} + +// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// +// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BLOCKLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.BLOCKLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.BRIDGE(&_BOLDUpgradeAction.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.BRIDGE(&_BOLDUpgradeAction.CallOpts) +} + +// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// +// Solidity: function CHAIN_ID() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHAINID(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHAIN_ID") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// +// Solidity: function CHAIN_ID() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHAINID() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.CHAINID(&_BOLDUpgradeAction.CallOpts) +} + +// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// +// Solidity: function CHAIN_ID() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHAINID() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.CHAINID(&_BOLDUpgradeAction.CallOpts) +} + +// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// +// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHALLENGEGRACEPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHALLENGE_GRACE_PERIOD_BLOCKS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// +// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHALLENGEGRACEPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CHALLENGEGRACEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +} + +// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// +// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHALLENGEGRACEPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CHALLENGEGRACEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +} + +// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// +// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHALLENGEPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHALLENGE_PERIOD_BLOCKS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// +// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHALLENGEPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CHALLENGEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +} + +// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// +// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHALLENGEPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CHALLENGEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) } -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_AssertionStateLib *AssertionStateLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssertionStateLib.Contract.AssertionStateLibTransactor.contract.Transfer(opts) +// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// +// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CONFIRMPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "CONFIRM_PERIOD_BLOCKS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + } -// Transact invokes the (paid) contract method with params as input values. -func (_AssertionStateLib *AssertionStateLibRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssertionStateLib.Contract.AssertionStateLibTransactor.contract.Transact(opts, method, params...) +// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// +// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CONFIRMPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CONFIRMPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) } -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_AssertionStateLib *AssertionStateLibCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AssertionStateLib.Contract.contract.Call(opts, result, method, params...) +// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// +// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CONFIRMPERIODBLOCKS() (uint64, error) { + return _BOLDUpgradeAction.Contract.CONFIRMPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) } -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_AssertionStateLib *AssertionStateLibTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AssertionStateLib.Contract.contract.Transfer(opts) +// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// +// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) DISABLEVALIDATORWHITELIST(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "DISABLE_VALIDATOR_WHITELIST") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + } -// Transact invokes the (paid) contract method with params as input values. -func (_AssertionStateLib *AssertionStateLibTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AssertionStateLib.Contract.contract.Transact(opts, method, params...) +// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// +// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) DISABLEVALIDATORWHITELIST() (bool, error) { + return _BOLDUpgradeAction.Contract.DISABLEVALIDATORWHITELIST(&_BOLDUpgradeAction.CallOpts) } -// BOLDUpgradeActionMetaData contains all meta data concerning the BOLDUpgradeAction contract. -var BOLDUpgradeActionMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1Timelock\",\"type\":\"address\"},{\"internalType\":\"contractIOldRollup\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"osp\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.ProxyAdmins\",\"name\":\"proxyAdmins\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"seqInbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rei\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRollupAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"internalType\":\"structBOLDUpgradeAction.Implementations\",\"name\":\"implementations\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"challengePeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"disableValidatorWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blockLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bigStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"smallStepLeafSize\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structBOLDUpgradeAction.Settings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"}],\"name\":\"RollupMigrated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ANY_TRUST_FAST_CONFIRMER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIGSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_GRACE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CHALLENGE_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CONFIRM_PERIOD_BLOCKS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISABLE_VALIDATOR_WHITELIST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_CHALLENGE_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_ADMIN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_NEW_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_PATCHED_OLD_ROLLUP_USER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IMPL_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_TIMELOCK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINI_STAKE_AMOUNTS_STORAGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_BIGSTEP_LEVEL\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OLD_ROLLUP\",\"outputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OSP\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OUTBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PREIMAGE_LOOKUP\",\"outputs\":[{\"internalType\":\"contractStateHashPreImageLookup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_BRIDGE\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_OUTBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_REI\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROXY_ADMIN_SEQUENCER_INBOX\",\"outputs\":[{\"internalType\":\"contractProxyAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REI\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_READER\",\"outputs\":[{\"internalType\":\"contractRollupReader\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEQ_INBOX\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SMALLSTEP_LEAF_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"}],\"name\":\"perform\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6104e06040523480156200001257600080fd5b506040516200792238038062007922833981016040819052620000359162000670565b83516001600160a01b0390811661010052602080860151821661012052604080870151831661014052606080880151841661016052608088015184166101805260a088015184166101a05260c088015184166101c05260e088015184166103005286518416610320529186015183166103405285810151831661036052908501519091166103805251620000c99062000278565b604051809103906000f080158015620000e6573d6000803e3d6000fd5b506001600160a01b03166103a0526020840151604051620001079062000286565b6001600160a01b039091168152602001604051809103906000f08015801562000134573d6000803e3d6000fd5b506001600160a01b039081166103c052825181166103e05260208084015182166104005260408085015183166104205260608086015184166104405260808087015185166104605260a08088015186166104805260c088015186166104a05260e088015186166104c0528601516102605285516001600160401b039081166101e0529386015190931661020052848201519093166102205291830151610240528201519051620001e49062000294565b620001f0919062000797565b604051809103906000f0801580156200020d573d6000803e3d6000fd5b506001600160a01b039081166102e05260c0808301519091166102805260e08083015115156102a05261010083015160805261012083015160a05261014083015190915261016082015160ff16905261018001516001600160401b03166102c05250620007dd915050565b610a2d806200607283390190565b610be38062006a9f83390190565b6102a0806200768283390190565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715620002de57620002de620002a2565b60405290565b6040516101a081016001600160401b0381118282101715620002de57620002de620002a2565b6001600160a01b03811681146200032057600080fd5b50565b805162000330816200030a565b919050565b6000608082840312156200034857600080fd5b604051608081016001600160401b03811182821017156200036d576200036d620002a2565b8060405250809150825162000382816200030a565b8152602083015162000394816200030a565b60208201526040830151620003a9816200030a565b60408201526060830151620003be816200030a565b6060919091015292915050565b60006101008284031215620003df57600080fd5b620003e9620002b8565b90508151620003f8816200030a565b815260208201516200040a816200030a565b60208201526200041d6040830162000323565b6040820152620004306060830162000323565b6060820152620004436080830162000323565b60808201526200045660a0830162000323565b60a08201526200046960c0830162000323565b60c08201526200047c60e0830162000323565b60e082015292915050565b80516001600160401b03811681146200033057600080fd5b600082601f830112620004b157600080fd5b815160206001600160401b0380831115620004d057620004d0620002a2565b8260051b604051601f19603f83011681018181108482111715620004f857620004f8620002a2565b6040529384528581018301938381019250878511156200051757600080fd5b83870191505b8482101562000538578151835291830191908301906200051d565b979650505050505050565b805180151581146200033057600080fd5b805160ff811681146200033057600080fd5b60006101a082840312156200057a57600080fd5b62000584620002e4565b9050620005918262000487565b8152620005a16020830162000487565b6020820152620005b46040830162000323565b60408201526060828101519082015260808201516001600160401b03811115620005dd57600080fd5b620005eb848285016200049f565b60808301525060a082015160a08201526200060960c0830162000323565b60c08201526200061c60e0830162000543565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101606200065281840162000554565b908201526101806200066683820162000487565b9082015292915050565b6000806000808486036102a08112156200068957600080fd5b610100808212156200069a57600080fd5b620006a4620002b8565b91508651620006b3816200030a565b8252620006c36020880162000323565b6020830152620006d66040880162000323565b6040830152620006e96060880162000323565b6060830152620006fc6080880162000323565b60808301526200070f60a0880162000323565b60a08301526200072260c0880162000323565b60c08301526200073560e0880162000323565b60e08301528195506200074b8882890162000335565b945050506200075f866101808701620003cb565b6102808601519092506001600160401b038111156200077d57600080fd5b6200078b8782880162000566565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015620007d157835183529284019291840191600101620007b3565b50909695505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c05161556262000b106000396000818161036e01526108a80152600081816102970152610a460152600081816104950152610a75015260008181610445015261155001526000818161071101526124b70152600081816106c1015261229e0152600081816106e901526120850152600081816107b10152611dd50152600081816104bd01528181610aa401528181610e22015281816111e1015281816112d90152818161138d015281816115e70152818161161601526119c201526000818161073901528181611756015261182001526000818161041d01528181612055015261210501526000818161046d015281816121a90152818161226e0152818161231e01526123c2015260008181610304015281816108c901528181611d3301528181611da501528181611eec0152611f900152600081816102dc0152818161248701526125370152600081816105c00152610bdc0152600081816106210152611ac50152600081816107f20152611c2f0152600081816105e801528181610fe801526110350152600081816107610152611bd70152600081816105480152611a8a01526000818161086a015261199c0152600081816103be015261196d0152600081816105980152610bbb01526000818161032c015261193d01526000818161064901526109aa015260008181610396015281816109d9015261239301526000818161067101528181610a08015261217a0152600081816107890152818161097b0152611f6101526000818161081a0152818161094c0152611d060152600081816105700152818161116a01528181611498015261157801526000818161069901528181610c140152611a5b0152600081816104e50152611c060152600081816108420152611ba50152600081816103e60152611b7f0152600081816105200152611b5901526155626000f3fe60806040523480156200001157600080fd5b50600436106200028c5760003560e01c80639f9854e5116200015f578063cc8089bb11620000cc578063ebe03a931162000097578063ee9a31a2116200007a578063ee9a31a21462000814578063fa287420146200083c578063faf5625f146200086457600080fd5b8063ebe03a9314620007d3578063ec4f74ce14620007ec57600080fd5b8063cc8089bb1462000733578063d1da2c5c146200075b578063d384cb951462000783578063dae7cb8b14620007ab57600080fd5b8063be41b367116200012a578063c21c4233116200010d578063c21c423314620006bb578063c519d15114620006e3578063c897f55e146200070b57600080fd5b8063be41b367146200066b578063bf5e3d52146200069357600080fd5b80639f9854e514620005ba578063b38d57f014620005e2578063b5e00c3f146200061b578063b7010697146200064357600080fd5b80632db93bdc11620001fe5780635d9e244411620001c957806385e1f4d011620001ac57806385e1f4d014620005425780638765240f146200056a57806391ddb285146200059257600080fd5b80635d9e244414620004df578063609fb503146200051a57600080fd5b80632db93bdc146200043f5780633c2b784014620004675780634692de5d146200048f5780634e0e75fb14620004b757600080fd5b806310a662e2116200025c5780631c39b672116200023f5780631c39b67214620003b85780631ccc2cd114620003e05780632cfb7ca3146200041757600080fd5b806310a662e214620003685780631b142ea7146200039057600080fd5b8062f9731e14620002915780630787484b14620002d65780630a54257d14620002fe5780631047fc521462000326575b600080fd5b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620005077f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001620002cd565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b6200060a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001620002cd565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620007ea620007e436600462002848565b6200088c565b005b6200034e7f000000000000000000000000000000000000000000000000000000000000000081565b620002b97f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b620004087f000000000000000000000000000000000000000000000000000000000000000081565b6200089662001168565b6000620008a2620015d9565b905060007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051620008f690620025e2565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000939573d6000803e3d6000fd5b50905060006040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b279190620028f3565b6001600160a01b0316815250905060008360405160200162000b4a919062002bea565b604051602081830303815290604052805190602001209050600062000b9c826040518060200162000b7b90620025f0565b6020820181038252601f19601f820116604052508051906020012062001c65565b905062000ba98162001cef565b836001600160a01b0316631a72d54c827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008961014001518a61016001518b61018001518c602001517f00000000000000000000000000000000000000000000000000000000000000008e61020001518f61010001516040518b63ffffffff1660e01b815260040162000c669a9998979695949392919062002bff565b600060405180830381600087803b15801562000c8157600080fd5b505af115801562000c96573d6000803e3d6000fd5b5050505060008260405162000cab90620025f0565b8190604051809103906000f590508015801562000ccc573d6000803e3d6000fd5b509050816001600160a01b0316816001600160a01b03161462000d365760405162461bcd60e51b815260206004820152601560248201527f554e455850435445445f524f4c4c55505f41444452000000000000000000000060448201526064015b60405180910390fd5b608086018051309091526040517f8c2880910000000000000000000000000000000000000000000000000000000081526001600160a01b03831690638c2880919062000d89908a90899060040162002c7c565b600060405180830381600087803b15801562000da457600080fd5b505af115801562000db9573d6000803e3d6000fd5b50505050875160001462000fe6576000885167ffffffffffffffff81111562000de65762000de66200276b565b60405190808252806020026020018201604052801562000e10578160200160208202803683370190505b50905060005b895181101562000f66577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663facd743b8b838151811062000e645762000e6462002d62565b60200260200101516040518263ffffffff1660e01b815260040162000e9891906001600160a01b0391909116815260200190565b602060405180830381865afa15801562000eb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000edc919062002d8e565b62000f2a5760405162461bcd60e51b815260206004820152601860248201527f554e45585045435445445f4e45575f56414c494441544f520000000000000000604482015260640162000d2d565b600182828151811062000f415762000f4162002d62565b911515602092830291909101909101528062000f5d8162002dc2565b91505062000e16565b506040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a3ffb7729062000fb0908c90859060040162002e38565b600060405180830381600087803b15801562000fcb57600080fd5b505af115801562000fe0573d6000803e3d6000fd5b50505050505b7f000000000000000000000000000000000000000000000000000000000000000015620010a4576040517fa2b4f1d80000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000151560048201526001600160a01b0383169063a2b4f1d890602401600060405180830381600087803b1580156200108a57600080fd5b505af11580156200109f573d6000803e3d6000fd5b505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528316906313af403590602401600060405180830381600087803b1580156200110157600080fd5b505af115801562001116573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528a1660208201527f7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314935001905060405180910390a15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011c457600080fd5b505af1158015620011d9573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200123e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001264919062002eae565b905060328167ffffffffffffffff1611156200127e575060325b60005b8167ffffffffffffffff168167ffffffffffffffff1610156200151f576040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa15801562001329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200134f9190620028f3565b6040517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015620013d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fb919062002ecc565b9050806080015180156200141b5750606081015167ffffffffffffffff16155b1562001507576040805160018082528183019092526000916020808301908036833701905050905082816000815181106200145a576200145a62002d62565b6001600160a01b0392831660209182029290920101526040517f7c75c2980000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090911690637c75c29890620014d190849060040162002f5f565b600060405180830381600087803b158015620014ec57600080fd5b505af115801562001501573d6000803e3d6000fd5b50505050505b50508080620015169062002f74565b91505062001281565b506040517f0d40a0fd0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690630d40a0fd90602401600060405180830381600087803b158015620015bd57600080fd5b505af1158015620015d2573d6000803e3d6000fd5b5050505050565b620015e3620025fe565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166392c8134c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001699919062002eae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff909116600482015260240161018060405180830381865afa158015620016f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200171e919062002f9e565b516040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081526004810182905290915060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638eaa6ac09060240160c060405180830381865afa158015620017a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017cc9190620030f2565b91509150620017da620026e3565b82518152602080840151908201906002811115620017fc57620017fc62002a00565b9081600281111562001812576200181262002a00565b905250836001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663316441306200185084620025a2565b856040518363ffffffff1660e01b815260040162001870929190620031c3565b602060405180830381865afa1580156200188e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018b49190620031fa565b14620019035760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206c617465737420657865637574696f6e2068617368000000604482015260640162000d2d565b6200192f6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518061024001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001a1f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a459190620031fa565b8152602001306001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000081526020016040518060200160405280600081525081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b0ec2ae16040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001b22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b4c919081019062003214565b81526020018281526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000081526020018381526020018481526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000060ff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168152509550505050505090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b9392505050565b6040516310270e3d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008181166004840152916000917f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa15801562001d7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001da19190620028f3565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639623609d837f000000000000000000000000000000000000000000000000000000000000000063919cc70660e01b8760405160240162001e1d91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825262001e93939291600401620032a3565b600060405180830381600087803b15801562001eae57600080fd5b505af115801562001ec3573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b15801562001f3357600080fd5b505af115801562001f48573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa15801562001fd8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ffe9190620028f3565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166335738f8960e11b1790529151639623609d60e01b81529293506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692639623609d92620020ac9287927f00000000000000000000000000000000000000000000000000000000000000009201620032a3565b600060405180830381600087803b158015620020c757600080fd5b505af1158015620020dc573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b1580156200214c57600080fd5b505af115801562002161573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa158015620021f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022179190620028f3565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166335738f8960e11b1790529151639623609d60e01b81529293506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692639623609d92620022c59287927f00000000000000000000000000000000000000000000000000000000000000009201620032a3565b600060405180830381600087803b158015620022e057600080fd5b505af1158015620022f5573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b1580156200236557600080fd5b505af11580156200237a573d6000803e3d6000fd5b50506040516310270e3d60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811660048401529350600092507f0000000000000000000000000000000000000000000000000000000000000000169063204e1c7a90602401602060405180830381865afa1580156200240a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024309190620028f3565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166335738f8960e11b1790529151639623609d60e01b81529293506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692639623609d92620024de9287927f00000000000000000000000000000000000000000000000000000000000000009201620032a3565b600060405180830381600087803b158015620024f957600080fd5b505af11580156200250e573d6000803e3d6000fd5b505060405163266a23b160e21b81526001600160a01b03858116600483015284811660248301527f00000000000000000000000000000000000000000000000000000000000000001692506399a88ec49150604401600060405180830381600087803b1580156200257e57600080fd5b505af115801562002593573d6000803e3d6000fd5b50505050505050505050505050565b620025ac6200270c565b60405180604001604052808360000151815260200183602001516002811115620025da57620025da62002a00565b905292915050565b610ed380620032db83390190565b61137f80620041ae83390190565b604051806102400160405280600067ffffffffffffffff16815260200160006001600160a01b03168152602001600081526020016000801916815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016200269d6040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001620026c1620026e3565b8152600060208201819052604082018190526060820181905260809091015290565b6040518060600160405280620026f86200272e565b815260200160008152600060209091015290565b6040518060400160405280620027216200272e565b815260200160005b905290565b6040518060400160405280620027436200274d565b8152602001620027295b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715620027a857620027a86200276b565b60405290565b6040805190810167ffffffffffffffff81118282101715620027a857620027a86200276b565b604051601f8201601f1916810167ffffffffffffffff811182821017156200280057620028006200276b565b604052919050565b600067ffffffffffffffff8211156200282557620028256200276b565b5060051b60200190565b6001600160a01b03811681146200284557600080fd5b50565b600060208083850312156200285c57600080fd5b823567ffffffffffffffff8111156200287457600080fd5b8301601f810185136200288657600080fd5b80356200289d620028978262002808565b620027d4565b81815260059190911b82018301908381019087831115620028bd57600080fd5b928401925b82841015620028e8578335620028d8816200282f565b82529284019290840190620028c2565b979650505050505050565b6000602082840312156200290657600080fd5b815162001ce8816200282f565b6000815180845260005b818110156200293b576020818501810151868301820152016200291d565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b838110156200298d578151875295820195908201906001016200296f565b509495945050505050565b80518260005b6002811015620029bf5782518252602092830192909101906001016200299e565b5050506020808201516040840160005b6002811015620029f857825167ffffffffffffffff1682529183019190830190600101620029cf565b505050505050565b634e487b7160e01b600052602160045260246000fd5b6003811062002a3557634e487b7160e01b600052602160045260246000fd5b9052565b62002a4682825162002998565b602081015162002a5a608084018262002a16565b506040015160a09190910152565b805167ffffffffffffffff1682526000610340602083015162002a9660208601826001600160a01b03169052565b506040830151604085015260608301516060850152608083015162002ac660808601826001600160a01b03169052565b5060a083015162002ae260a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e086015262002b068286018262002913565b915050610100808401518583038287015262002b2383826200295b565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e08381890152828701519350610200925062002ba18389018562002a39565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff81166103208601525b509392505050565b60208152600062001ce8602083018462002a68565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff85166101008401528061012084015262002c6b818401856200295b565b9d9c50505050505050505050505050565b600061014080835262002c928184018662002a68565b9150506001600160a01b038351166020830152602083015162002cc060408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e083015161010062002d47818501836001600160a01b03169052565b8401516001600160a01b038116610120850152905062002be2565b634e487b7160e01b600052603260045260246000fd5b8051801515811462002d8957600080fd5b919050565b60006020828403121562002da157600080fd5b62001ce88262002d78565b634e487b7160e01b600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002df65762002df662002dac565b5060010190565b600081518084526020808501945080840160005b838110156200298d5781516001600160a01b03168752958201959082019060010162002e11565b60408152600062002e4d604083018562002dfd565b82810360208481019190915284518083528582019282019060005b8181101562002e8857845115158352938301939183019160010162002e68565b5090979650505050505050565b805167ffffffffffffffff8116811462002d8957600080fd5b60006020828403121562002ec157600080fd5b62001ce88262002e95565b600060a0828403121562002edf57600080fd5b60405160a0810181811067ffffffffffffffff8211171562002f055762002f056200276b565b6040528251815262002f1a6020840162002e95565b602082015262002f2d6040840162002e95565b604082015262002f406060840162002e95565b606082015262002f536080840162002d78565b60808201529392505050565b60208152600062001ce8602083018462002dfd565b600067ffffffffffffffff80831681810362002f945762002f9462002dac565b6001019392505050565b6000610180828403121562002fb257600080fd5b62002fbc62002781565b82518152602083015160208201526040830151604082015262002fe26060840162002e95565b606082015262002ff56080840162002e95565b60808201526200300860a0840162002e95565b60a08201526200301b60c0840162002e95565b60c08201526200302e60e0840162002e95565b60e08201526101006200304381850162002e95565b908201526101206200305784820162002e95565b908201526101406200306b84820162002e95565b90820152610160928301519281019290925250919050565b600082601f8301126200309557600080fd5b6200309f620027ae565b806040840185811115620030b257600080fd5b845b81811015620030d757620030c88162002e95565b845260209384019301620030b4565b509095945050505050565b80516003811062002d8957600080fd5b60008082840360c08112156200310757600080fd5b60a08112156200311657600080fd5b62003120620027ae565b60808212156200312f57600080fd5b62003139620027ae565b915085601f8601126200314b57600080fd5b62003155620027ae565b8060408701888111156200316857600080fd5b875b81811015620031845780518452602093840193016200316a565b5081855262003194898262003083565b6020860152505050818152620031ad60808601620030e2565b602082015260a094909401519395939450505050565b600060c082019050620031d882855162002998565b6020840151620031ec608084018262002a16565b508260a08301529392505050565b6000602082840312156200320d57600080fd5b5051919050565b600060208083850312156200322857600080fd5b825167ffffffffffffffff8111156200324057600080fd5b8301601f810185136200325257600080fd5b805162003263620028978262002808565b81815260059190911b820183019083810190878311156200328357600080fd5b928401925b82841015620028e85783518252928401929084019062003288565b60006001600160a01b03808616835280851660208401525060606040830152620032d1606083018462002913565b9594505050505056fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122075dc18f0530f8604f75617173aef54eff4273ea9c9948c2ae06433e9db2a06dc64736f6c63430008110033a2646970667358221220944587ee4aa6378fe08c434dbdfedcab5d90786c1efaac2dd3a119b4f76bf37e64736f6c63430008110033608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea26469706673582212200d751c0c25a70581427a46e77b10aba2478daec5efbdf3c923f5fc2aa2fcd7ca64736f6c6343000811003360a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea264697066735822122079c9e0981fcc52051d716a6a035fb63d6568479a0dc3d17d6cabeebef346cc3d64736f6c63430008110033608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea2646970667358221220c5ce6fa0f504bc6a45064e5ddfe4323d9979fa8f7ed56f99dd0243bbe6af6c0664736f6c63430008110033", +// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// +// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) DISABLEVALIDATORWHITELIST() (bool, error) { + return _BOLDUpgradeAction.Contract.DISABLEVALIDATORWHITELIST(&_BOLDUpgradeAction.CallOpts) } -// BOLDUpgradeActionABI is the input ABI used to generate the binding from. -// Deprecated: Use BOLDUpgradeActionMetaData.ABI instead. -var BOLDUpgradeActionABI = BOLDUpgradeActionMetaData.ABI +// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// +// Solidity: function IMPL_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_BRIDGE") -// BOLDUpgradeActionBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use BOLDUpgradeActionMetaData.Bin instead. -var BOLDUpgradeActionBin = BOLDUpgradeActionMetaData.Bin + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// +// Solidity: function IMPL_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLBRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLBRIDGE(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// +// Solidity: function IMPL_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLBRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLBRIDGE(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// +// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLCHALLENGEMANAGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_CHALLENGE_MANAGER") -// DeployBOLDUpgradeAction deploys a new Ethereum contract, binding an instance of BOLDUpgradeAction to it. -func DeployBOLDUpgradeAction(auth *bind.TransactOpts, backend bind.ContractBackend, contracts BOLDUpgradeActionContracts, proxyAdmins BOLDUpgradeActionProxyAdmins, implementations BOLDUpgradeActionImplementations, settings BOLDUpgradeActionSettings) (common.Address, *types.Transaction, *BOLDUpgradeAction, error) { - parsed, err := BOLDUpgradeActionMetaData.GetAbi() if err != nil { - return common.Address{}, nil, nil, err + return *new(common.Address), err } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// +// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLCHALLENGEMANAGER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLCHALLENGEMANAGER(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// +// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLCHALLENGEMANAGER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLCHALLENGEMANAGER(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// +// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPADMIN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_NEW_ROLLUP_ADMIN") + + if err != nil { + return *new(common.Address), err } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BOLDUpgradeActionBin), backend, contracts, proxyAdmins, implementations, settings) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// +// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLNEWROLLUPADMIN() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPADMIN(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// +// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLNEWROLLUPADMIN() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPADMIN(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. +// +// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPUSER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_NEW_ROLLUP_USER") + if err != nil { - return common.Address{}, nil, nil, err + return *new(common.Address), err } - return address, tx, &BOLDUpgradeAction{BOLDUpgradeActionCaller: BOLDUpgradeActionCaller{contract: contract}, BOLDUpgradeActionTransactor: BOLDUpgradeActionTransactor{contract: contract}, BOLDUpgradeActionFilterer: BOLDUpgradeActionFilterer{contract: contract}}, nil + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + } -// BOLDUpgradeAction is an auto generated Go binding around an Ethereum contract. -type BOLDUpgradeAction struct { - BOLDUpgradeActionCaller // Read-only binding to the contract - BOLDUpgradeActionTransactor // Write-only binding to the contract - BOLDUpgradeActionFilterer // Log filterer for contract events +// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. +// +// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLNEWROLLUPUSER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. +// +// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLNEWROLLUPUSER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// +// Solidity: function IMPL_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLOUTBOX(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_OUTBOX") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// +// Solidity: function IMPL_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLOUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLOUTBOX(&_BOLDUpgradeAction.CallOpts) +} + +// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// +// Solidity: function IMPL_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLOUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLOUTBOX(&_BOLDUpgradeAction.CallOpts) } -// BOLDUpgradeActionCaller is an auto generated read-only Go binding around an Ethereum contract. -type BOLDUpgradeActionCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// +// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLPATCHEDOLDROLLUPUSER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_PATCHED_OLD_ROLLUP_USER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + } -// BOLDUpgradeActionTransactor is an auto generated write-only Go binding around an Ethereum contract. -type BOLDUpgradeActionTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// +// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLPATCHEDOLDROLLUPUSER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLPATCHEDOLDROLLUPUSER(&_BOLDUpgradeAction.CallOpts) } -// BOLDUpgradeActionFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type BOLDUpgradeActionFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls +// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// +// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLPATCHEDOLDROLLUPUSER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLPATCHEDOLDROLLUPUSER(&_BOLDUpgradeAction.CallOpts) } -// BOLDUpgradeActionSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type BOLDUpgradeActionSession struct { - Contract *BOLDUpgradeAction // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} +// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// +// Solidity: function IMPL_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLREI(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_REI") -// BOLDUpgradeActionCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type BOLDUpgradeActionCallerSession struct { - Contract *BOLDUpgradeActionCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} + if err != nil { + return *new(common.Address), err + } -// BOLDUpgradeActionTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type BOLDUpgradeActionTransactorSession struct { - Contract *BOLDUpgradeActionTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -// BOLDUpgradeActionRaw is an auto generated low-level Go binding around an Ethereum contract. -type BOLDUpgradeActionRaw struct { - Contract *BOLDUpgradeAction // Generic contract binding to access the raw methods on -} + return out0, err -// BOLDUpgradeActionCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type BOLDUpgradeActionCallerRaw struct { - Contract *BOLDUpgradeActionCaller // Generic read-only contract binding to access the raw methods on } -// BOLDUpgradeActionTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type BOLDUpgradeActionTransactorRaw struct { - Contract *BOLDUpgradeActionTransactor // Generic write-only contract binding to access the raw methods on +// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// +// Solidity: function IMPL_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLREI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLREI(&_BOLDUpgradeAction.CallOpts) } -// NewBOLDUpgradeAction creates a new instance of BOLDUpgradeAction, bound to a specific deployed contract. -func NewBOLDUpgradeAction(address common.Address, backend bind.ContractBackend) (*BOLDUpgradeAction, error) { - contract, err := bindBOLDUpgradeAction(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &BOLDUpgradeAction{BOLDUpgradeActionCaller: BOLDUpgradeActionCaller{contract: contract}, BOLDUpgradeActionTransactor: BOLDUpgradeActionTransactor{contract: contract}, BOLDUpgradeActionFilterer: BOLDUpgradeActionFilterer{contract: contract}}, nil +// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// +// Solidity: function IMPL_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLREI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLREI(&_BOLDUpgradeAction.CallOpts) } -// NewBOLDUpgradeActionCaller creates a new read-only instance of BOLDUpgradeAction, bound to a specific deployed contract. -func NewBOLDUpgradeActionCaller(address common.Address, caller bind.ContractCaller) (*BOLDUpgradeActionCaller, error) { - contract, err := bindBOLDUpgradeAction(address, caller, nil, nil) +// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// +// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLSEQUENCERINBOX(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_SEQUENCER_INBOX") + if err != nil { - return nil, err + return *new(common.Address), err } - return &BOLDUpgradeActionCaller{contract: contract}, nil + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + } -// NewBOLDUpgradeActionTransactor creates a new write-only instance of BOLDUpgradeAction, bound to a specific deployed contract. -func NewBOLDUpgradeActionTransactor(address common.Address, transactor bind.ContractTransactor) (*BOLDUpgradeActionTransactor, error) { - contract, err := bindBOLDUpgradeAction(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &BOLDUpgradeActionTransactor{contract: contract}, nil +// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// +// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLSEQUENCERINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) } -// NewBOLDUpgradeActionFilterer creates a new log filterer instance of BOLDUpgradeAction, bound to a specific deployed contract. -func NewBOLDUpgradeActionFilterer(address common.Address, filterer bind.ContractFilterer) (*BOLDUpgradeActionFilterer, error) { - contract, err := bindBOLDUpgradeAction(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &BOLDUpgradeActionFilterer{contract: contract}, nil +// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// +// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLSEQUENCERINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.IMPLSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) } -// bindBOLDUpgradeAction binds a generic wrapper to an already deployed contract. -func bindBOLDUpgradeAction(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := BOLDUpgradeActionMetaData.GetAbi() +// INBOX is a free data retrieval call binding the contract method 0xb7010697. +// +// Solidity: function INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) INBOX(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BOLDUpgradeAction.contract.Call(opts, &out, "INBOX") + if err != nil { - return nil, err + return *new(common.Address), err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BOLDUpgradeAction.Contract.BOLDUpgradeActionCaller.contract.Call(opts, result, method, params...) -} -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.BOLDUpgradeActionTransactor.contract.Transfer(opts) -} + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -// Transact invokes the (paid) contract method with params as input values. -func (_BOLDUpgradeAction *BOLDUpgradeActionRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.BOLDUpgradeActionTransactor.contract.Transact(opts, method, params...) -} + return out0, err -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BOLDUpgradeAction.Contract.contract.Call(opts, result, method, params...) } -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.contract.Transfer(opts) +// INBOX is a free data retrieval call binding the contract method 0xb7010697. +// +// Solidity: function INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) INBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.INBOX(&_BOLDUpgradeAction.CallOpts) } -// Transact invokes the (paid) contract method with params as input values. -func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.contract.Transact(opts, method, params...) +// INBOX is a free data retrieval call binding the contract method 0xb7010697. +// +// Solidity: function INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) INBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.INBOX(&_BOLDUpgradeAction.CallOpts) } -// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. // -// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) ANYTRUSTFASTCONFIRMER(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function L1_TIMELOCK() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) L1TIMELOCK(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "ANY_TRUST_FAST_CONFIRMER") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "L1_TIMELOCK") if err != nil { return *new(common.Address), err @@ -749,88 +1893,88 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) ANYTRUSTFASTCONFIRMER(opts *b } -// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. // -// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) ANYTRUSTFASTCONFIRMER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.ANYTRUSTFASTCONFIRMER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function L1_TIMELOCK() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) L1TIMELOCK() (common.Address, error) { + return _BOLDUpgradeAction.Contract.L1TIMELOCK(&_BOLDUpgradeAction.CallOpts) } -// ANYTRUSTFASTCONFIRMER is a free data retrieval call binding the contract method 0xd1da2c5c. +// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. // -// Solidity: function ANY_TRUST_FAST_CONFIRMER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) ANYTRUSTFASTCONFIRMER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.ANYTRUSTFASTCONFIRMER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function L1_TIMELOCK() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) L1TIMELOCK() (common.Address, error) { + return _BOLDUpgradeAction.Contract.L1TIMELOCK(&_BOLDUpgradeAction.CallOpts) } -// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. // -// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BIGSTEPLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) MINISTAKEAMOUNTSSTORAGE(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "BIGSTEP_LEAF_SIZE") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "MINI_STAKE_AMOUNTS_STORAGE") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. // -// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BIGSTEPLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.BIGSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) MINISTAKEAMOUNTSSTORAGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.MINISTAKEAMOUNTSSTORAGE(&_BOLDUpgradeAction.CallOpts) } -// BIGSTEPLEAFSIZE is a free data retrieval call binding the contract method 0x1ccc2cd1. +// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. // -// Solidity: function BIGSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BIGSTEPLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.BIGSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) MINISTAKEAMOUNTSSTORAGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.MINISTAKEAMOUNTSSTORAGE(&_BOLDUpgradeAction.CallOpts) } -// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. // -// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BLOCKLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) NUMBIGSTEPLEVEL(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "BLOCK_LEAF_SIZE") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "NUM_BIGSTEP_LEVEL") if err != nil { - return *new(*big.Int), err + return *new(uint8), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) return out0, err } -// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. // -// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BLOCKLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.BLOCKLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) NUMBIGSTEPLEVEL() (uint8, error) { + return _BOLDUpgradeAction.Contract.NUMBIGSTEPLEVEL(&_BOLDUpgradeAction.CallOpts) } -// BLOCKLEAFSIZE is a free data retrieval call binding the contract method 0x609fb503. +// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. // -// Solidity: function BLOCK_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BLOCKLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.BLOCKLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) NUMBIGSTEPLEVEL() (uint8, error) { + return _BOLDUpgradeAction.Contract.NUMBIGSTEPLEVEL(&_BOLDUpgradeAction.CallOpts) } -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. // -// Solidity: function BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function OLD_ROLLUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OLDROLLUP(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "BRIDGE") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "OLD_ROLLUP") if err != nil { return *new(common.Address), err @@ -842,181 +1986,181 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) BRIDGE(opts *bind.CallOpts) ( } -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. // -// Solidity: function BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) BRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.BRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OLD_ROLLUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OLDROLLUP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OLDROLLUP(&_BOLDUpgradeAction.CallOpts) } -// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. // -// Solidity: function BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) BRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.BRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OLD_ROLLUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OLDROLLUP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OLDROLLUP(&_BOLDUpgradeAction.CallOpts) } -// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// OSP is a free data retrieval call binding the contract method 0x9f9854e5. // -// Solidity: function CHAIN_ID() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHAINID(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function OSP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OSP(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHAIN_ID") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "OSP") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// OSP is a free data retrieval call binding the contract method 0x9f9854e5. // -// Solidity: function CHAIN_ID() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHAINID() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.CHAINID(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OSP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OSP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OSP(&_BOLDUpgradeAction.CallOpts) } -// CHAINID is a free data retrieval call binding the contract method 0x85e1f4d0. +// OSP is a free data retrieval call binding the contract method 0x9f9854e5. // -// Solidity: function CHAIN_ID() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHAINID() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.CHAINID(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OSP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OSP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OSP(&_BOLDUpgradeAction.CallOpts) } -// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. // -// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHALLENGEGRACEPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { +// Solidity: function OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OUTBOX(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHALLENGE_GRACE_PERIOD_BLOCKS") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "OUTBOX") if err != nil { - return *new(uint64), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. // -// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHALLENGEGRACEPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CHALLENGEGRACEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OUTBOX(&_BOLDUpgradeAction.CallOpts) } -// CHALLENGEGRACEPERIODBLOCKS is a free data retrieval call binding the contract method 0xec4f74ce. +// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. // -// Solidity: function CHALLENGE_GRACE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHALLENGEGRACEPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CHALLENGEGRACEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.OUTBOX(&_BOLDUpgradeAction.CallOpts) } -// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. // -// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CHALLENGEPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { +// Solidity: function PREIMAGE_LOOKUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PREIMAGELOOKUP(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "CHALLENGE_PERIOD_BLOCKS") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "PREIMAGE_LOOKUP") if err != nil { - return *new(uint64), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. // -// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CHALLENGEPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CHALLENGEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PREIMAGE_LOOKUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PREIMAGELOOKUP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PREIMAGELOOKUP(&_BOLDUpgradeAction.CallOpts) } -// CHALLENGEPERIODBLOCKS is a free data retrieval call binding the contract method 0x91ddb285. +// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. // -// Solidity: function CHALLENGE_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CHALLENGEPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CHALLENGEPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PREIMAGE_LOOKUP() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PREIMAGELOOKUP() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PREIMAGELOOKUP(&_BOLDUpgradeAction.CallOpts) } -// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. // -// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) CONFIRMPERIODBLOCKS(opts *bind.CallOpts) (uint64, error) { +// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINBRIDGE(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "CONFIRM_PERIOD_BLOCKS") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_BRIDGE") if err != nil { - return *new(uint64), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. // -// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) CONFIRMPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CONFIRMPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINBRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINBRIDGE(&_BOLDUpgradeAction.CallOpts) } -// CONFIRMPERIODBLOCKS is a free data retrieval call binding the contract method 0x1047fc52. +// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. // -// Solidity: function CONFIRM_PERIOD_BLOCKS() view returns(uint64) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) CONFIRMPERIODBLOCKS() (uint64, error) { - return _BOLDUpgradeAction.Contract.CONFIRMPERIODBLOCKS(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINBRIDGE() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINBRIDGE(&_BOLDUpgradeAction.CallOpts) } -// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. // -// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) DISABLEVALIDATORWHITELIST(opts *bind.CallOpts) (bool, error) { +// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINOUTBOX(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "DISABLE_VALIDATOR_WHITELIST") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_OUTBOX") if err != nil { - return *new(bool), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. // -// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) DISABLEVALIDATORWHITELIST() (bool, error) { - return _BOLDUpgradeAction.Contract.DISABLEVALIDATORWHITELIST(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINOUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINOUTBOX(&_BOLDUpgradeAction.CallOpts) } -// DISABLEVALIDATORWHITELIST is a free data retrieval call binding the contract method 0xb38d57f0. +// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. // -// Solidity: function DISABLE_VALIDATOR_WHITELIST() view returns(bool) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) DISABLEVALIDATORWHITELIST() (bool, error) { - return _BOLDUpgradeAction.Contract.DISABLEVALIDATORWHITELIST(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINOUTBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINOUTBOX(&_BOLDUpgradeAction.CallOpts) } -// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. // -// Solidity: function IMPL_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLBRIDGE(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function PROXY_ADMIN_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINREI(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_BRIDGE") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_REI") if err != nil { return *new(common.Address), err @@ -1028,26 +2172,26 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLBRIDGE(opts *bind.CallOpt } -// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. // -// Solidity: function IMPL_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLBRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLBRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINREI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINREI(&_BOLDUpgradeAction.CallOpts) } -// IMPLBRIDGE is a free data retrieval call binding the contract method 0xdae7cb8b. +// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. // -// Solidity: function IMPL_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLBRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLBRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINREI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINREI(&_BOLDUpgradeAction.CallOpts) } -// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. // -// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLCHALLENGEMANAGER(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINSEQUENCERINBOX(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_CHALLENGE_MANAGER") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_SEQUENCER_INBOX") if err != nil { return *new(common.Address), err @@ -1059,26 +2203,26 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLCHALLENGEMANAGER(opts *bi } -// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. // -// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLCHALLENGEMANAGER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLCHALLENGEMANAGER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINSEQUENCERINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) } -// IMPLCHALLENGEMANAGER is a free data retrieval call binding the contract method 0x10a662e2. +// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. // -// Solidity: function IMPL_CHALLENGE_MANAGER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLCHALLENGEMANAGER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLCHALLENGEMANAGER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINSEQUENCERINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.PROXYADMINSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) } -// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// REI is a free data retrieval call binding the contract method 0xbe41b367. // -// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPADMIN(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) REI(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_NEW_ROLLUP_ADMIN") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "REI") if err != nil { return *new(common.Address), err @@ -1090,26 +2234,26 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPADMIN(opts *bind } -// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// REI is a free data retrieval call binding the contract method 0xbe41b367. // -// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLNEWROLLUPADMIN() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPADMIN(&_BOLDUpgradeAction.CallOpts) +// Solidity: function REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) REI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.REI(&_BOLDUpgradeAction.CallOpts) } -// IMPLNEWROLLUPADMIN is a free data retrieval call binding the contract method 0x00f9731e. +// REI is a free data retrieval call binding the contract method 0xbe41b367. // -// Solidity: function IMPL_NEW_ROLLUP_ADMIN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLNEWROLLUPADMIN() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPADMIN(&_BOLDUpgradeAction.CallOpts) +// Solidity: function REI() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) REI() (common.Address, error) { + return _BOLDUpgradeAction.Contract.REI(&_BOLDUpgradeAction.CallOpts) } -// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. +// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. // -// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPUSER(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ROLLUP_READER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) ROLLUPREADER(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_NEW_ROLLUP_USER") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "ROLLUP_READER") if err != nil { return *new(common.Address), err @@ -1121,26 +2265,26 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLNEWROLLUPUSER(opts *bind. } -// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. +// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. // -// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLNEWROLLUPUSER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function ROLLUP_READER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) ROLLUPREADER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.ROLLUPREADER(&_BOLDUpgradeAction.CallOpts) } -// IMPLNEWROLLUPUSER is a free data retrieval call binding the contract method 0x4692de5d. -// -// Solidity: function IMPL_NEW_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLNEWROLLUPUSER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLNEWROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. +// +// Solidity: function ROLLUP_READER() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) ROLLUPREADER() (common.Address, error) { + return _BOLDUpgradeAction.Contract.ROLLUPREADER(&_BOLDUpgradeAction.CallOpts) } -// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. // -// Solidity: function IMPL_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLOUTBOX(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function SEQ_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) SEQINBOX(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_OUTBOX") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "SEQ_INBOX") if err != nil { return *new(common.Address), err @@ -1152,88 +2296,88 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLOUTBOX(opts *bind.CallOpt } -// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. // -// Solidity: function IMPL_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLOUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLOUTBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function SEQ_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) SEQINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.SEQINBOX(&_BOLDUpgradeAction.CallOpts) } -// IMPLOUTBOX is a free data retrieval call binding the contract method 0xc897f55e. +// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. // -// Solidity: function IMPL_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLOUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLOUTBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function SEQ_INBOX() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) SEQINBOX() (common.Address, error) { + return _BOLDUpgradeAction.Contract.SEQINBOX(&_BOLDUpgradeAction.CallOpts) } -// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. // -// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLPATCHEDOLDROLLUPUSER(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) SMALLSTEPLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_PATCHED_OLD_ROLLUP_USER") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "SMALLSTEP_LEAF_SIZE") if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. // -// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLPATCHEDOLDROLLUPUSER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLPATCHEDOLDROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) SMALLSTEPLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.SMALLSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) } -// IMPLPATCHEDOLDROLLUPUSER is a free data retrieval call binding the contract method 0x2db93bdc. +// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. // -// Solidity: function IMPL_PATCHED_OLD_ROLLUP_USER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLPATCHEDOLDROLLUPUSER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLPATCHEDOLDROLLUPUSER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) SMALLSTEPLEAFSIZE() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.SMALLSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) } -// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. // -// Solidity: function IMPL_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLREI(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function STAKE_AMOUNT() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) STAKEAMOUNT(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_REI") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "STAKE_AMOUNT") if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. // -// Solidity: function IMPL_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLREI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLREI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function STAKE_AMOUNT() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) STAKEAMOUNT() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.STAKEAMOUNT(&_BOLDUpgradeAction.CallOpts) } -// IMPLREI is a free data retrieval call binding the contract method 0xc21c4233. +// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. // -// Solidity: function IMPL_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLREI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLREI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function STAKE_AMOUNT() view returns(uint256) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) STAKEAMOUNT() (*big.Int, error) { + return _BOLDUpgradeAction.Contract.STAKEAMOUNT(&_BOLDUpgradeAction.CallOpts) } -// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. // -// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLSEQUENCERINBOX(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function STAKE_TOKEN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) STAKETOKEN(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "IMPL_SEQUENCER_INBOX") + err := _BOLDUpgradeAction.contract.Call(opts, &out, "STAKE_TOKEN") if err != nil { return *new(common.Address), err @@ -1245,305 +2389,475 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) IMPLSEQUENCERINBOX(opts *bind } -// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. // -// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) IMPLSEQUENCERINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function STAKE_TOKEN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) STAKETOKEN() (common.Address, error) { + return _BOLDUpgradeAction.Contract.STAKETOKEN(&_BOLDUpgradeAction.CallOpts) } -// IMPLSEQUENCERINBOX is a free data retrieval call binding the contract method 0xc519d151. +// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. // -// Solidity: function IMPL_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) IMPLSEQUENCERINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.IMPLSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function STAKE_TOKEN() view returns(address) +func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) STAKETOKEN() (common.Address, error) { + return _BOLDUpgradeAction.Contract.STAKETOKEN(&_BOLDUpgradeAction.CallOpts) } -// INBOX is a free data retrieval call binding the contract method 0xb7010697. +// Perform is a paid mutator transaction binding the contract method 0xebe03a93. // -// Solidity: function INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) INBOX(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "INBOX") +// Solidity: function perform(address[] validators) returns() +func (_BOLDUpgradeAction *BOLDUpgradeActionTransactor) Perform(opts *bind.TransactOpts, validators []common.Address) (*types.Transaction, error) { + return _BOLDUpgradeAction.contract.Transact(opts, "perform", validators) +} - if err != nil { - return *new(common.Address), err +// Perform is a paid mutator transaction binding the contract method 0xebe03a93. +// +// Solidity: function perform(address[] validators) returns() +func (_BOLDUpgradeAction *BOLDUpgradeActionSession) Perform(validators []common.Address) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.Perform(&_BOLDUpgradeAction.TransactOpts, validators) +} + +// Perform is a paid mutator transaction binding the contract method 0xebe03a93. +// +// Solidity: function perform(address[] validators) returns() +func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorSession) Perform(validators []common.Address) (*types.Transaction, error) { + return _BOLDUpgradeAction.Contract.Perform(&_BOLDUpgradeAction.TransactOpts, validators) +} + +// BOLDUpgradeActionRollupMigratedIterator is returned from FilterRollupMigrated and is used to iterate over the raw logs and unpacked data for RollupMigrated events raised by the BOLDUpgradeAction contract. +type BOLDUpgradeActionRollupMigratedIterator struct { + Event *BOLDUpgradeActionRollupMigrated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BOLDUpgradeActionRollupMigratedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BOLDUpgradeActionRollupMigrated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BOLDUpgradeActionRollupMigrated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - return out0, err + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BOLDUpgradeActionRollupMigratedIterator) Error() error { + return it.fail } -// INBOX is a free data retrieval call binding the contract method 0xb7010697. -// -// Solidity: function INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) INBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.INBOX(&_BOLDUpgradeAction.CallOpts) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BOLDUpgradeActionRollupMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// INBOX is a free data retrieval call binding the contract method 0xb7010697. -// -// Solidity: function INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) INBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.INBOX(&_BOLDUpgradeAction.CallOpts) +// BOLDUpgradeActionRollupMigrated represents a RollupMigrated event raised by the BOLDUpgradeAction contract. +type BOLDUpgradeActionRollupMigrated struct { + Rollup common.Address + ChallengeManager common.Address + Raw types.Log // Blockchain specific contextual infos } -// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. +// FilterRollupMigrated is a free log retrieval operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. // -// Solidity: function L1_TIMELOCK() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) L1TIMELOCK(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "L1_TIMELOCK") +// Solidity: event RollupMigrated(address rollup, address challengeManager) +func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) FilterRollupMigrated(opts *bind.FilterOpts) (*BOLDUpgradeActionRollupMigratedIterator, error) { + logs, sub, err := _BOLDUpgradeAction.contract.FilterLogs(opts, "RollupMigrated") if err != nil { - return *new(common.Address), err + return nil, err } + return &BOLDUpgradeActionRollupMigratedIterator{contract: _BOLDUpgradeAction.contract, event: "RollupMigrated", logs: logs, sub: sub}, nil +} - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) +// WatchRollupMigrated is a free log subscription operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. +// +// Solidity: event RollupMigrated(address rollup, address challengeManager) +func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) WatchRollupMigrated(opts *bind.WatchOpts, sink chan<- *BOLDUpgradeActionRollupMigrated) (event.Subscription, error) { - return out0, err + logs, sub, err := _BOLDUpgradeAction.contract.WatchLogs(opts, "RollupMigrated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BOLDUpgradeActionRollupMigrated) + if err := _BOLDUpgradeAction.contract.UnpackLog(event, "RollupMigrated", log); err != nil { + return err + } + event.Raw = log + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. +// ParseRollupMigrated is a log parse operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. // -// Solidity: function L1_TIMELOCK() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) L1TIMELOCK() (common.Address, error) { - return _BOLDUpgradeAction.Contract.L1TIMELOCK(&_BOLDUpgradeAction.CallOpts) +// Solidity: event RollupMigrated(address rollup, address challengeManager) +func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) ParseRollupMigrated(log types.Log) (*BOLDUpgradeActionRollupMigrated, error) { + event := new(BOLDUpgradeActionRollupMigrated) + if err := _BOLDUpgradeAction.contract.UnpackLog(event, "RollupMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// L1TIMELOCK is a free data retrieval call binding the contract method 0xbf5e3d52. -// -// Solidity: function L1_TIMELOCK() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) L1TIMELOCK() (common.Address, error) { - return _BOLDUpgradeAction.Contract.L1TIMELOCK(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorMetaData contains all meta data concerning the BridgeCreator contract. +var BridgeCreatorMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"internalType\":\"structBridgeCreator.BridgeContracts\",\"name\":\"_ethBasedTemplates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"internalType\":\"structBridgeCreator.BridgeContracts\",\"name\":\"_erc20BasedTemplates\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ERC20TemplatesUpdated\",\"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\":[],\"name\":\"TemplatesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation\",\"type\":\"tuple\"}],\"name\":\"createBridge\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"internalType\":\"structBridgeCreator.BridgeContracts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20BasedTemplates\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ethBasedTemplates\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"internalType\":\"structBridgeCreator.BridgeContracts\",\"name\":\"_newTemplates\",\"type\":\"tuple\"}],\"name\":\"updateERC20Templates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"}],\"internalType\":\"structBridgeCreator.BridgeContracts\",\"name\":\"_newTemplates\",\"type\":\"tuple\"}],\"name\":\"updateTemplates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001d9a38038062001d9a833981016040819052620000349162000241565b6200003f3362000116565b8151600180546001600160a01b03199081166001600160a01b03938416179091556020808501516002805484169185169190911790556040808601516003805485169186169190911790556060808701516004805486169187169190911790556080968701516005805486169187169190911790558551600680548616918716919091179055918501516007805485169186169190911790558401516008805484169185169190911790558301516009805483169184169190911790559190920151600a805490921692169190911790556200027c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017c57600080fd5b50565b80516200018c8162000166565b919050565b600060a08284031215620001a457600080fd5b60405160a081016001600160401b0381118282101715620001d557634e487b7160e01b600052604160045260246000fd5b80604052508091508251620001ea8162000166565b81526020830151620001fc8162000166565b60208201526200020f604084016200017f565b604082015262000222606084016200017f565b606082015262000235608084016200017f565b60808201525092915050565b60008061014083850312156200025657600080fd5b62000262848462000191565b9150620002738460a0850162000191565b90509250929050565b611b0e806200028c6000396000f3fe60806040523480156200001157600080fd5b5060043610620000935760003560e01c80638da5cb5b11620000625780638da5cb5b1462000154578063b4a5cc341462000170578063d94d6e0a14620001d7578063f2fde38b14620001ee57600080fd5b806311f0222714620000985780631bb7c6cc1462000104578063715018a6146200011d57806376768ab91462000127575b600080fd5b600154600254600354600454600554620000c5946001600160a01b03908116948116938116928116911685565b604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b6200011b6200011536600462000a01565b62000205565b005b6200011b6200024c565b600654600754600854600954600a54620000c5946001600160a01b03908116948116938116928116911685565b6000546040516001600160a01b039091168152602001620000fb565b620001876200018136600462000a30565b62000264565b604051620000fb919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6200011b620001e836600462000a01565b620005a8565b6200011b620001ff36600462000aba565b620005ef565b6200020f620006a3565b8060066200021e828262000ae1565b50506040517fa47434bb6d1ddd5521e8980ded6a783513e159f80437d78715b10e6e8b6bba5e90600090a150565b62000256620006a3565b62000262600062000719565b565b6040805160a081018252600080825260208201819052918101829052606081018290526080810182905290620002b4866001600160a01b03861615620002ac57600662000776565b600162000776565b90506001600160a01b0384166200032b57805160405163189acdbd60e31b81526001600160a01b0387811660048301529091169063c4d66de890602401600060405180830381600087803b1580156200030c57600080fd5b505af115801562000321573d6000803e3d6000fd5b50505050620003ad565b80516040517f485cc9550000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301529091169063485cc95590604401600060405180830381600087803b1580156200039357600080fd5b505af1158015620003a8573d6000803e3d6000fd5b505050505b6020818101518251604080517f1f7a92b20000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152873560248201529387013560448501528601356064840152606086013560848401521690631f7a92b29060a401600060405180830381600087803b1580156200043457600080fd5b505af115801562000449573d6000803e3d6000fd5b505050506040818101518251602084015192517f485cc9550000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529281166024840152169063485cc95590604401600060405180830381600087803b158015620004bd57600080fd5b505af1158015620004d2573d6000803e3d6000fd5b505050506060810151815160405163189acdbd60e31b81526001600160a01b03918216600482015291169063c4d66de890602401600060405180830381600087803b1580156200052157600080fd5b505af115801562000536573d6000803e3d6000fd5b505050506080810151815160405163189acdbd60e31b81526001600160a01b03918216600482015291169063c4d66de890602401600060405180830381600087803b1580156200058557600080fd5b505af11580156200059a573d6000803e3d6000fd5b509298975050505050505050565b620005b2620006a3565b806001620005c1828262000ae1565b50506040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a150565b620005f9620006a3565b6001600160a01b03811662000695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b620006a08162000719565b50565b6000546001600160a01b0316331462000262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200068c565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a08101825260008082526020820181905291810182905260608101829052608081019190915282546040516001600160a01b03909116908590620007ea90620009f3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200082d573d6000803e3d6000fd5b506001600160a01b039081168252600184015460405191169085906200085390620009f3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000896573d6000803e3d6000fd5b506001600160a01b03908116602083015260028401546040519116908590620008bf90620009f3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000902573d6000803e3d6000fd5b506001600160a01b039081166040808401919091526003850154905191169085906200092e90620009f3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000971573d6000803e3d6000fd5b506001600160a01b039081166060830152600484015460405191169085906200099a90620009f3565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620009dd573d6000803e3d6000fd5b506001600160a01b031660808201529392505050565b610ed38062000c0683390190565b600060a0828403121562000a1457600080fd5b50919050565b6001600160a01b0381168114620006a057600080fd5b60008060008084860360e081121562000a4857600080fd5b853562000a558162000a1a565b9450602086013562000a678162000a1a565b9350604086013562000a798162000a1a565b925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08201121562000aac57600080fd5b509295919450926060019150565b60006020828403121562000acd57600080fd5b813562000ada8162000a1a565b9392505050565b813562000aee8162000a1a565b815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03821617825550602082013562000b258162000a1a565b60018201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550604082013562000b608162000a1a565b60028201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550606082013562000b9b8162000a1a565b60038201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550608082013562000bd68162000a1a565b60048201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550505056fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eb37b299dd938dc9274621cd83ccddc5711e6a517b135259f3675ddaacabc0e864736f6c63430008110033", } -// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. -// -// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) MINISTAKEAMOUNTSSTORAGE(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "MINI_STAKE_AMOUNTS_STORAGE") +// BridgeCreatorABI is the input ABI used to generate the binding from. +// Deprecated: Use BridgeCreatorMetaData.ABI instead. +var BridgeCreatorABI = BridgeCreatorMetaData.ABI + +// BridgeCreatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BridgeCreatorMetaData.Bin instead. +var BridgeCreatorBin = BridgeCreatorMetaData.Bin +// DeployBridgeCreator deploys a new Ethereum contract, binding an instance of BridgeCreator to it. +func DeployBridgeCreator(auth *bind.TransactOpts, backend bind.ContractBackend, _ethBasedTemplates BridgeCreatorBridgeContracts, _erc20BasedTemplates BridgeCreatorBridgeContracts) (common.Address, *types.Transaction, *BridgeCreator, error) { + parsed, err := BridgeCreatorMetaData.GetAbi() if err != nil { - return *new(common.Address), err + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BridgeCreatorBin), backend, _ethBasedTemplates, _erc20BasedTemplates) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BridgeCreator{BridgeCreatorCaller: BridgeCreatorCaller{contract: contract}, BridgeCreatorTransactor: BridgeCreatorTransactor{contract: contract}, BridgeCreatorFilterer: BridgeCreatorFilterer{contract: contract}}, nil } -// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. -// -// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) MINISTAKEAMOUNTSSTORAGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.MINISTAKEAMOUNTSSTORAGE(&_BOLDUpgradeAction.CallOpts) +// BridgeCreator is an auto generated Go binding around an Ethereum contract. +type BridgeCreator struct { + BridgeCreatorCaller // Read-only binding to the contract + BridgeCreatorTransactor // Write-only binding to the contract + BridgeCreatorFilterer // Log filterer for contract events } -// MINISTAKEAMOUNTSSTORAGE is a free data retrieval call binding the contract method 0xb5e00c3f. -// -// Solidity: function MINI_STAKE_AMOUNTS_STORAGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) MINISTAKEAMOUNTSSTORAGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.MINISTAKEAMOUNTSSTORAGE(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type BridgeCreatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. -// -// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) NUMBIGSTEPLEVEL(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "NUM_BIGSTEP_LEVEL") +// BridgeCreatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BridgeCreatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} - if err != nil { - return *new(uint8), err - } +// BridgeCreatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BridgeCreatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) +// BridgeCreatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BridgeCreatorSession struct { + Contract *BridgeCreator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} - return out0, err +// BridgeCreatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BridgeCreatorCallerSession struct { + Contract *BridgeCreatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} +// BridgeCreatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BridgeCreatorTransactorSession struct { + Contract *BridgeCreatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. -// -// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) NUMBIGSTEPLEVEL() (uint8, error) { - return _BOLDUpgradeAction.Contract.NUMBIGSTEPLEVEL(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type BridgeCreatorRaw struct { + Contract *BridgeCreator // Generic contract binding to access the raw methods on } -// NUMBIGSTEPLEVEL is a free data retrieval call binding the contract method 0x5d9e2444. -// -// Solidity: function NUM_BIGSTEP_LEVEL() view returns(uint8) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) NUMBIGSTEPLEVEL() (uint8, error) { - return _BOLDUpgradeAction.Contract.NUMBIGSTEPLEVEL(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BridgeCreatorCallerRaw struct { + Contract *BridgeCreatorCaller // Generic read-only contract binding to access the raw methods on } -// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. -// -// Solidity: function OLD_ROLLUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OLDROLLUP(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "OLD_ROLLUP") +// BridgeCreatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BridgeCreatorTransactorRaw struct { + Contract *BridgeCreatorTransactor // Generic write-only contract binding to access the raw methods on +} +// NewBridgeCreator creates a new instance of BridgeCreator, bound to a specific deployed contract. +func NewBridgeCreator(address common.Address, backend bind.ContractBackend) (*BridgeCreator, error) { + contract, err := bindBridgeCreator(address, backend, backend, backend) if err != nil { - return *new(common.Address), err + return nil, err } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - + return &BridgeCreator{BridgeCreatorCaller: BridgeCreatorCaller{contract: contract}, BridgeCreatorTransactor: BridgeCreatorTransactor{contract: contract}, BridgeCreatorFilterer: BridgeCreatorFilterer{contract: contract}}, nil } -// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. -// -// Solidity: function OLD_ROLLUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OLDROLLUP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OLDROLLUP(&_BOLDUpgradeAction.CallOpts) +// NewBridgeCreatorCaller creates a new read-only instance of BridgeCreator, bound to a specific deployed contract. +func NewBridgeCreatorCaller(address common.Address, caller bind.ContractCaller) (*BridgeCreatorCaller, error) { + contract, err := bindBridgeCreator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BridgeCreatorCaller{contract: contract}, nil } -// OLDROLLUP is a free data retrieval call binding the contract method 0x8765240f. -// -// Solidity: function OLD_ROLLUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OLDROLLUP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OLDROLLUP(&_BOLDUpgradeAction.CallOpts) +// NewBridgeCreatorTransactor creates a new write-only instance of BridgeCreator, bound to a specific deployed contract. +func NewBridgeCreatorTransactor(address common.Address, transactor bind.ContractTransactor) (*BridgeCreatorTransactor, error) { + contract, err := bindBridgeCreator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BridgeCreatorTransactor{contract: contract}, nil } -// OSP is a free data retrieval call binding the contract method 0x9f9854e5. -// -// Solidity: function OSP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OSP(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "OSP") - +// NewBridgeCreatorFilterer creates a new log filterer instance of BridgeCreator, bound to a specific deployed contract. +func NewBridgeCreatorFilterer(address common.Address, filterer bind.ContractFilterer) (*BridgeCreatorFilterer, error) { + contract, err := bindBridgeCreator(address, nil, nil, filterer) if err != nil { - return *new(common.Address), err + return nil, err } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - + return &BridgeCreatorFilterer{contract: contract}, nil } -// OSP is a free data retrieval call binding the contract method 0x9f9854e5. -// -// Solidity: function OSP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OSP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OSP(&_BOLDUpgradeAction.CallOpts) +// bindBridgeCreator binds a generic wrapper to an already deployed contract. +func bindBridgeCreator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BridgeCreatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } -// OSP is a free data retrieval call binding the contract method 0x9f9854e5. -// -// Solidity: function OSP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OSP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OSP(&_BOLDUpgradeAction.CallOpts) +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BridgeCreator *BridgeCreatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BridgeCreator.Contract.BridgeCreatorCaller.contract.Call(opts, result, method, params...) } -// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. -// -// Solidity: function OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) OUTBOX(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "OUTBOX") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BridgeCreator *BridgeCreatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BridgeCreator.Contract.BridgeCreatorTransactor.contract.Transfer(opts) +} - return out0, err +// Transact invokes the (paid) contract method with params as input values. +func (_BridgeCreator *BridgeCreatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BridgeCreator.Contract.BridgeCreatorTransactor.contract.Transact(opts, method, params...) +} +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BridgeCreator *BridgeCreatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BridgeCreator.Contract.contract.Call(opts, result, method, params...) } -// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. -// -// Solidity: function OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) OUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OUTBOX(&_BOLDUpgradeAction.CallOpts) +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BridgeCreator *BridgeCreatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BridgeCreator.Contract.contract.Transfer(opts) } -// OUTBOX is a free data retrieval call binding the contract method 0x1b142ea7. -// -// Solidity: function OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) OUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.OUTBOX(&_BOLDUpgradeAction.CallOpts) +// Transact invokes the (paid) contract method with params as input values. +func (_BridgeCreator *BridgeCreatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BridgeCreator.Contract.contract.Transact(opts, method, params...) } -// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. +// Erc20BasedTemplates is a free data retrieval call binding the contract method 0x76768ab9. // -// Solidity: function PREIMAGE_LOOKUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PREIMAGELOOKUP(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function erc20BasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorCaller) Erc20BasedTemplates(opts *bind.CallOpts) (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "PREIMAGE_LOOKUP") + err := _BridgeCreator.contract.Call(opts, &out, "erc20BasedTemplates") + outstruct := new(struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address + }) if err != nil { - return *new(common.Address), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Bridge = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.SequencerInbox = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + outstruct.Inbox = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + outstruct.RollupEventInbox = *abi.ConvertType(out[3], new(common.Address)).(*common.Address) + outstruct.Outbox = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) - return out0, err + return *outstruct, err } -// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. +// Erc20BasedTemplates is a free data retrieval call binding the contract method 0x76768ab9. // -// Solidity: function PREIMAGE_LOOKUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PREIMAGELOOKUP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PREIMAGELOOKUP(&_BOLDUpgradeAction.CallOpts) +// Solidity: function erc20BasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorSession) Erc20BasedTemplates() (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { + return _BridgeCreator.Contract.Erc20BasedTemplates(&_BridgeCreator.CallOpts) } -// PREIMAGELOOKUP is a free data retrieval call binding the contract method 0xcc8089bb. +// Erc20BasedTemplates is a free data retrieval call binding the contract method 0x76768ab9. // -// Solidity: function PREIMAGE_LOOKUP() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PREIMAGELOOKUP() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PREIMAGELOOKUP(&_BOLDUpgradeAction.CallOpts) +// Solidity: function erc20BasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorCallerSession) Erc20BasedTemplates() (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { + return _BridgeCreator.Contract.Erc20BasedTemplates(&_BridgeCreator.CallOpts) } -// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. +// EthBasedTemplates is a free data retrieval call binding the contract method 0x11f02227. // -// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINBRIDGE(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ethBasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorCaller) EthBasedTemplates(opts *bind.CallOpts) (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_BRIDGE") + err := _BridgeCreator.contract.Call(opts, &out, "ethBasedTemplates") + outstruct := new(struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address + }) if err != nil { - return *new(common.Address), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Bridge = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.SequencerInbox = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + outstruct.Inbox = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + outstruct.RollupEventInbox = *abi.ConvertType(out[3], new(common.Address)).(*common.Address) + outstruct.Outbox = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) - return out0, err + return *outstruct, err } -// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. +// EthBasedTemplates is a free data retrieval call binding the contract method 0x11f02227. // -// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINBRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINBRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function ethBasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorSession) EthBasedTemplates() (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { + return _BridgeCreator.Contract.EthBasedTemplates(&_BridgeCreator.CallOpts) } -// PROXYADMINBRIDGE is a free data retrieval call binding the contract method 0x0a54257d. +// EthBasedTemplates is a free data retrieval call binding the contract method 0x11f02227. // -// Solidity: function PROXY_ADMIN_BRIDGE() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINBRIDGE() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINBRIDGE(&_BOLDUpgradeAction.CallOpts) +// Solidity: function ethBasedTemplates() view returns(address bridge, address sequencerInbox, address inbox, address rollupEventInbox, address outbox) +func (_BridgeCreator *BridgeCreatorCallerSession) EthBasedTemplates() (struct { + Bridge common.Address + SequencerInbox common.Address + Inbox common.Address + RollupEventInbox common.Address + Outbox common.Address +}, error) { + return _BridgeCreator.Contract.EthBasedTemplates(&_BridgeCreator.CallOpts) } -// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINOUTBOX(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function owner() view returns(address) +func (_BridgeCreator *BridgeCreatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_OUTBOX") + err := _BridgeCreator.contract.Call(opts, &out, "owner") if err != nil { return *new(common.Address), err @@ -1555,292 +2869,414 @@ func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINOUTBOX(opts *bind.C } -// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINOUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINOUTBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function owner() view returns(address) +func (_BridgeCreator *BridgeCreatorSession) Owner() (common.Address, error) { + return _BridgeCreator.Contract.Owner(&_BridgeCreator.CallOpts) } -// PROXYADMINOUTBOX is a free data retrieval call binding the contract method 0x0787484b. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function PROXY_ADMIN_OUTBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINOUTBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINOUTBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function owner() view returns(address) +func (_BridgeCreator *BridgeCreatorCallerSession) Owner() (common.Address, error) { + return _BridgeCreator.Contract.Owner(&_BridgeCreator.CallOpts) } -// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. +// CreateBridge is a paid mutator transaction binding the contract method 0xb4a5cc34. // -// Solidity: function PROXY_ADMIN_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINREI(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_REI") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - +// Solidity: function createBridge(address adminProxy, address rollup, address nativeToken, (uint256,uint256,uint256,uint256) maxTimeVariation) returns((address,address,address,address,address)) +func (_BridgeCreator *BridgeCreatorTransactor) CreateBridge(opts *bind.TransactOpts, adminProxy common.Address, rollup common.Address, nativeToken common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { + return _BridgeCreator.contract.Transact(opts, "createBridge", adminProxy, rollup, nativeToken, maxTimeVariation) } -// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. +// CreateBridge is a paid mutator transaction binding the contract method 0xb4a5cc34. // -// Solidity: function PROXY_ADMIN_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINREI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINREI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function createBridge(address adminProxy, address rollup, address nativeToken, (uint256,uint256,uint256,uint256) maxTimeVariation) returns((address,address,address,address,address)) +func (_BridgeCreator *BridgeCreatorSession) CreateBridge(adminProxy common.Address, rollup common.Address, nativeToken common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { + return _BridgeCreator.Contract.CreateBridge(&_BridgeCreator.TransactOpts, adminProxy, rollup, nativeToken, maxTimeVariation) } -// PROXYADMINREI is a free data retrieval call binding the contract method 0x3c2b7840. +// CreateBridge is a paid mutator transaction binding the contract method 0xb4a5cc34. // -// Solidity: function PROXY_ADMIN_REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINREI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINREI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function createBridge(address adminProxy, address rollup, address nativeToken, (uint256,uint256,uint256,uint256) maxTimeVariation) returns((address,address,address,address,address)) +func (_BridgeCreator *BridgeCreatorTransactorSession) CreateBridge(adminProxy common.Address, rollup common.Address, nativeToken common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { + return _BridgeCreator.Contract.CreateBridge(&_BridgeCreator.TransactOpts, adminProxy, rollup, nativeToken, maxTimeVariation) } -// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) PROXYADMINSEQUENCERINBOX(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "PROXY_ADMIN_SEQUENCER_INBOX") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - +// Solidity: function renounceOwnership() returns() +func (_BridgeCreator *BridgeCreatorTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BridgeCreator.contract.Transact(opts, "renounceOwnership") } -// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) PROXYADMINSEQUENCERINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function renounceOwnership() returns() +func (_BridgeCreator *BridgeCreatorSession) RenounceOwnership() (*types.Transaction, error) { + return _BridgeCreator.Contract.RenounceOwnership(&_BridgeCreator.TransactOpts) } -// PROXYADMINSEQUENCERINBOX is a free data retrieval call binding the contract method 0x2cfb7ca3. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // -// Solidity: function PROXY_ADMIN_SEQUENCER_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) PROXYADMINSEQUENCERINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.PROXYADMINSEQUENCERINBOX(&_BOLDUpgradeAction.CallOpts) +// Solidity: function renounceOwnership() returns() +func (_BridgeCreator *BridgeCreatorTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _BridgeCreator.Contract.RenounceOwnership(&_BridgeCreator.TransactOpts) } -// REI is a free data retrieval call binding the contract method 0xbe41b367. +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // -// Solidity: function REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) REI(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "REI") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - +// Solidity: function transferOwnership(address newOwner) returns() +func (_BridgeCreator *BridgeCreatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _BridgeCreator.contract.Transact(opts, "transferOwnership", newOwner) } -// REI is a free data retrieval call binding the contract method 0xbe41b367. +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // -// Solidity: function REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) REI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.REI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function transferOwnership(address newOwner) returns() +func (_BridgeCreator *BridgeCreatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BridgeCreator.Contract.TransferOwnership(&_BridgeCreator.TransactOpts, newOwner) } -// REI is a free data retrieval call binding the contract method 0xbe41b367. +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // -// Solidity: function REI() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) REI() (common.Address, error) { - return _BOLDUpgradeAction.Contract.REI(&_BOLDUpgradeAction.CallOpts) +// Solidity: function transferOwnership(address newOwner) returns() +func (_BridgeCreator *BridgeCreatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BridgeCreator.Contract.TransferOwnership(&_BridgeCreator.TransactOpts, newOwner) } -// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. +// UpdateERC20Templates is a paid mutator transaction binding the contract method 0x1bb7c6cc. // -// Solidity: function ROLLUP_READER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) ROLLUPREADER(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "ROLLUP_READER") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) +// Solidity: function updateERC20Templates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorTransactor) UpdateERC20Templates(opts *bind.TransactOpts, _newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.contract.Transact(opts, "updateERC20Templates", _newTemplates) +} - return out0, err +// UpdateERC20Templates is a paid mutator transaction binding the contract method 0x1bb7c6cc. +// +// Solidity: function updateERC20Templates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorSession) UpdateERC20Templates(_newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.Contract.UpdateERC20Templates(&_BridgeCreator.TransactOpts, _newTemplates) +} +// UpdateERC20Templates is a paid mutator transaction binding the contract method 0x1bb7c6cc. +// +// Solidity: function updateERC20Templates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorTransactorSession) UpdateERC20Templates(_newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.Contract.UpdateERC20Templates(&_BridgeCreator.TransactOpts, _newTemplates) } -// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. +// UpdateTemplates is a paid mutator transaction binding the contract method 0xd94d6e0a. // -// Solidity: function ROLLUP_READER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) ROLLUPREADER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.ROLLUPREADER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function updateTemplates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorTransactor) UpdateTemplates(opts *bind.TransactOpts, _newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.contract.Transact(opts, "updateTemplates", _newTemplates) } -// ROLLUPREADER is a free data retrieval call binding the contract method 0x4e0e75fb. +// UpdateTemplates is a paid mutator transaction binding the contract method 0xd94d6e0a. // -// Solidity: function ROLLUP_READER() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) ROLLUPREADER() (common.Address, error) { - return _BOLDUpgradeAction.Contract.ROLLUPREADER(&_BOLDUpgradeAction.CallOpts) +// Solidity: function updateTemplates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorSession) UpdateTemplates(_newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.Contract.UpdateTemplates(&_BridgeCreator.TransactOpts, _newTemplates) } -// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. +// UpdateTemplates is a paid mutator transaction binding the contract method 0xd94d6e0a. // -// Solidity: function SEQ_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) SEQINBOX(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "SEQ_INBOX") +// Solidity: function updateTemplates((address,address,address,address,address) _newTemplates) returns() +func (_BridgeCreator *BridgeCreatorTransactorSession) UpdateTemplates(_newTemplates BridgeCreatorBridgeContracts) (*types.Transaction, error) { + return _BridgeCreator.Contract.UpdateTemplates(&_BridgeCreator.TransactOpts, _newTemplates) +} - if err != nil { - return *new(common.Address), err +// BridgeCreatorERC20TemplatesUpdatedIterator is returned from FilterERC20TemplatesUpdated and is used to iterate over the raw logs and unpacked data for ERC20TemplatesUpdated events raised by the BridgeCreator contract. +type BridgeCreatorERC20TemplatesUpdatedIterator struct { + Event *BridgeCreatorERC20TemplatesUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeCreatorERC20TemplatesUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeCreatorERC20TemplatesUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeCreatorERC20TemplatesUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - return out0, err + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeCreatorERC20TemplatesUpdatedIterator) Error() error { + return it.fail } -// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. -// -// Solidity: function SEQ_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) SEQINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.SEQINBOX(&_BOLDUpgradeAction.CallOpts) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeCreatorERC20TemplatesUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// SEQINBOX is a free data retrieval call binding the contract method 0xd384cb95. -// -// Solidity: function SEQ_INBOX() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) SEQINBOX() (common.Address, error) { - return _BOLDUpgradeAction.Contract.SEQINBOX(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorERC20TemplatesUpdated represents a ERC20TemplatesUpdated event raised by the BridgeCreator contract. +type BridgeCreatorERC20TemplatesUpdated struct { + Raw types.Log // Blockchain specific contextual infos } -// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. +// FilterERC20TemplatesUpdated is a free log retrieval operation binding the contract event 0xa47434bb6d1ddd5521e8980ded6a783513e159f80437d78715b10e6e8b6bba5e. // -// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) SMALLSTEPLEAFSIZE(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "SMALLSTEP_LEAF_SIZE") +// Solidity: event ERC20TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) FilterERC20TemplatesUpdated(opts *bind.FilterOpts) (*BridgeCreatorERC20TemplatesUpdatedIterator, error) { + logs, sub, err := _BridgeCreator.contract.FilterLogs(opts, "ERC20TemplatesUpdated") if err != nil { - return *new(*big.Int), err + return nil, err } + return &BridgeCreatorERC20TemplatesUpdatedIterator{contract: _BridgeCreator.contract, event: "ERC20TemplatesUpdated", logs: logs, sub: sub}, nil +} - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) +// WatchERC20TemplatesUpdated is a free log subscription operation binding the contract event 0xa47434bb6d1ddd5521e8980ded6a783513e159f80437d78715b10e6e8b6bba5e. +// +// Solidity: event ERC20TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) WatchERC20TemplatesUpdated(opts *bind.WatchOpts, sink chan<- *BridgeCreatorERC20TemplatesUpdated) (event.Subscription, error) { - return out0, err + logs, sub, err := _BridgeCreator.contract.WatchLogs(opts, "ERC20TemplatesUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeCreatorERC20TemplatesUpdated) + if err := _BridgeCreator.contract.UnpackLog(event, "ERC20TemplatesUpdated", log); err != nil { + return err + } + event.Raw = log + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. +// ParseERC20TemplatesUpdated is a log parse operation binding the contract event 0xa47434bb6d1ddd5521e8980ded6a783513e159f80437d78715b10e6e8b6bba5e. // -// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) SMALLSTEPLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.SMALLSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) +// Solidity: event ERC20TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) ParseERC20TemplatesUpdated(log types.Log) (*BridgeCreatorERC20TemplatesUpdated, error) { + event := new(BridgeCreatorERC20TemplatesUpdated) + if err := _BridgeCreator.contract.UnpackLog(event, "ERC20TemplatesUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// SMALLSTEPLEAFSIZE is a free data retrieval call binding the contract method 0xfa287420. -// -// Solidity: function SMALLSTEP_LEAF_SIZE() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) SMALLSTEPLEAFSIZE() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.SMALLSTEPLEAFSIZE(&_BOLDUpgradeAction.CallOpts) -} +// BridgeCreatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BridgeCreator contract. +type BridgeCreatorOwnershipTransferredIterator struct { + Event *BridgeCreatorOwnershipTransferred // Event containing the contract specifics and raw log -// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. -// -// Solidity: function STAKE_AMOUNT() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) STAKEAMOUNT(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "STAKE_AMOUNT") + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data - if err != nil { - return *new(*big.Int), err + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeCreatorOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeCreatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeCreatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - return out0, err + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeCreatorOwnershipTransferredIterator) Error() error { + return it.fail } -// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. -// -// Solidity: function STAKE_AMOUNT() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) STAKEAMOUNT() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.STAKEAMOUNT(&_BOLDUpgradeAction.CallOpts) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeCreatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// STAKEAMOUNT is a free data retrieval call binding the contract method 0xfaf5625f. -// -// Solidity: function STAKE_AMOUNT() view returns(uint256) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) STAKEAMOUNT() (*big.Int, error) { - return _BOLDUpgradeAction.Contract.STAKEAMOUNT(&_BOLDUpgradeAction.CallOpts) +// BridgeCreatorOwnershipTransferred represents a OwnershipTransferred event raised by the BridgeCreator contract. +type BridgeCreatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos } -// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: function STAKE_TOKEN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCaller) STAKETOKEN(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BOLDUpgradeAction.contract.Call(opts, &out, "STAKE_TOKEN") +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_BridgeCreator *BridgeCreatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BridgeCreatorOwnershipTransferredIterator, error) { - if err != nil { - return *new(common.Address), err + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - + logs, sub, err := _BridgeCreator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &BridgeCreatorOwnershipTransferredIterator{contract: _BridgeCreator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: function STAKE_TOKEN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) STAKETOKEN() (common.Address, error) { - return _BOLDUpgradeAction.Contract.STAKETOKEN(&_BOLDUpgradeAction.CallOpts) -} +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_BridgeCreator *BridgeCreatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BridgeCreatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { -// STAKETOKEN is a free data retrieval call binding the contract method 0x1c39b672. -// -// Solidity: function STAKE_TOKEN() view returns(address) -func (_BOLDUpgradeAction *BOLDUpgradeActionCallerSession) STAKETOKEN() (common.Address, error) { - return _BOLDUpgradeAction.Contract.STAKETOKEN(&_BOLDUpgradeAction.CallOpts) -} + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } -// Perform is a paid mutator transaction binding the contract method 0xebe03a93. -// -// Solidity: function perform(address[] validators) returns() -func (_BOLDUpgradeAction *BOLDUpgradeActionTransactor) Perform(opts *bind.TransactOpts, validators []common.Address) (*types.Transaction, error) { - return _BOLDUpgradeAction.contract.Transact(opts, "perform", validators) -} + logs, sub, err := _BridgeCreator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeCreatorOwnershipTransferred) + if err := _BridgeCreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log -// Perform is a paid mutator transaction binding the contract method 0xebe03a93. -// -// Solidity: function perform(address[] validators) returns() -func (_BOLDUpgradeAction *BOLDUpgradeActionSession) Perform(validators []common.Address) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.Perform(&_BOLDUpgradeAction.TransactOpts, validators) + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// Perform is a paid mutator transaction binding the contract method 0xebe03a93. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: function perform(address[] validators) returns() -func (_BOLDUpgradeAction *BOLDUpgradeActionTransactorSession) Perform(validators []common.Address) (*types.Transaction, error) { - return _BOLDUpgradeAction.Contract.Perform(&_BOLDUpgradeAction.TransactOpts, validators) +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_BridgeCreator *BridgeCreatorFilterer) ParseOwnershipTransferred(log types.Log) (*BridgeCreatorOwnershipTransferred, error) { + event := new(BridgeCreatorOwnershipTransferred) + if err := _BridgeCreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// BOLDUpgradeActionRollupMigratedIterator is returned from FilterRollupMigrated and is used to iterate over the raw logs and unpacked data for RollupMigrated events raised by the BOLDUpgradeAction contract. -type BOLDUpgradeActionRollupMigratedIterator struct { - Event *BOLDUpgradeActionRollupMigrated // Event containing the contract specifics and raw log +// BridgeCreatorTemplatesUpdatedIterator is returned from FilterTemplatesUpdated and is used to iterate over the raw logs and unpacked data for TemplatesUpdated events raised by the BridgeCreator contract. +type BridgeCreatorTemplatesUpdatedIterator struct { + Event *BridgeCreatorTemplatesUpdated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1854,7 +3290,7 @@ type BOLDUpgradeActionRollupMigratedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BOLDUpgradeActionRollupMigratedIterator) Next() bool { +func (it *BridgeCreatorTemplatesUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1863,7 +3299,7 @@ func (it *BOLDUpgradeActionRollupMigratedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BOLDUpgradeActionRollupMigrated) + it.Event = new(BridgeCreatorTemplatesUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1878,7 +3314,7 @@ func (it *BOLDUpgradeActionRollupMigratedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BOLDUpgradeActionRollupMigrated) + it.Event = new(BridgeCreatorTemplatesUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1894,102 +3330,304 @@ func (it *BOLDUpgradeActionRollupMigratedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BOLDUpgradeActionRollupMigratedIterator) Error() error { +func (it *BridgeCreatorTemplatesUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BOLDUpgradeActionRollupMigratedIterator) Close() error { +func (it *BridgeCreatorTemplatesUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BOLDUpgradeActionRollupMigrated represents a RollupMigrated event raised by the BOLDUpgradeAction contract. -type BOLDUpgradeActionRollupMigrated struct { - Rollup common.Address - ChallengeManager common.Address - Raw types.Log // Blockchain specific contextual infos +// BridgeCreatorTemplatesUpdated represents a TemplatesUpdated event raised by the BridgeCreator contract. +type BridgeCreatorTemplatesUpdated struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTemplatesUpdated is a free log retrieval operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// +// Solidity: event TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) FilterTemplatesUpdated(opts *bind.FilterOpts) (*BridgeCreatorTemplatesUpdatedIterator, error) { + + logs, sub, err := _BridgeCreator.contract.FilterLogs(opts, "TemplatesUpdated") + if err != nil { + return nil, err + } + return &BridgeCreatorTemplatesUpdatedIterator{contract: _BridgeCreator.contract, event: "TemplatesUpdated", logs: logs, sub: sub}, nil +} + +// WatchTemplatesUpdated is a free log subscription operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// +// Solidity: event TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) WatchTemplatesUpdated(opts *bind.WatchOpts, sink chan<- *BridgeCreatorTemplatesUpdated) (event.Subscription, error) { + + logs, sub, err := _BridgeCreator.contract.WatchLogs(opts, "TemplatesUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeCreatorTemplatesUpdated) + if err := _BridgeCreator.contract.UnpackLog(event, "TemplatesUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTemplatesUpdated is a log parse operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// +// Solidity: event TemplatesUpdated() +func (_BridgeCreator *BridgeCreatorFilterer) ParseTemplatesUpdated(log types.Log) (*BridgeCreatorTemplatesUpdated, error) { + event := new(BridgeCreatorTemplatesUpdated) + if err := _BridgeCreator.contract.UnpackLog(event, "TemplatesUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ConstantArrayStorageMetaData contains all meta data concerning the ConstantArrayStorage contract. +var ConstantArrayStorageMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"__array\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"array\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea264697066735822122069938d416ea3ba5933fb5ea572e5f64721692cbb7e6e0066e13ef45b79281daf64736f6c63430008110033", +} + +// ConstantArrayStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use ConstantArrayStorageMetaData.ABI instead. +var ConstantArrayStorageABI = ConstantArrayStorageMetaData.ABI + +// ConstantArrayStorageBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ConstantArrayStorageMetaData.Bin instead. +var ConstantArrayStorageBin = ConstantArrayStorageMetaData.Bin + +// DeployConstantArrayStorage deploys a new Ethereum contract, binding an instance of ConstantArrayStorage to it. +func DeployConstantArrayStorage(auth *bind.TransactOpts, backend bind.ContractBackend, __array []*big.Int) (common.Address, *types.Transaction, *ConstantArrayStorage, error) { + parsed, err := ConstantArrayStorageMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ConstantArrayStorageBin), backend, __array) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ConstantArrayStorage{ConstantArrayStorageCaller: ConstantArrayStorageCaller{contract: contract}, ConstantArrayStorageTransactor: ConstantArrayStorageTransactor{contract: contract}, ConstantArrayStorageFilterer: ConstantArrayStorageFilterer{contract: contract}}, nil +} + +// ConstantArrayStorage is an auto generated Go binding around an Ethereum contract. +type ConstantArrayStorage struct { + ConstantArrayStorageCaller // Read-only binding to the contract + ConstantArrayStorageTransactor // Write-only binding to the contract + ConstantArrayStorageFilterer // Log filterer for contract events +} + +// ConstantArrayStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type ConstantArrayStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ConstantArrayStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ConstantArrayStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ConstantArrayStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ConstantArrayStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ConstantArrayStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ConstantArrayStorageSession struct { + Contract *ConstantArrayStorage // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ConstantArrayStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ConstantArrayStorageCallerSession struct { + Contract *ConstantArrayStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ConstantArrayStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ConstantArrayStorageTransactorSession struct { + Contract *ConstantArrayStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ConstantArrayStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type ConstantArrayStorageRaw struct { + Contract *ConstantArrayStorage // Generic contract binding to access the raw methods on +} + +// ConstantArrayStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ConstantArrayStorageCallerRaw struct { + Contract *ConstantArrayStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// ConstantArrayStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ConstantArrayStorageTransactorRaw struct { + Contract *ConstantArrayStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewConstantArrayStorage creates a new instance of ConstantArrayStorage, bound to a specific deployed contract. +func NewConstantArrayStorage(address common.Address, backend bind.ContractBackend) (*ConstantArrayStorage, error) { + contract, err := bindConstantArrayStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ConstantArrayStorage{ConstantArrayStorageCaller: ConstantArrayStorageCaller{contract: contract}, ConstantArrayStorageTransactor: ConstantArrayStorageTransactor{contract: contract}, ConstantArrayStorageFilterer: ConstantArrayStorageFilterer{contract: contract}}, nil +} + +// NewConstantArrayStorageCaller creates a new read-only instance of ConstantArrayStorage, bound to a specific deployed contract. +func NewConstantArrayStorageCaller(address common.Address, caller bind.ContractCaller) (*ConstantArrayStorageCaller, error) { + contract, err := bindConstantArrayStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ConstantArrayStorageCaller{contract: contract}, nil +} + +// NewConstantArrayStorageTransactor creates a new write-only instance of ConstantArrayStorage, bound to a specific deployed contract. +func NewConstantArrayStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*ConstantArrayStorageTransactor, error) { + contract, err := bindConstantArrayStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ConstantArrayStorageTransactor{contract: contract}, nil +} + +// NewConstantArrayStorageFilterer creates a new log filterer instance of ConstantArrayStorage, bound to a specific deployed contract. +func NewConstantArrayStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*ConstantArrayStorageFilterer, error) { + contract, err := bindConstantArrayStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ConstantArrayStorageFilterer{contract: contract}, nil +} + +// bindConstantArrayStorage binds a generic wrapper to an already deployed contract. +func bindConstantArrayStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ConstantArrayStorageMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ConstantArrayStorage *ConstantArrayStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ConstantArrayStorage.Contract.ConstantArrayStorageCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ConstantArrayStorage *ConstantArrayStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ConstantArrayStorage.Contract.ConstantArrayStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ConstantArrayStorage *ConstantArrayStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ConstantArrayStorage.Contract.ConstantArrayStorageTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ConstantArrayStorage *ConstantArrayStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ConstantArrayStorage.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ConstantArrayStorage *ConstantArrayStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ConstantArrayStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ConstantArrayStorage *ConstantArrayStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ConstantArrayStorage.Contract.contract.Transact(opts, method, params...) } -// FilterRollupMigrated is a free log retrieval operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. +// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. // -// Solidity: event RollupMigrated(address rollup, address challengeManager) -func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) FilterRollupMigrated(opts *bind.FilterOpts) (*BOLDUpgradeActionRollupMigratedIterator, error) { +// Solidity: function array() view returns(uint256[]) +func (_ConstantArrayStorage *ConstantArrayStorageCaller) Array(opts *bind.CallOpts) ([]*big.Int, error) { + var out []interface{} + err := _ConstantArrayStorage.contract.Call(opts, &out, "array") - logs, sub, err := _BOLDUpgradeAction.contract.FilterLogs(opts, "RollupMigrated") if err != nil { - return nil, err + return *new([]*big.Int), err } - return &BOLDUpgradeActionRollupMigratedIterator{contract: _BOLDUpgradeAction.contract, event: "RollupMigrated", logs: logs, sub: sub}, nil -} -// WatchRollupMigrated is a free log subscription operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. -// -// Solidity: event RollupMigrated(address rollup, address challengeManager) -func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) WatchRollupMigrated(opts *bind.WatchOpts, sink chan<- *BOLDUpgradeActionRollupMigrated) (event.Subscription, error) { + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - logs, sub, err := _BOLDUpgradeAction.contract.WatchLogs(opts, "RollupMigrated") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BOLDUpgradeActionRollupMigrated) - if err := _BOLDUpgradeAction.contract.UnpackLog(event, "RollupMigrated", log); err != nil { - return err - } - event.Raw = log + return out0, err - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil } -// ParseRollupMigrated is a log parse operation binding the contract event 0x7e5cc5c3fce046d868d5918548df8d3e8ef9f09e6fb30a68081f1f1348cd0314. +// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. // -// Solidity: event RollupMigrated(address rollup, address challengeManager) -func (_BOLDUpgradeAction *BOLDUpgradeActionFilterer) ParseRollupMigrated(log types.Log) (*BOLDUpgradeActionRollupMigrated, error) { - event := new(BOLDUpgradeActionRollupMigrated) - if err := _BOLDUpgradeAction.contract.UnpackLog(event, "RollupMigrated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function array() view returns(uint256[]) +func (_ConstantArrayStorage *ConstantArrayStorageSession) Array() ([]*big.Int, error) { + return _ConstantArrayStorage.Contract.Array(&_ConstantArrayStorage.CallOpts) } -// BridgeCreatorMetaData contains all meta data concerning the BridgeCreator contract. -var BridgeCreatorMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxDataSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[],\"name\":\"TemplatesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeTemplate\",\"outputs\":[{\"internalType\":\"contractBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"maxTimeVariation\",\"type\":\"tuple\"}],\"name\":\"createBridge\",\"outputs\":[{\"internalType\":\"contractBridge\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractSequencerInbox\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractInbox\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractRollupEventInbox\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contractOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inboxTemplate\",\"outputs\":[{\"internalType\":\"contractInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboxTemplate\",\"outputs\":[{\"internalType\":\"contractOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInboxTemplate\",\"outputs\":[{\"internalType\":\"contractRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInboxTemplate\",\"outputs\":[{\"internalType\":\"contractSequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridgeTemplate\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sequencerInboxTemplate\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_inboxTemplate\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollupEventInboxTemplate\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_outboxTemplate\",\"type\":\"address\"}],\"name\":\"updateTemplates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200b1c23803806200b1c2833981016040819052620000349162000268565b6200003f33620001d2565b6040516200004d9062000222565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905560405181906200009b9062000230565b908152602001604051809103906000f080158015620000be573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b03929092169190911790556040518190620000ef906200023e565b908152602001604051809103906000f08015801562000112573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691909117905560405162000141906200024c565b604051809103906000f0801580156200015e573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b03929092169190911790556040516200018d906200025a565b604051809103906000f080158015620001aa573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b03929092169190911790555062000282565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a108062001c6183390190565b612ed0806200367183390190565b612a99806200654183390190565b6109e48062008fda83390190565b61180480620099be83390190565b6000602082840312156200027b57600080fd5b5051919050565b6119cf80620002926000396000f3fe60806040523480156200001157600080fd5b5060043610620000cd5760003560e01c806395fd089f116200007f578063e6027a871162000062578063e6027a8714620001b2578063f2fde38b14620001c6578063fc6a2ed014620001dd57600080fd5b806395fd089f146200018a578063ae583c03146200019e57600080fd5b8063715018a611620000b4578063715018a614620001415780637ba0e857146200014b5780638da5cb5b146200017857600080fd5b80632147e58e14620000d25780636c6e47c014620000eb575b600080fd5b620000e9620000e33660046200094b565b620001f1565b005b62000102620000fc366004620009bb565b62000299565b604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b620000e962000776565b6003546200015f906001600160a01b031681565b6040516001600160a01b03909116815260200162000138565b6000546001600160a01b03166200015f565b6001546200015f906001600160a01b031681565b6004546200015f906001600160a01b031681565b6002546200015f906001600160a01b031681565b620000e9620001d736600462000aa1565b6200078e565b6005546200015f906001600160a01b031681565b620001fb62000842565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0388811691909117909255600280548216878416179055600380548216868416179055600480548216858416179055600580549091169183169190911790556040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a15050505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905281908190819081906001546040516001600160a01b03909116908a90620002f19062000920565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000334573d6000803e3d6000fd5b506001600160a01b0390811660208301526002546040519116908a906200035b9062000920565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200039e573d6000803e3d6000fd5b506001600160a01b0390811660408084019190915260035490519116908a90620003c89062000920565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200040b573d6000803e3d6000fd5b506001600160a01b0390811660608301526004546040519116908a90620004329062000920565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000475573d6000803e3d6000fd5b506001600160a01b0390811660808301526005546040519116908a906200049c9062000920565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620004df573d6000803e3d6000fd5b506001600160a01b0390811660a0830152602082015160405163189acdbd60e31b81528a8316600482015291169063c4d66de890602401600060405180830381600087803b1580156200053157600080fd5b505af115801562000546573d6000803e3d6000fd5b50505060408083015160208085015183517f1f7a92b20000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201528c516024820152918c01516044830152928b0151606482015260608b0151608482015291169150631f7a92b29060a401600060405180830381600087803b158015620005d557600080fd5b505af1158015620005ea573d6000803e3d6000fd5b5050506060820151602083015160408085015190517f485cc9550000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015290821660248201529116915063485cc95590604401600060405180830381600087803b1580156200066257600080fd5b505af115801562000677573d6000803e3d6000fd5b5050506080820151602083015160405163189acdbd60e31b81526001600160a01b0391821660048201529116915063c4d66de890602401600060405180830381600087803b158015620006c957600080fd5b505af1158015620006de573d6000803e3d6000fd5b50505060a0820151602083015160405163189acdbd60e31b81526001600160a01b0391821660048201529116915063c4d66de890602401600060405180830381600087803b1580156200073057600080fd5b505af115801562000745573d6000803e3d6000fd5b50505050602081015160408201516060830151608084015160a090940151929c919b50995091975095509350505050565b6200078062000842565b6200078c6000620008b8565b565b6200079862000842565b6001600160a01b03811662000834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6200083f81620008b8565b50565b6000546001600160a01b031633146200078c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200082b565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610ed38062000ac783390190565b80356001600160a01b03811681146200094657600080fd5b919050565b600080600080600060a086880312156200096457600080fd5b6200096f866200092e565b94506200097f602087016200092e565b93506200098f604087016200092e565b92506200099f606087016200092e565b9150620009af608087016200092e565b90509295509295909350565b600080600083850360c0811215620009d257600080fd5b620009dd856200092e565b9350620009ed602086016200092e565b925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121562000a2057600080fd5b506040516080810181811067ffffffffffffffff8211171562000a6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525060408501358152606085013560208201526080850135604082015260a08501356060820152809150509250925092565b60006020828403121562000ab457600080fd5b62000abf826200092e565b939250505056fe608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122048bd6f8835fec16d9cc57ec823a7b1c057c0e2b8523682b2489ec830026192e564736f6c6343000811003360a06040523060805234801561001457600080fd5b506080516119d961003760003960008181610b660152610f9401526119d96000f3fe60806040526004361061017f5760003560e01c80639e5d4c49116100d6578063d5719dc21161007f578063eca067ad11610059578063eca067ad14610457578063ee35f3271461046c578063f81ff3b31461048c57600080fd5b8063d5719dc214610417578063e76f5c8d14610437578063e77145f41461023457600080fd5b8063c4d66de8116100b0578063c4d66de8146103b7578063cb23bcb5146103d7578063cee3d728146103f757600080fd5b80639e5d4c4914610337578063ab5d894314610365578063ae60bd131461037a57600080fd5b80635fca4a16116101385780638db5993b116101125780638db5993b146102cc578063919cc706146102df578063945e1147146102ff57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028c57600080fd5b8063413b35bd11610169578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a8575b600080fd5b34801561019057600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c33660046116da565b6104ac565b3480156101d457600080fd5b506102046101e336600461170b565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f36600461172f565b6104cd565b005b34801561024257600080fd5b5061023461025136600461170b565b6107d3565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b5061019561028736600461176d565b6108fe565b34801561029857600080fd5b506102ac6102a7366004611799565b61095f565b60408051948552602085019390935291830152606082015260800161019f565b6101956102da3660046117cb565b610af8565b3480156102eb57600080fd5b506102346102fa36600461170b565b610b5c565b34801561030b57600080fd5b5061031f61031a3660046116da565b610ca1565b6040516001600160a01b03909116815260200161019f565b34801561034357600080fd5b50610357610352366004611812565b610ccb565b60405161019f92919061189b565b34801561037157600080fd5b5061031f610e78565b34801561038657600080fd5b5061020461039536600461170b565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103c357600080fd5b506102346103d236600461170b565b610ebb565b3480156103e357600080fd5b5060085461031f906001600160a01b031681565b34801561040357600080fd5b5061023461041236600461172f565b6110ab565b34801561042357600080fd5b506101956104323660046116da565b611419565b34801561044357600080fd5b5061031f6104523660046116da565b611429565b34801561046357600080fd5b50600654610195565b34801561047857600080fd5b5060095461031f906001600160a01b031681565b34801561049857600080fd5b506102346104a73660046116da565b611439565b600781815481106104bc57600080fd5b600091825260209091200154905081565b6008546001600160a01b0316331461059c5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054d91906118f3565b9050336001600160a01b0382161461059a57600854604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036106085750505050565b82156106a357604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600380546106b390600190611910565b815481106106c3576106c3611931565b6000918252602090912001548254600380546001600160a01b039093169290919081106106f2576106f2611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061074057610740611931565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600380548061077657610776611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6008546001600160a01b0316331461089d5760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561082f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085391906118f3565b9050336001600160a01b0382161461089b57600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b6009546000906001600160a01b03163314610947576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610956600d8443424887611508565b90505b92915050565b6009546000908190819081906001600160a01b031633146109ae576040517f88f84f04000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b85600a54141580156109bf57508515155b80156109cc5750600a5415155b15610a1157600a546040517fe2051feb000000000000000000000000000000000000000000000000000000008152600481019190915260248101879052604401610591565b600a85905560075493508315610a4f5760078054610a3190600190611910565b81548110610a4157610a41611931565b906000526020600020015492505b8615610a80576006610a62600189611910565b81548110610a7257610a72611931565b906000526020600020015491505b60408051602081018590529081018990526060810183905260800160408051601f198184030181529190528051602090910120600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018190559398929750909550919350915050565b3360009081526001602081905260408220015460ff16610b46576040517fb6c60ea3000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b610b54848443424887611508565b949350505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bfa5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610c70576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610591565b50506008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60048181548110610cb157600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610d1c576040517f32ea82ab000000000000000000000000000000000000000000000000000000008152336004820152602401610591565b8215801590610d3357506001600160a01b0386163b155b15610d75576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610591565b6005805473ffffffffffffffffffffffffffffffffffffffff19811633179091556040516001600160a01b03918216918816908790610db7908890889061195d565b60006040518083038185875af1925050503d8060008114610df4576040519150601f19603f3d011682016040523d82523d6000602084013e610df9565b606091505b506005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610e66908a908a908a9061196d565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff00000000000000000000000000000000000000018101610eb657600091505090565b919050565b600054610100900460ff1615808015610edb5750600054600160ff909116105b80610ef55750303b158015610ef5575060005460ff166001145b610f675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610591565b6000805460ff191660011790558015610f8a576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036110285760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610591565b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556008805490911691841691909117905580156107cf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6008546001600160a01b031633146111755760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906118f3565b9050336001600160a01b0382161461117357600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b7fffffffffffffffffffffffff00000000000000000000000000000000000000016001600160a01b038316016111e2576040517f77abed100000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610591565b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a28215158115150361124f5750505050565b82156112eb57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107cc565b600480546112fb90600190611910565b8154811061130b5761130b611931565b6000918252602090912001548254600480546001600160a01b0390931692909190811061133a5761133a611931565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460026000600485600001548154811061138857611388611931565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806113be576113be611947565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600681815481106104bc57600080fd5b60038181548110610cb157600080fd5b6008546001600160a01b031633146115035760085460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b991906118f3565b9050336001600160a01b0382161461150157600854604051630739600760e01b81523360048201526001600160a01b0391821660248201529082166044820152606401610591565b505b600a55565b600654604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a5909201909252805191012060009190600082156116055760066115e7600185611910565b815481106115f7576115f7611931565b906000526020600020015490505b6040805160208082018490528183018590528251808303840181526060830180855281519190920120600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015533905260ff8c1660808201526001600160a01b038b1660a082015260c0810187905260e0810188905267ffffffffffffffff89166101008201529051829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1918190036101200190a3509098975050505050505050565b6000602082840312156116ec57600080fd5b5035919050565b6001600160a01b038116811461170857600080fd5b50565b60006020828403121561171d57600080fd5b8135611728816116f3565b9392505050565b6000806040838503121561174257600080fd5b823561174d816116f3565b91506020830135801515811461176257600080fd5b809150509250929050565b6000806040838503121561178057600080fd5b823561178b816116f3565b946020939093013593505050565b600080600080608085870312156117af57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000606084860312156117e057600080fd5b833560ff811681146117f157600080fd5b92506020840135611801816116f3565b929592945050506040919091013590565b6000806000806060858703121561182857600080fd5b8435611833816116f3565b935060208501359250604085013567ffffffffffffffff8082111561185757600080fd5b818701915087601f83011261186b57600080fd5b81358181111561187a57600080fd5b88602082850101111561188c57600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b818110156118d1578581018301518582016060015282016118b5565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561190557600080fd5b8151611728816116f3565b8181038181111561095957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220e17c4fa516aef1025bbd9042f6a81bce4320d01116e045245bb984afe41977fb64736f6c63430008110033610100604052306080524660c0526200002362000061602090811b62001c9717901c565b151560e0523480156200003557600080fd5b5060405162002ed038038062002ed08339810160408190526200005891620000fe565b60a05262000149565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000a1919062000118565b600060405180830381855afa9150503d8060008114620000de576040519150601f19603f3d011682016040523d82523d6000602084013e620000e3565b606091505b5091509150818015620000f7575080516020145b9250505090565b6000602082840312156200011157600080fd5b5051919050565b6000825160005b818110156200013b57602081860181015185830152016200011f565b506000920191825250919050565b60805160a05160c05160e051612d316200019f600039600081816114c0015261214e0152600061114901526000818161042a01528181611d930152611de801526000818161052901526108b80152612d316000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806384420860116100ee578063d9dd67ab11610097578063e78cea9211610071578063e78cea9214610412578063e8eb1dc314610425578063ebea461d1461044c578063f19815781461048257600080fd5b8063d9dd67ab14610394578063e0bc9729146103a7578063e5a358c8146103ba57600080fd5b8063b31761f8116100c8578063b31761f814610343578063cb23bcb514610356578063d1ce8da81461038157600080fd5b806384420860146103155780638f111f3c1461032857806396cc5c781461033b57600080fd5b80636ae71f121161015b5780636f12b0c9116101355780636f12b0c914610282578063715ea34b1461029557806371c3e6fe146102e95780637fa3a40e1461030c57600080fd5b80636ae71f12146102445780636d46e9871461024c5780636e7df3e71461026f57600080fd5b80631f9566321161018c5780631f95663214610216578063258f04951461022957806327957a491461023c57600080fd5b806306f13056146101b35780631637be48146101ce5780631f7a92b214610201575b600080fd5b6101bb610495565b6040519081526020015b60405180910390f35b6101f16101dc3660046125e9565b60009081526008602052604090205460ff1690565b60405190151581526020016101c5565b61021461020f36600461261a565b61051f565b005b610214610224366004612669565b610734565b6101bb6102373660046125e9565b610841565b6101bb602881565b6102146108ae565b6101f161025a3660046126a2565b60096020526000908152604090205460ff1681565b61021461027d366004612669565b610a51565b61021461029036600461270f565b610b5e565b6102c96102a33660046125e9565b60086020526000908152604090205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101c5565b6101f16102f73660046126a2565b60036020526000908152604090205460ff1681565b6101bb60005481565b6102146103233660046125e9565b610d95565b61021461033636600461277a565b610eef565b610214611146565b6102146103513660046127f7565b6111d5565b600254610369906001600160a01b031681565b6040516001600160a01b0390911681526020016101c5565b61021461038f36600461286b565b6112dc565b6101bb6103a23660046125e9565b611640565b6102146103b536600461277a565b6116cd565b6103e17f400000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016101c5565b600154610369906001600160a01b031681565b6101bb7f000000000000000000000000000000000000000000000000000000000000000081565b6004546005546006546007546104629392919084565b6040805194855260208501939093529183015260608201526080016101c5565b6102146104903660046128ad565b611834565b600154604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061291d565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036105c25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b031615610605576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610645576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa1580156106c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e89190612936565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790558035600455602081013560055560408101356006556060013560075550565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ab9190612936565b6001600160a01b0316336001600160a01b0316146107f157600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b6001600160a01b038216600090815260096020526040808220805460ff1916841515179055516004917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b600081815260086020908152604080832081518083019092525460ff811615158252610100900467ffffffffffffffff1691810182905290820361089a5760405162f20c5d60e01b8152600481018490526024016105b9565b6020015167ffffffffffffffff1692915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361094c5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b9565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146109a957604051631194af8760e11b81523360048201526001600160a01b03821660248201526044016105b9565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190612936565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac89190612936565b6001600160a01b0316336001600160a01b031614610b0e57600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b6001600160a01b038216600090815260036020526040808220805460ff1916841515179055516001917fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e91a25050565b8060005a9050333214610b9d576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff16610bcd57604051632dd9fc9760e01b815260040160405180910390fd5b600080610bdb888888611d5d565b90925090506000808080610bf2868b8d8480611fa5565b93509350935093508c8414610c245760405163ac7411c960e01b815260048101859052602481018e90526044016105b9565b80838e7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548a6000604051610c5f9493929190612953565b60405180910390a4505050506001600160a01b038416159150610d8c9050573660006020610c8e83601f6129de565b610c9891906129f1565b9050610200610ca8600283612af7565b610cb291906129f1565b610cbd826006612b06565b610cc791906129de565b610cd190846129de565b9250333214610cdf57600091505b836001600160a01b031663e3db8a49335a610cfa9087612b1d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190612b30565b5050505b50505050505050565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190612936565b6001600160a01b0316336001600160a01b031614610e5257600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b60008181526008602052604090205460ff16610e835760405162f20c5d60e01b8152600481018290526024016105b9565b600081815260086020526040808220805460ff191690555182917f5cb4218b272fd214168ac43e90fb4d05d6c36f0b17ffb4c2dd07c234d744eb2a91a26040516003907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a250565b8260005a9050333214610f2e576040517ffeb3d07100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526003602052604090205460ff16610f5e57604051632dd9fc9760e01b815260040160405180910390fd5b600080610f6c8a8a8a611d5d565b90925090508a81838b8b8a8a6000808080610f8a89888a8989611fa5565b93509350935093508a8414158015610fa457506000198b14155b15610fcc5760405163ac7411c960e01b815260048101859052602481018c90526044016105b9565b8083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548f60006040516110079493929190612953565b60405180910390a4505050506001600160a01b038b1615985061113b97505050505050505057366000602061103d83601f6129de565b61104791906129f1565b9050610200611057600283612af7565b61106191906129f1565b61106c826006612b06565b61107691906129de565b61108090846129de565b925033321461108e57600091505b836001600160a01b031663e3db8a49335a6110a99087612b1d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111379190612b30565b5050505b505050505050505050565b467f00000000000000000000000000000000000000000000000000000000000000000361119f576040517fa301bb0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608081018252600180825260208201819052918101829052606001819052600481905560058190556006819055600755565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190612936565b6001600160a01b0316336001600160a01b03161461129257600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b805160045560208101516005556040808201516006556060820151600755516000907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e908290a250565b600260009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190612936565b6001600160a01b0316336001600160a01b03161461139957600254604051631194af8760e11b81523360048201526001600160a01b0390911660248201526044016105b9565b600082826040516113ab929190612b4d565b6040519081900381207ffe000000000000000000000000000000000000000000000000000000000000006020830152602182015260410160408051601f19818403018152919052805160209091012090507f800000000000000000000000000000000000000000000000000000000000000081186201000083106114715760405162461bcd60e51b815260206004820152601360248201527f6b657973657420697320746f6f206c617267650000000000000000000000000060448201526064016105b9565b60008181526008602052604090205460ff16156114bd576040517ffa2fddda000000000000000000000000000000000000000000000000000000008152600481018290526024016105b9565b437f00000000000000000000000000000000000000000000000000000000000000001561154a5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061291d565b90505b6040805180820182526001815267ffffffffffffffff8381166020808401918252600087815260089091528490209251835491517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009092169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff161761010091909216021790555182907fabca9b7986bc22ad0160eb0cb88ae75411eacfba4052af0b457a9335ef655722906116059088908890612b5d565b60405180910390a26040516002907fea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e90600090a25050505050565b6001546040517f16bf5579000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b0316906316bf557990602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c7919061291d565b92915050565b8260005a3360009081526003602052604090205490915060ff161580156116ff57506002546001600160a01b03163314155b1561171d57604051632dd9fc9760e01b815260040160405180910390fd5b60008061172b8a8a8a611d5d565b909250905060008b82848b8a8a8680806117488787838888611fa5565b929c5090945092509050888a1480159061176457506000198914155b1561178c5760405163ac7411c960e01b8152600481018b9052602481018a90526044016105b9565b80838b7f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d60016040516117c79493929190612953565b60405180910390a4505050505050505050807ffe325ca1efe4c5c1062c981c3ee74b781debe4ea9440306a96d2a55759c66c208c8c60405161180a929190612b5d565b60405180910390a25050506001600160a01b0382161561113b57366000602061103d83601f6129de565b600054861161186f576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061195486846118836020890189612ba2565b61189360408a0160208b01612ba2565b61189e60018d612b1d565b6040805160f89690961b7fff000000000000000000000000000000000000000000000000000000000000001660208088019190915260609590951b6bffffffffffffffffffffffff1916602187015260c093841b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358801529290931b909116603d85015260458401526065830188905260858084018790528151808503909101815260a59093019052815191012090565b60045490915043906119696020880188612ba2565b67ffffffffffffffff1661197d91906129de565b106119b4576040517fad3515d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065442906119c96040880160208901612ba2565b67ffffffffffffffff166119dd91906129de565b10611a14576040517fc76d17e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001881115611a9d576001546001600160a01b031663d5719dc2611a3b60028b612b1d565b6040518263ffffffff1660e01b8152600401611a5991815260200190565b602060405180830381865afa158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a919061291d565b90505b60408051602080820184905281830185905282518083038401815260609092019092528051910120600180546001600160a01b03169063d5719dc290611ae3908c612b1d565b6040518263ffffffff1660e01b8152600401611b0191815260200190565b602060405180830381865afa158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b42919061291d565b14611b79576040517f13947fd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611b858a6123fc565b9150915060008a90506000600160009054906101000a90046001600160a01b03166001600160a01b0316635fca4a166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c07919061291d565b9050600080548d83611c1991906129de565b611c239190612b1d565b9050600080600080611c39898860008989611fa5565b93509350935093508083857f7394f4a19a13c7b92b5bb71033245305946ef78452f7b4986ac1390b5df4ebd7856000548d6002604051611c7c9493929190612953565b60405180910390a45050505050505050505050505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491611d039190612bf0565b600060405180830381855afa9150503d8060008114611d3e576040519150601f19603f3d011682016040523d82523d6000602084013e611d43565b606091505b5091509150818015611d56575080516020145b9250505090565b604080516080810182526000808252602082018190529181018290526060810182905284846000611d8f8260286129de565b90507f0000000000000000000000000000000000000000000000000000000000000000811115611e14576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016105b9565b8115801590611e8057507f4000000000000000000000000000000000000000000000000000000000000000808484600081611e5157611e51612b8c565b9050013560f81c60f81b167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611eb7576040517f1f97007f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60218210801590611f01575082826000818110611ed657611ed6612b8c565b909101357f800000000000000000000000000000000000000000000000000000000000000016151590505b15611f55576000611f16602160018587612c0c565b611f1f91612c36565b60008181526008602052604090205490915060ff16611f535760405162f20c5d60e01b8152600481018290526024016105b9565b505b600080611f6188612441565b915091506000828b8b604051602001611f7c93929190612c54565b60408051808303601f1901815291905280516020909101209b919a509098505050505050505050565b600080600080600054881015611fe7576040517f7d73e6fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a90046001600160a01b03166001600160a01b031663eca067ad6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e919061291d565b881115612097576040517f925f8bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f86598a56000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101889052606481018790526001600160a01b03909116906386598a56906084016080604051808303816000875af1158015612110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121349190612c7c565b60008c90559296509094509250905086156123f0573360607f0000000000000000000000000000000000000000000000000000000000000000156122bc576000606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d7919061291d565b905060006121e548836129f1565b905067ffffffffffffffff81111561223f5760405162461bcd60e51b815260206004820152601160248201527f4c315f4741535f4e4f545f55494e54363400000000000000000000000000000060448201526064016105b9565b60408051426020820152606086901b6bffffffffffffffffffffffff191681830152605481018f9052607481018a905248609482015260c09290921b7fffffffffffffffff0000000000000000000000000000000000000000000000001660b48301528051609c81840301815260bc9092019052915061230a9050565b604080514260208201526bffffffffffffffffffffffff19606085901b1691810191909152605481018c90526074810187905248609482015260b40160405160208183030381529060405290505b600154815160208301206040517f7a88b1070000000000000000000000000000000000000000000000000000000081526000926001600160a01b031691637a88b1079161236f9187916004016001600160a01b03929092168252602082015260400190565b6020604051808303816000875af115801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b2919061291d565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516123e49190612cb2565b60405180910390a25050505b95509550955095915050565b604080516080810182526000808252602082018190529181018290526060810182905260008061242b85612441565b8151602090920191909120969095509350505050565b6040805160808101825260008082526020820181905291810182905260608082018390529161246e612519565b905060008160000151826020015183604001518460600151886040516020016124ee95949392919060c095861b7fffffffffffffffff000000000000000000000000000000000000000000000000908116825294861b8516600882015292851b8416601084015290841b8316601883015290921b16602082015260280190565b6040516020818303038152906040529050602881511461251057612510612ce5565b94909350915050565b604080516080810182526000808252602082018190529181018290526060810191909152604080516080810182526000808252602082018190529181018290526060810191909152600654421115612585576006546125789042612b1d565b67ffffffffffffffff1681525b60075461259290426129de565b67ffffffffffffffff1660208201526004544311156125c8576004546125b89043612b1d565b67ffffffffffffffff1660408201525b6005546125d590436129de565b67ffffffffffffffff166060820152919050565b6000602082840312156125fb57600080fd5b5035919050565b6001600160a01b038116811461261757600080fd5b50565b60008082840360a081121561262e57600080fd5b833561263981612602565b92506080601f198201121561264d57600080fd5b506020830190509250929050565b801515811461261757600080fd5b6000806040838503121561267c57600080fd5b823561268781612602565b915060208301356126978161265b565b809150509250929050565b6000602082840312156126b457600080fd5b81356126bf81612602565b9392505050565b60008083601f8401126126d857600080fd5b50813567ffffffffffffffff8111156126f057600080fd5b60208301915083602082850101111561270857600080fd5b9250929050565b60008060008060006080868803121561272757600080fd5b85359450602086013567ffffffffffffffff81111561274557600080fd5b612751888289016126c6565b90955093505060408601359150606086013561276c81612602565b809150509295509295909350565b600080600080600080600060c0888a03121561279557600080fd5b87359650602088013567ffffffffffffffff8111156127b357600080fd5b6127bf8a828b016126c6565b9097509550506040880135935060608801356127da81612602565b969995985093969295946080840135945060a09093013592915050565b60006080828403121561280957600080fd5b6040516080810181811067ffffffffffffffff8211171561283a57634e487b7160e01b600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b6000806020838503121561287e57600080fd5b823567ffffffffffffffff81111561289557600080fd5b6128a1858286016126c6565b90969095509350505050565b60008060008060008060e087890312156128c657600080fd5b86359550602087013560ff811681146128de57600080fd5b945060808701888111156128f157600080fd5b60408801945035925060a087013561290881612602565b8092505060c087013590509295509295509295565b60006020828403121561292f57600080fd5b5051919050565b60006020828403121561294857600080fd5b81516126bf81612602565b600060e08201905085825284602083015267ffffffffffffffff8085511660408401528060208601511660608401528060408601511660808401528060608601511660a084015250600383106129b957634e487b7160e01b600052602160045260246000fd5b8260c083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156116c7576116c76129c8565b600082612a0e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612a4e578160001904821115612a3457612a346129c8565b80851615612a4157918102915b93841c9390800290612a18565b509250929050565b600082612a65575060016116c7565b81612a72575060006116c7565b8160018114612a885760028114612a9257612aae565b60019150506116c7565b60ff841115612aa357612aa36129c8565b50506001821b6116c7565b5060208310610133831016604e8410600b8410161715612ad1575081810a6116c7565b612adb8383612a13565b8060001904821115612aef57612aef6129c8565b029392505050565b60006126bf60ff841683612a56565b80820281158282048414176116c7576116c76129c8565b818103818111156116c7576116c76129c8565b600060208284031215612b4257600080fd5b81516126bf8161265b565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb457600080fd5b813567ffffffffffffffff811681146126bf57600080fd5b60005b83811015612be7578181015183820152602001612bcf565b50506000910152565b60008251612c02818460208701612bcc565b9190910192915050565b60008085851115612c1c57600080fd5b83861115612c2957600080fd5b5050820193919092039150565b803560208310156116c757600019602084900360031b1b1692915050565b60008451612c66818460208901612bcc565b8201838582376000930192835250909392505050565b60008060008060808587031215612c9257600080fd5b505082516020840151604085015160609095015191969095509092509050565b6020815260008251806020840152612cd1816040850160208701612bcc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052600160045260246000fdfea2646970667358221220cacf188fa3cbf4c612001fa5f39e0df9c0c81ac4ecf267a3fc690e0b4ac44e7464736f6c6343000811003360e0604052306080524660c05234801561001857600080fd5b5060405162002a9938038062002a9983398101604081905261003991610041565b60a05261005a565b60006020828403121561005357600080fd5b5051919050565b60805160a05160c0516129d0620000c96000396000818161053c01528181610753015281816111f50152818161158f0152611a1601526000818161047f015281816107cb0152818161082001528181611d380152611d91015260008181610b83015261163101526129d06000f3fe6080604052600436106101ab5760003560e01c80636e6e8a6a116100ec578063c474d2c51161008a578063e78cea9211610064578063e78cea9214610435578063e8eb1dc31461046d578063ee35f327146104a1578063efeadb6d146104c157600080fd5b8063c474d2c5146103e2578063e3de72a514610402578063e6bd12cf1461042257600080fd5b80638a631aa6116100c65780638a631aa614610352578063a66b327d14610372578063b75436bb14610392578063babcc539146103b257600080fd5b80636e6e8a6a1461030a57806370665f141461031d5780638456cb591461033d57600080fd5b8063439370b1116101595780635c975abb116101335780635c975abb146102b95780635e916758146102d1578063679b6ded146102e457806367ef3ab8146102f757600080fd5b8063439370b114610271578063485cc955146102795780635075788b1461029957600080fd5b80631fe927cf1161018a5780631fe927cf1461020957806322bd5c1c146102295780633f4ba83a1461025a57600080fd5b8062f72382146101b05780630f4d14e9146101e35780631b871c8d146101f6575b600080fd5b3480156101bc57600080fd5b506101d06101cb366004612126565b6104e1565b6040519081526020015b60405180910390f35b6101d06101f13660046121a3565b610628565b6101d06102043660046121bc565b61068b565b34801561021557600080fd5b506101d0610224366004612261565b6106fd565b34801561023557600080fd5b5060665461024a90600160a01b900460ff1681565b60405190151581526020016101da565b34801561026657600080fd5b5061026f6108a8565b005b6101d06109dd565b34801561028557600080fd5b5061026f6102943660046122a3565b610aaa565b3480156102a557600080fd5b506101d06102b4366004612126565b610cd3565b3480156102c557600080fd5b5060335460ff1661024a565b6101d06102df3660046122dc565b610d7e565b6101d06102f23660046121bc565b610e31565b6101d0610305366004612346565b610f67565b6101d06103183660046121bc565b61101d565b34801561032957600080fd5b506101d06103383660046123b9565b61119f565b34801561034957600080fd5b5061026f611326565b34801561035e57600080fd5b506101d061036d366004612406565b611458565b34801561037e57600080fd5b506101d061038d36600461245b565b611501565b34801561039e57600080fd5b506101d06103ad366004612261565b611539565b3480156103be57600080fd5b5061024a6103cd36600461247d565b60676020526000908152604090205460ff1681565b3480156103ee57600080fd5b5061026f6103fd36600461247d565b611627565b34801561040e57600080fd5b5061026f61041d366004612587565b61173b565b6101d0610430366004612346565b6119c0565b34801561044157600080fd5b50606554610455906001600160a01b031681565b6040516001600160a01b0390911681526020016101da565b34801561047957600080fd5b506101d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b50606654610455906001600160a01b031681565b3480156104cd57600080fd5b5061026f6104dc366004612649565b611ae2565b60006104eb611cdf565b606654600160a01b900460ff16801561051457503260009081526067602052604090205460ff16155b1561053957604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f00000000000000000000000000000000000000000000000000000000000000000361057957604051635180dd8360e11b815260040160405180910390fd5b3332146105995760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8811156105c25760405163107c527b60e01b815260040160405180910390fd5b61061c600373111100000000000000000000000000000000111019330160008b8b8b8b6001600160a01b03168b8b8b604051602001610608989796959493929190612664565b604051602081830303815290604052611d34565b98975050505050505050565b6000610632611cdf565b606654600160a01b900460ff16801561065b57503260009081526067602052604090205460ff16155b1561067b57604051630f51ed7160e41b8152326004820152602401610530565b6106836109dd565b90505b919050565b6000610695611cdf565b606654600160a01b900460ff1680156106be57503260009081526067602052604090205460ff16155b156106de57604051630f51ed7160e41b8152326004820152602401610530565b6106ef8a8a8a8a8a8a8a8a8a61101d565b9a9950505050505050505050565b6000610707611cdf565b606654600160a01b900460ff16801561073057503260009081526067602052604090205460ff16155b1561075057604051630f51ed7160e41b8152326004820152602401610530565b467f0000000000000000000000000000000000000000000000000000000000000000146107a9576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332146107c95760405163feb3d07160e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082111561084c576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610530565b600061087160033386866040516108649291906126c6565b6040518091039020611e13565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091691906126d6565b9050336001600160a01b038216146109d2576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c91906126d6565b9050336001600160a01b038216146109d057604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b6109da611ed9565b50565b60006109e7611cdf565b606654600160a01b900460ff168015610a1057503260009081526067602052604090205460ff16155b15610a3057604051630f51ed7160e41b8152326004820152602401610530565b33803b151580610a405750323314155b15610a5e575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152346034820152610aa490600c903390605401610608565b91505090565b600054610100900460ff1615808015610aca5750600054600160ff909116105b80610ae45750303b158015610ae4575060005460ff166001145b610b565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610530565b6000805460ff191660011790558015610b79576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c175760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610530565b606580546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117909155606680547fffffffffffffffffffffff00000000000000000000000000000000000000000016918416919091179055610c88611f2b565b8015610cce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610cdd611cdf565b606654600160a01b900460ff168015610d0657503260009081526067602052604090205460ff16155b15610d2657604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff881115610d4f5760405163107c527b60e01b815260040160405180910390fd5b61061c60033360008b8b8b8b6001600160a01b03168b8b8b604051602001610608989796959493929190612664565b6000610d88611cdf565b606654600160a01b900460ff168015610db157503260009081526067602052604090205460ff16155b15610dd157604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff861115610dfa5760405163107c527b60e01b815260040160405180910390fd5b610e2760073360018989896001600160a01b0316348a8a60405160200161060897969594939291906126f3565b9695505050505050565b6000610e3b611cdf565b606654600160a01b900460ff168015610e6457503260009081526067602052604090205460ff16155b15610e8457604051630f51ed7160e41b8152326004820152602401610530565b610e8e8486612764565b610e988a8a61277b565b610ea2919061277b565b341015610f0357610eb38486612764565b610ebd8a8a61277b565b610ec7919061277b565b6040517f7040b58c0000000000000000000000000000000000000000000000000000000081526004810191909152346024820152604401610530565b6001600160a01b0387163b15610f2d57731111000000000000000000000000000000001111870196505b6001600160a01b0386163b156106de57731111000000000000000000000000000000001111860195506106ef8a8a8a8a8a8a8a8a8a61101d565b6000610f71611cdf565b606654600160a01b900460ff168015610f9a57503260009081526067602052604090205460ff16155b15610fba57604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff871115610fe35760405163107c527b60e01b815260040160405180910390fd5b61101260073360008a8a8a8a6001600160a01b0316348b8b604051602001610608989796959493929190612664565b979650505050505050565b6000611027611cdf565b606654600160a01b900460ff16801561105057503260009081526067602052604090205460ff16155b1561107057604051630f51ed7160e41b8152326004820152602401610530565b846001148061107f5750836001145b156110cc57338a8a348b8b8b8b8b8b8b6040517f07c266e30000000000000000000000000000000000000000000000000000000081526004016105309b9a9998979695949392919061278e565b67ffffffffffffffff8511156110f55760405163107c527b60e01b815260040160405180910390fd5b60006111018348611501565b905080891015611147576040517ffadf238a00000000000000000000000000000000000000000000000000000000815260048101829052602481018a9052604401610530565b6111906009338d6001600160a01b03168d348e8e6001600160a01b03168e6001600160a01b03168e8e8e8e90508f8f6040516020016106089b9a99989796959493929190612814565b9b9a5050505050505050505050565b60006111a9611cdf565b606654600160a01b900460ff1680156111d257503260009081526067602052604090205460ff16155b156111f257604051630f51ed7160e41b8152326004820152602401610530565b467f00000000000000000000000000000000000000000000000000000000000000000361123257604051635180dd8360e11b815260040160405180910390fd5b3332146112525760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff86111561127b5760405163107c527b60e01b815260040160405180910390fd5b604080516001600160a01b0384166024808301919091528251808303909101815260449091018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e16063000000000000000000000000000000000000000000000000000000001790529151610e279260039233731111000000000000000000000000000000001110190192610608926000928d928d928d926064928e9201612892565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139491906126d6565b9050336001600160a01b03821614611450576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906126d6565b9050336001600160a01b0382161461144e57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b6109da611fb0565b6000611462611cdf565b606654600160a01b900460ff16801561148b57503260009081526067602052604090205460ff16155b156114ab57604051630f51ed7160e41b8152326004820152602401610530565b67ffffffffffffffff8711156114d45760405163107c527b60e01b815260040160405180910390fd5b61101260033360018a8a8a6001600160a01b03168a8a8a60405160200161060897969594939291906126f3565b6000811561150f5781611511565b485b61151c846006612764565b6115289061057861277b565b6115329190612764565b9392505050565b6000611543611cdf565b606654600160a01b900460ff16801561156c57503260009081526067602052604090205460ff16155b1561158c57604051630f51ed7160e41b8152326004820152602401610530565b467f0000000000000000000000000000000000000000000000000000000000000000146115e5576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61153260033385858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d3492505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116c55760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610530565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610cce576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610530565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a991906126d6565b9050336001600160a01b03821614611865576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f91906126d6565b9050336001600160a01b0382161461186357604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b81518351146118b65760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f494e505554000000000000000000000000000000000000006044820152606401610530565b60005b83518110156119ba578281815181106118d4576118d4612900565b6020026020010151606760008684815181106118f2576118f2612900565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555083818151811061194357611943612900565b60200260200101516001600160a01b03167fd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a84838151811061198757611987612900565b60200260200101516040516119a0911515815260200190565b60405180910390a2806119b281612916565b9150506118b9565b50505050565b60006119ca611cdf565b606654600160a01b900460ff1680156119f357503260009081526067602052604090205460ff16155b15611a1357604051630f51ed7160e41b8152326004820152602401610530565b467f000000000000000000000000000000000000000000000000000000000000000003611a5357604051635180dd8360e11b815260040160405180910390fd5b333214611a735760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff871115611a9c5760405163107c527b60e01b815260040160405180910390fd5b611012600773111100000000000000000000000000000000111019330160008a8a8a8a6001600160a01b0316348b8b604051602001610608989796959493929190612664565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5091906126d6565b9050336001600160a01b03821614611c0c576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc691906126d6565b9050336001600160a01b03821614611c0a57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610530565b505b606654600160a01b900460ff16151582151503611c6b5760405162461bcd60e51b815260206004820152600b60248201527f414c52454144595f5345540000000000000000000000000000000000000000006044820152606401610530565b60668054831515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb390611cd390841515815260200190565b60405180910390a15050565b60335460ff1615611d325760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610530565b565b60007f000000000000000000000000000000000000000000000000000000000000000082511115611dbd5781516040517f4634691b00000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610530565b6000611dd185858580519060200120611e13565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b84604051611e03919061294e565b60405180910390a2949350505050565b6065546000906001600160a01b0316638db5993b348673111100000000000000000000000000000000111187016040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260ff90921660048301526001600160a01b031660248201526044810186905260640160206040518083038185885af1158015611eac573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ed19190612981565b949350505050565b611ee1611fed565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff16611fa85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610530565b611d3261203f565b611fb8611cdf565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f0e3390565b60335460ff16611d325760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610530565b600054610100900460ff166120bc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610530565b6033805460ff19169055565b6001600160a01b03811681146109da57600080fd5b60008083601f8401126120ef57600080fd5b50813567ffffffffffffffff81111561210757600080fd5b60208301915083602082850101111561211f57600080fd5b9250929050565b600080600080600080600060c0888a03121561214157600080fd5b8735965060208801359550604088013594506060880135612161816120c8565b93506080880135925060a088013567ffffffffffffffff81111561218457600080fd5b6121908a828b016120dd565b989b979a50959850939692959293505050565b6000602082840312156121b557600080fd5b5035919050565b60008060008060008060008060006101008a8c0312156121db57600080fd5b89356121e6816120c8565b985060208a0135975060408a0135965060608a0135612204816120c8565b955060808a0135612214816120c8565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561223e57600080fd5b61224a8c828d016120dd565b915080935050809150509295985092959850929598565b6000806020838503121561227457600080fd5b823567ffffffffffffffff81111561228b57600080fd5b612297858286016120dd565b90969095509350505050565b600080604083850312156122b657600080fd5b82356122c1816120c8565b915060208301356122d1816120c8565b809150509250929050565b6000806000806000608086880312156122f457600080fd5b8535945060208601359350604086013561230d816120c8565b9250606086013567ffffffffffffffff81111561232957600080fd5b612335888289016120dd565b969995985093965092949392505050565b60008060008060008060a0878903121561235f57600080fd5b863595506020870135945060408701359350606087013561237f816120c8565b9250608087013567ffffffffffffffff81111561239b57600080fd5b6123a789828a016120dd565b979a9699509497509295939492505050565b600080600080600060a086880312156123d157600080fd5b8535945060208601359350604086013592506060860135915060808601356123f8816120c8565b809150509295509295909350565b60008060008060008060a0878903121561241f57600080fd5b86359550602087013594506040870135612438816120c8565b935060608701359250608087013567ffffffffffffffff81111561239b57600080fd5b6000806040838503121561246e57600080fd5b50508035926020909101359150565b60006020828403121561248f57600080fd5b8135611532816120c8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124d9576124d961249a565b604052919050565b600067ffffffffffffffff8211156124fb576124fb61249a565b5060051b60200190565b8035801515811461068657600080fd5b600082601f83011261252657600080fd5b8135602061253b612536836124e1565b6124b0565b82815260059290921b8401810191818101908684111561255a57600080fd5b8286015b8481101561257c5761256f81612505565b835291830191830161255e565b509695505050505050565b6000806040838503121561259a57600080fd5b823567ffffffffffffffff808211156125b257600080fd5b818501915085601f8301126125c657600080fd5b813560206125d6612536836124e1565b82815260059290921b840181019181810190898411156125f557600080fd5b948201945b8386101561261c57853561260d816120c8565b825294820194908201906125fa565b9650508601359250508082111561263257600080fd5b5061263f85828601612515565b9150509250929050565b60006020828403121561265b57600080fd5b61153282612505565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b168152876001820152866021820152856041820152846061820152836081820152818360a18301376000910160a101908152979650505050505050565b8183823760009101908152919050565b6000602082840312156126e857600080fd5b8151611532816120c8565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815286600182015285602182015284604182015283606182015281836081830137600091016081019081529695505050505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108a2576108a261274e565b808201808211156108a2576108a261274e565b60006101406001600160a01b03808f168452808e1660208501528c60408501528b60608501528a6080850152808a1660a085015280891660c0850152508660e084015285610100840152806101208401528381840152506101608385828501376000838501820152601f909301601f19169091019091019b9a5050505050505050505050565b8b81528a60208201528960408201528860608201528760808201528660a08201528560c08201528460e08201528361010082015260006101208385828501376000929093019092019081529b9a5050505050505050505050565b60005b83811015612889578181015183820152602001612871565b50506000910152565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b168152866001820152856021820152846041820152836061820152826081820152600082516128ed8160a185016020870161286e565b9190910160a10198975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129475761294761274e565b5060010190565b602081526000825180602084015261296d81604085016020870161286e565b601f01601f19169190910160400192915050565b60006020828403121561299357600080fd5b505191905056fea26469706673582212203fb619d192ddab43b02aa2709fd9cdd03156c9d91b417c53e00eb2ad7f1eb9a264736f6c6343000811003360a06040523060805234801561001457600080fd5b506080516109ae6100366000396000818160e801526102a701526109ae6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b6100746100843660046107a2565b61029d565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c63660046107c6565b610491565b60005461009c906001600160a01b031681565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101815760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146101f7576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610178565b60008054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361033b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610178565b6000546001600160a01b03161561037e576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166103be576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b031633146104eb5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610178565b806105385760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610178565b6001486105436106c4565b156105b857606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab919061085f565b6105b59082610878565b90505b600085838387876040516020016105d39594939291906108b8565b60408051808303601f190181529082905260008054825160208401207f8db5993b000000000000000000000000000000000000000000000000000000008552600b6004860152602485018390526044850152919350916001600160a01b0390911690638db5993b906064016020604051808303816000875af115801561065d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610681919061085f565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b39190610929565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491610730919061095c565b600060405180830381855afa9150503d806000811461076b576040519150601f19603f3d011682016040523d82523d6000602084013e610770565b606091505b5091509150818015610783575080516020145b9250505090565b6001600160a01b038116811461079f57600080fd5b50565b6000602082840312156107b457600080fd5b81356107bf8161078a565b9392505050565b6000806000604084860312156107db57600080fd5b83359250602084013567ffffffffffffffff808211156107fa57600080fd5b818601915086601f83011261080e57600080fd5b81358181111561081d57600080fd5b87602082850101111561082f57600080fd5b6020830194508093505050509250925092565b60006020828403121561085457600080fd5b81516107bf8161078a565b60006020828403121561087157600080fd5b5051919050565b808201808211156108b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b83811015610920578181015183820152602001610908565b50506000910152565b6020815260008251806020840152610948816040850160208701610905565b601f01601f19169190910160400192915050565b6000825161096e818460208701610905565b919091019291505056fea26469706673582212206dac08f48f4d7695476a9905fc98e80e1d29104caa21b58fff1336d7b803524c64736f6c6343000811003360a06040523060805234801561001457600080fd5b506080516117cd6100376000396000818161043c01526107bf01526117cd6000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638515bc6a116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb51461028e578063d5b5cc23146102a1578063e78cea92146102c157600080fd5b8063c4d66de81461025b578063c75184df1461026e57600080fd5b8063a04cee60116100b2578063a04cee6014610220578063ae6dead714610233578063b0f305371461025357600080fd5b80638515bc6a146102055780639f0c04bf1461020d57600080fd5b806346547790116101245780636ae71f12116101095780636ae71f12146101d557806372f2a8c7146101dd57806380648b02146101e557600080fd5b806346547790146101aa5780635a129efe146101b257600080fd5b80627436d31461015557806308635a951461017b5780631198527114610190578063288e5b1014610197575b600080fd5b6101686101633660046110f6565b6102d4565b6040519081526020015b60405180910390f35b61018e610189366004611218565b610311565b005b6000610168565b61018e6101a536600461130d565b610384565b6101686103d8565b6101c56101c03660046113a9565b610415565b6040519015158152602001610172565b61018e610432565b61016861060d565b6101ed610628565b6040516001600160a01b039091168152602001610172565b610168610666565b61016861021b3660046113c2565b6106a9565b61018e61022e366004611451565b6106ee565b6101686102413660046113a9565b60036020526000908152604090205481565b610168610786565b61018e610269366004611473565b6107b5565b610276600281565b6040516001600160801b039091168152602001610172565b6000546101ed906001600160a01b031681565b6101686102af3660046113a9565b60026020526000908152604090205481565b6001546101ed906001600160a01b031681565b60006103098484846040516020016102ee91815260200190565b60405160208183030381529060405280519060200120610a34565b949350505050565b600061032389898989898989896106a9565b90506103658c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610aef9050565b6103768a8a8a8a8a8a8a8a8a610c5c565b505050505050505050505050565b33156103bc576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103cd898989898989898989610c5c565b505050505050505050565b6004546000906001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b6001600160801b0316919050565b600080600061042384610f78565b92509250506103098282610fb5565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610565576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016104e6565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190611497565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6006546000906001810161062357506000919050565b919050565b6007546000906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000001810161062357600091505090565b60045460009070010000000000000000000000000000000090046001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b600088888888888888886040516020016106ca9897969594939291906114b4565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b03163314610747576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016104e6565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6005546000906001600160801b03166ffffffffffffffffffffffffffffffffe19810161040757600091505090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016104e6565b6001600160a01b0381166108ad576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b0316156108f0576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526001600160801b038082526020808301829052828401829052600019606084018190526001600160a01b0360809094018490526004818155600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169094179093556006556007805473ffffffffffffffffffffffffffffffffffffffff19908116851790915560018054948716949091168417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb5938184019390918290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190611497565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b8251600090610100811115610a80576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016104e6565b8260005b82811015610ae5576000878281518110610aa057610aa0611520565b60200260200101519050816001901b8716600003610acc57826000528060205260406000209250610adc565b8060005282602052604060002092505b50600101610a84565b5095945050505050565b610100835110610b305782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016104e691815260200190565b8251610b3d906002611630565b8210610b8d578183516002610b529190611630565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016104e6565b6000610b9a8484846102d4565b600081815260036020526040902054909150610be5576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016104e6565b6000806000610bf386610f78565b925092509250610c038282610fb5565b15610c3d576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016104e6565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610ca391815260200190565b60405180910390a4600060046040518060a00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016001820160009054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090506040518060a00160405280886001600160801b03168152602001876001600160801b03168152602001866001600160801b031681526020018b60001b81526020018a6001600160a01b0316815250600460008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555060408201518160010160006101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816002015560808201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050610ed4888585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fc492505050565b805160208201516001600160801b0391821670010000000000000000000000000000000091831691909102176004556040820151600580547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016919092161790556060810151600655608001516007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055505050505050505050565b6000808080610f8860ff86611652565b90506000610f9760ff87611666565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c49906110169088908890889060040161169e565b6000604051808303816000875af1158015611035573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261105d91908101906116e8565b91509150816110a8578051156110765780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110ee576110ee6110af565b604052919050565b60008060006060848603121561110b57600080fd5b833567ffffffffffffffff8082111561112357600080fd5b818601915086601f83011261113757600080fd5b813560208282111561114b5761114b6110af565b8160051b925061115c8184016110c5565b828152928401810192818101908a85111561117657600080fd5b948201945b848610156111945785358252948201949082019061117b565b9a918901359950506040909701359695505050505050565b6001600160a01b03811681146111c157600080fd5b50565b8035610623816111ac565b60008083601f8401126111e157600080fd5b50813567ffffffffffffffff8111156111f957600080fd5b60208301915083602082850101111561121157600080fd5b9250929050565b60008060008060008060008060008060006101208c8e03121561123a57600080fd5b8b3567ffffffffffffffff8082111561125257600080fd5b818e0191508e601f83011261126657600080fd5b81358181111561127557600080fd5b8f60208260051b850101111561128a57600080fd5b60208381019e50909c508e01359a506112a560408f016111c4565b99506112b360608f016111c4565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e01359150808211156112e657600080fd5b506112f38e828f016111cf565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561132c57600080fd5b8935985060208a013561133e816111ac565b975060408a013561134e816111ac565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561138657600080fd5b6113928c828d016111cf565b915080935050809150509295985092959850929598565b6000602082840312156113bb57600080fd5b5035919050565b60008060008060008060008060e0898b0312156113de57600080fd5b88356113e9816111ac565b975060208901356113f9816111ac565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561143157600080fd5b61143d8b828c016111cf565b999c989b5096995094979396929594505050565b6000806040838503121561146457600080fd5b50508035926020909101359150565b60006020828403121561148557600080fd5b8135611490816111ac565b9392505050565b6000602082840312156114a957600080fd5b8151611490816111ac565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561158757816000190482111561156d5761156d611536565b8085161561157a57918102915b93841c9390800290611551565b509250929050565b60008261159e57506001610fbe565b816115ab57506000610fbe565b81600181146115c157600281146115cb576115e7565b6001915050610fbe565b60ff8411156115dc576115dc611536565b50506001821b610fbe565b5060208310610133831016604e8410600b841016171561160a575081810a610fbe565b611614838361154c565b806000190482111561162857611628611536565b029392505050565b6000611490838361158f565b634e487b7160e01b600052601260045260246000fd5b6000826116615761166161163c565b500490565b6000826116755761167561163c565b500690565b60005b8381101561169557818101518382015260200161167d565b50506000910152565b6001600160a01b038416815282602082015260606040820152600082518060608401526116d281608085016020870161167a565b601f01601f191691909101608001949350505050565b600080604083850312156116fb57600080fd5b8251801515811461170b57600080fd5b602084015190925067ffffffffffffffff8082111561172957600080fd5b818501915085601f83011261173d57600080fd5b81518181111561174f5761174f6110af565b6117626020601f19601f840116016110c5565b915080825286602082850101111561177957600080fd5b61178a81602084016020860161167a565b508092505050925092905056fea2646970667358221220f97735c6ce65cfe41023d1626f05c807e67ba1b01a8fd4a0ace2ebdb6cc1e2fd64736f6c63430008110033", +// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. +// +// Solidity: function array() view returns(uint256[]) +func (_ConstantArrayStorage *ConstantArrayStorageCallerSession) Array() ([]*big.Int, error) { + return _ConstantArrayStorage.Contract.Array(&_ConstantArrayStorage.CallOpts) } -// BridgeCreatorABI is the input ABI used to generate the binding from. -// Deprecated: Use BridgeCreatorMetaData.ABI instead. -var BridgeCreatorABI = BridgeCreatorMetaData.ABI +// DeployHelperMetaData contains all meta data concerning the DeployHelper contract. +var DeployHelperMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"ERC1820_DEPLOYER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC1820_PAYLOAD\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC1820_VALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC2470_DEPLOYER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC2470_PAYLOAD\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC2470_VALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NICK_CREATE2_DEPLOYER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NICK_CREATE2_PAYLOAD\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NICK_CREATE2_VALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZOLTU_CREATE2_DEPLOYER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZOLTU_CREATE2_PAYLOAD\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZOLTU_VALUE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"}],\"name\":\"getDeploymentTotalCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_nativeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxFeePerGas\",\"type\":\"uint256\"}],\"name\":\"perform\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50611726806100206000396000f3fe6080604052600436106100dd5760003560e01c80639ed2c6f01161007f578063d7c641e711610059578063d7c641e71461024d578063db633c3e14610262578063dd0c625a1461016f578063ef77e71a1461027e57600080fd5b80639ed2c6f0146101ea578063acd7d02a14610205578063d3a3faab1461022557600080fd5b80634367d652116100bb5780634367d6521461016f57806355e34a6b1461019857806375ae22b5146101c057806389cf8ae6146101d557600080fd5b80631b9a680c146100e2578063290302ce1461010d5780632e7966411461015a575b600080fd5b3480156100ee57600080fd5b506100f76102a6565b60405161010491906108ab565b60405180910390f35b34801561011957600080fd5b5061013573a990077c3205cbdf861e17fa532eeb069ce9ff9681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b34801561016657600080fd5b506100f76102c2565b34801561017b57600080fd5b5061018a662386f26fc1000081565b604051908152602001610104565b3480156101a457600080fd5b5061013573bb6e024b9cffacb947a71991e386681b1cd1477d81565b3480156101cc57600080fd5b506100f76102e1565b3480156101e157600080fd5b506100f76102fd565b3480156101f657600080fd5b5061018a6657c084e5f3c00081565b34801561021157600080fd5b5061018a61022036600461093c565b61031c565b34801561023157600080fd5b50610135734c8d290a1b368ac4728d83a9e8321fc3af2b39b181565b61026061025b366004610968565b610423565b005b34801561026e57600080fd5b5061018a67011c37937e08000081565b34801561028a57600080fd5b50610135733fab184622dc19b6109349b94811493bf2a4536281565b6040518060e0016040528060a8815260200161164960a8913981565b60405180610a600160405280610a3c8152602001610a1c610a3c913981565b6040518060c00160405280608181526020016114586081913981565b604051806101a0016040528061017081526020016114d9610170913981565b6040517fa66b327d00000000000000000000000000000000000000000000000000000000815260006004820181905248602483015290819073ffffffffffffffffffffffffffffffffffffffff85169063a66b327d90604401602060405180830381865afa158015610392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b691906109a9565b90506103c4836152086109f1565b6103ce9082610a08565b6103d99060046109f1565b67011c37937e080000662386f26fc100006103fb6657c084e5f3c00082610a08565b6104059190610a08565b61040f9190610a08565b6104199190610a08565b9150505b92915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415905061049884662386f26fc10000733fab184622dc19b6109349b94811493bf2a453626040518060e0016040528060a8815260200161164960a89139858761059b565b6104dc846657c084e5f3c00073bb6e024b9cffacb947a71991e386681b1cd1477d604051806101a0016040528061017081526020016114d96101709139858761059b565b61051d84662386f26fc10000734c8d290a1b368ac4728d83a9e8321fc3af2b39b16040518060c001604052806081815260200161145860819139858761059b565b6105628467011c37937e08000073a990077c3205cbdf861e17fa532eeb069ce9ff9660405180610a600160405280610a3c8152602001610a1c610a3c9139858761059b565b806105955760405133904780156108fc02916000818181858888f19350505050158015610593573d6000803e3d6000fd5b505b50505050565b6040517fa66b327d0000000000000000000000000000000000000000000000000000000081526000600482018190524860248301529073ffffffffffffffffffffffffffffffffffffffff88169063a66b327d90604401602060405180830381865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063391906109a9565b90506000610643836152086109f1565b61064d8389610a08565b6106579190610a08565b9050831561073a576040517f549e842600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201899052604482018490523360648301819052608483015261520860a483015260c4820185905260e48201839052610120610104830152600061012483015289169063549e842690610144016020604051808303816000875af1158015610710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073491906109a9565b5061080b565b6040517f679b6ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201899052604482018490523360648301819052608483015261520860a483015260c4820185905261010060e4830152600061010483015289169063679b6ded9083906101240160206040518083038185885af11580156107e4573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061080991906109a9565b505b6040517fb75436bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169063b75436bb9061085d9088906004016108ab565b6020604051808303816000875af115801561087c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a091906109a9565b505050505050505050565b600060208083528351808285015260005b818110156108d8578581018301518582016040015282016108bc565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461093957600080fd5b50565b6000806040838503121561094f57600080fd5b823561095a81610917565b946020939093013593505050565b60008060006060848603121561097d57600080fd5b833561098881610917565b9250602084013561099881610917565b929592945050506040919091013590565b6000602082840312156109bb57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761041d5761041d6109c2565b8082018082111561041d5761041d6109c256fe04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a0182018201820182018201820182018201820182018201820182018201820182004f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a0222222222222222222222222222222222222222222222222222222222222222204f9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b8324700082247004f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222a264697066735822122004a5a214b558ee1c6faf6ef17ea0d59bf269d914d86ac2a82c82eab140505a4b64736f6c63430008110033", +} -// BridgeCreatorBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use BridgeCreatorMetaData.Bin instead. -var BridgeCreatorBin = BridgeCreatorMetaData.Bin +// DeployHelperABI is the input ABI used to generate the binding from. +// Deprecated: Use DeployHelperMetaData.ABI instead. +var DeployHelperABI = DeployHelperMetaData.ABI -// DeployBridgeCreator deploys a new Ethereum contract, binding an instance of BridgeCreator to it. -func DeployBridgeCreator(auth *bind.TransactOpts, backend bind.ContractBackend, maxDataSize *big.Int) (common.Address, *types.Transaction, *BridgeCreator, error) { - parsed, err := BridgeCreatorMetaData.GetAbi() +// DeployHelperBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DeployHelperMetaData.Bin instead. +var DeployHelperBin = DeployHelperMetaData.Bin + +// DeployDeployHelper deploys a new Ethereum contract, binding an instance of DeployHelper to it. +func DeployDeployHelper(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DeployHelper, error) { + parsed, err := DeployHelperMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err } @@ -1997,111 +3635,111 @@ func DeployBridgeCreator(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BridgeCreatorBin), backend, maxDataSize) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(DeployHelperBin), backend) if err != nil { return common.Address{}, nil, nil, err } - return address, tx, &BridgeCreator{BridgeCreatorCaller: BridgeCreatorCaller{contract: contract}, BridgeCreatorTransactor: BridgeCreatorTransactor{contract: contract}, BridgeCreatorFilterer: BridgeCreatorFilterer{contract: contract}}, nil + return address, tx, &DeployHelper{DeployHelperCaller: DeployHelperCaller{contract: contract}, DeployHelperTransactor: DeployHelperTransactor{contract: contract}, DeployHelperFilterer: DeployHelperFilterer{contract: contract}}, nil } -// BridgeCreator is an auto generated Go binding around an Ethereum contract. -type BridgeCreator struct { - BridgeCreatorCaller // Read-only binding to the contract - BridgeCreatorTransactor // Write-only binding to the contract - BridgeCreatorFilterer // Log filterer for contract events +// DeployHelper is an auto generated Go binding around an Ethereum contract. +type DeployHelper struct { + DeployHelperCaller // Read-only binding to the contract + DeployHelperTransactor // Write-only binding to the contract + DeployHelperFilterer // Log filterer for contract events } -// BridgeCreatorCaller is an auto generated read-only Go binding around an Ethereum contract. -type BridgeCreatorCaller struct { +// DeployHelperCaller is an auto generated read-only Go binding around an Ethereum contract. +type DeployHelperCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeCreatorTransactor is an auto generated write-only Go binding around an Ethereum contract. -type BridgeCreatorTransactor struct { +// DeployHelperTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DeployHelperTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeCreatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type BridgeCreatorFilterer struct { +// DeployHelperFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DeployHelperFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeCreatorSession is an auto generated Go binding around an Ethereum contract, +// DeployHelperSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type BridgeCreatorSession struct { - Contract *BridgeCreator // Generic contract binding to set the session for +type DeployHelperSession struct { + Contract *DeployHelper // Generic contract binding to set the session for CallOpts bind.CallOpts // Call options to use throughout this session TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// BridgeCreatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// DeployHelperCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type BridgeCreatorCallerSession struct { - Contract *BridgeCreatorCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session +type DeployHelperCallerSession struct { + Contract *DeployHelperCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session } -// BridgeCreatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// DeployHelperTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type BridgeCreatorTransactorSession struct { - Contract *BridgeCreatorTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +type DeployHelperTransactorSession struct { + Contract *DeployHelperTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// BridgeCreatorRaw is an auto generated low-level Go binding around an Ethereum contract. -type BridgeCreatorRaw struct { - Contract *BridgeCreator // Generic contract binding to access the raw methods on +// DeployHelperRaw is an auto generated low-level Go binding around an Ethereum contract. +type DeployHelperRaw struct { + Contract *DeployHelper // Generic contract binding to access the raw methods on } -// BridgeCreatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type BridgeCreatorCallerRaw struct { - Contract *BridgeCreatorCaller // Generic read-only contract binding to access the raw methods on +// DeployHelperCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DeployHelperCallerRaw struct { + Contract *DeployHelperCaller // Generic read-only contract binding to access the raw methods on } -// BridgeCreatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type BridgeCreatorTransactorRaw struct { - Contract *BridgeCreatorTransactor // Generic write-only contract binding to access the raw methods on +// DeployHelperTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DeployHelperTransactorRaw struct { + Contract *DeployHelperTransactor // Generic write-only contract binding to access the raw methods on } -// NewBridgeCreator creates a new instance of BridgeCreator, bound to a specific deployed contract. -func NewBridgeCreator(address common.Address, backend bind.ContractBackend) (*BridgeCreator, error) { - contract, err := bindBridgeCreator(address, backend, backend, backend) +// NewDeployHelper creates a new instance of DeployHelper, bound to a specific deployed contract. +func NewDeployHelper(address common.Address, backend bind.ContractBackend) (*DeployHelper, error) { + contract, err := bindDeployHelper(address, backend, backend, backend) if err != nil { return nil, err } - return &BridgeCreator{BridgeCreatorCaller: BridgeCreatorCaller{contract: contract}, BridgeCreatorTransactor: BridgeCreatorTransactor{contract: contract}, BridgeCreatorFilterer: BridgeCreatorFilterer{contract: contract}}, nil + return &DeployHelper{DeployHelperCaller: DeployHelperCaller{contract: contract}, DeployHelperTransactor: DeployHelperTransactor{contract: contract}, DeployHelperFilterer: DeployHelperFilterer{contract: contract}}, nil } -// NewBridgeCreatorCaller creates a new read-only instance of BridgeCreator, bound to a specific deployed contract. -func NewBridgeCreatorCaller(address common.Address, caller bind.ContractCaller) (*BridgeCreatorCaller, error) { - contract, err := bindBridgeCreator(address, caller, nil, nil) +// NewDeployHelperCaller creates a new read-only instance of DeployHelper, bound to a specific deployed contract. +func NewDeployHelperCaller(address common.Address, caller bind.ContractCaller) (*DeployHelperCaller, error) { + contract, err := bindDeployHelper(address, caller, nil, nil) if err != nil { return nil, err } - return &BridgeCreatorCaller{contract: contract}, nil + return &DeployHelperCaller{contract: contract}, nil } -// NewBridgeCreatorTransactor creates a new write-only instance of BridgeCreator, bound to a specific deployed contract. -func NewBridgeCreatorTransactor(address common.Address, transactor bind.ContractTransactor) (*BridgeCreatorTransactor, error) { - contract, err := bindBridgeCreator(address, nil, transactor, nil) +// NewDeployHelperTransactor creates a new write-only instance of DeployHelper, bound to a specific deployed contract. +func NewDeployHelperTransactor(address common.Address, transactor bind.ContractTransactor) (*DeployHelperTransactor, error) { + contract, err := bindDeployHelper(address, nil, transactor, nil) if err != nil { return nil, err } - return &BridgeCreatorTransactor{contract: contract}, nil + return &DeployHelperTransactor{contract: contract}, nil } -// NewBridgeCreatorFilterer creates a new log filterer instance of BridgeCreator, bound to a specific deployed contract. -func NewBridgeCreatorFilterer(address common.Address, filterer bind.ContractFilterer) (*BridgeCreatorFilterer, error) { - contract, err := bindBridgeCreator(address, nil, nil, filterer) +// NewDeployHelperFilterer creates a new log filterer instance of DeployHelper, bound to a specific deployed contract. +func NewDeployHelperFilterer(address common.Address, filterer bind.ContractFilterer) (*DeployHelperFilterer, error) { + contract, err := bindDeployHelper(address, nil, nil, filterer) if err != nil { return nil, err } - return &BridgeCreatorFilterer{contract: contract}, nil + return &DeployHelperFilterer{contract: contract}, nil } -// bindBridgeCreator binds a generic wrapper to an already deployed contract. -func bindBridgeCreator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := BridgeCreatorMetaData.GetAbi() +// bindDeployHelper binds a generic wrapper to an already deployed contract. +func bindDeployHelper(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := DeployHelperMetaData.GetAbi() if err != nil { return nil, err } @@ -2112,46 +3750,232 @@ func bindBridgeCreator(address common.Address, caller bind.ContractCaller, trans // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_BridgeCreator *BridgeCreatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BridgeCreator.Contract.BridgeCreatorCaller.contract.Call(opts, result, method, params...) +func (_DeployHelper *DeployHelperRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DeployHelper.Contract.DeployHelperCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_BridgeCreator *BridgeCreatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BridgeCreator.Contract.BridgeCreatorTransactor.contract.Transfer(opts) +func (_DeployHelper *DeployHelperRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployHelper.Contract.DeployHelperTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_BridgeCreator *BridgeCreatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BridgeCreator.Contract.BridgeCreatorTransactor.contract.Transact(opts, method, params...) +func (_DeployHelper *DeployHelperRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DeployHelper.Contract.DeployHelperTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_BridgeCreator *BridgeCreatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _BridgeCreator.Contract.contract.Call(opts, result, method, params...) +func (_DeployHelper *DeployHelperCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DeployHelper.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_BridgeCreator *BridgeCreatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BridgeCreator.Contract.contract.Transfer(opts) +func (_DeployHelper *DeployHelperTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployHelper.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_BridgeCreator *BridgeCreatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _BridgeCreator.Contract.contract.Transact(opts, method, params...) +func (_DeployHelper *DeployHelperTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DeployHelper.Contract.contract.Transact(opts, method, params...) +} + +// ERC1820DEPLOYER is a free data retrieval call binding the contract method 0x290302ce. +// +// Solidity: function ERC1820_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCaller) ERC1820DEPLOYER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC1820_DEPLOYER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ERC1820DEPLOYER is a free data retrieval call binding the contract method 0x290302ce. +// +// Solidity: function ERC1820_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperSession) ERC1820DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ERC1820DEPLOYER(&_DeployHelper.CallOpts) +} + +// ERC1820DEPLOYER is a free data retrieval call binding the contract method 0x290302ce. +// +// Solidity: function ERC1820_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCallerSession) ERC1820DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ERC1820DEPLOYER(&_DeployHelper.CallOpts) +} + +// ERC1820PAYLOAD is a free data retrieval call binding the contract method 0x2e796641. +// +// Solidity: function ERC1820_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCaller) ERC1820PAYLOAD(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC1820_PAYLOAD") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ERC1820PAYLOAD is a free data retrieval call binding the contract method 0x2e796641. +// +// Solidity: function ERC1820_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperSession) ERC1820PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ERC1820PAYLOAD(&_DeployHelper.CallOpts) +} + +// ERC1820PAYLOAD is a free data retrieval call binding the contract method 0x2e796641. +// +// Solidity: function ERC1820_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCallerSession) ERC1820PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ERC1820PAYLOAD(&_DeployHelper.CallOpts) +} + +// ERC1820VALUE is a free data retrieval call binding the contract method 0xdb633c3e. +// +// Solidity: function ERC1820_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCaller) ERC1820VALUE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC1820_VALUE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ERC1820VALUE is a free data retrieval call binding the contract method 0xdb633c3e. +// +// Solidity: function ERC1820_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperSession) ERC1820VALUE() (*big.Int, error) { + return _DeployHelper.Contract.ERC1820VALUE(&_DeployHelper.CallOpts) +} + +// ERC1820VALUE is a free data retrieval call binding the contract method 0xdb633c3e. +// +// Solidity: function ERC1820_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCallerSession) ERC1820VALUE() (*big.Int, error) { + return _DeployHelper.Contract.ERC1820VALUE(&_DeployHelper.CallOpts) +} + +// ERC2470DEPLOYER is a free data retrieval call binding the contract method 0x55e34a6b. +// +// Solidity: function ERC2470_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCaller) ERC2470DEPLOYER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC2470_DEPLOYER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ERC2470DEPLOYER is a free data retrieval call binding the contract method 0x55e34a6b. +// +// Solidity: function ERC2470_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperSession) ERC2470DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ERC2470DEPLOYER(&_DeployHelper.CallOpts) +} + +// ERC2470DEPLOYER is a free data retrieval call binding the contract method 0x55e34a6b. +// +// Solidity: function ERC2470_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCallerSession) ERC2470DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ERC2470DEPLOYER(&_DeployHelper.CallOpts) +} + +// ERC2470PAYLOAD is a free data retrieval call binding the contract method 0x89cf8ae6. +// +// Solidity: function ERC2470_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCaller) ERC2470PAYLOAD(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC2470_PAYLOAD") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ERC2470PAYLOAD is a free data retrieval call binding the contract method 0x89cf8ae6. +// +// Solidity: function ERC2470_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperSession) ERC2470PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ERC2470PAYLOAD(&_DeployHelper.CallOpts) +} + +// ERC2470PAYLOAD is a free data retrieval call binding the contract method 0x89cf8ae6. +// +// Solidity: function ERC2470_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCallerSession) ERC2470PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ERC2470PAYLOAD(&_DeployHelper.CallOpts) +} + +// ERC2470VALUE is a free data retrieval call binding the contract method 0x9ed2c6f0. +// +// Solidity: function ERC2470_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCaller) ERC2470VALUE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "ERC2470_VALUE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ERC2470VALUE is a free data retrieval call binding the contract method 0x9ed2c6f0. +// +// Solidity: function ERC2470_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperSession) ERC2470VALUE() (*big.Int, error) { + return _DeployHelper.Contract.ERC2470VALUE(&_DeployHelper.CallOpts) +} + +// ERC2470VALUE is a free data retrieval call binding the contract method 0x9ed2c6f0. +// +// Solidity: function ERC2470_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCallerSession) ERC2470VALUE() (*big.Int, error) { + return _DeployHelper.Contract.ERC2470VALUE(&_DeployHelper.CallOpts) } -// BridgeTemplate is a free data retrieval call binding the contract method 0x95fd089f. +// NICKCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xef77e71a. // -// Solidity: function bridgeTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) BridgeTemplate(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function NICK_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCaller) NICKCREATE2DEPLOYER(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "bridgeTemplate") + err := _DeployHelper.contract.Call(opts, &out, "NICK_CREATE2_DEPLOYER") if err != nil { return *new(common.Address), err @@ -2163,88 +3987,88 @@ func (_BridgeCreator *BridgeCreatorCaller) BridgeTemplate(opts *bind.CallOpts) ( } -// BridgeTemplate is a free data retrieval call binding the contract method 0x95fd089f. +// NICKCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xef77e71a. // -// Solidity: function bridgeTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) BridgeTemplate() (common.Address, error) { - return _BridgeCreator.Contract.BridgeTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperSession) NICKCREATE2DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.NICKCREATE2DEPLOYER(&_DeployHelper.CallOpts) } -// BridgeTemplate is a free data retrieval call binding the contract method 0x95fd089f. +// NICKCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xef77e71a. // -// Solidity: function bridgeTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) BridgeTemplate() (common.Address, error) { - return _BridgeCreator.Contract.BridgeTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCallerSession) NICKCREATE2DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.NICKCREATE2DEPLOYER(&_DeployHelper.CallOpts) } -// InboxTemplate is a free data retrieval call binding the contract method 0x7ba0e857. +// NICKCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x1b9a680c. // -// Solidity: function inboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) InboxTemplate(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function NICK_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCaller) NICKCREATE2PAYLOAD(opts *bind.CallOpts) ([]byte, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "inboxTemplate") + err := _DeployHelper.contract.Call(opts, &out, "NICK_CREATE2_PAYLOAD") if err != nil { - return *new(common.Address), err + return *new([]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) return out0, err } -// InboxTemplate is a free data retrieval call binding the contract method 0x7ba0e857. +// NICKCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x1b9a680c. // -// Solidity: function inboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) InboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.InboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperSession) NICKCREATE2PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.NICKCREATE2PAYLOAD(&_DeployHelper.CallOpts) } -// InboxTemplate is a free data retrieval call binding the contract method 0x7ba0e857. +// NICKCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x1b9a680c. // -// Solidity: function inboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) InboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.InboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCallerSession) NICKCREATE2PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.NICKCREATE2PAYLOAD(&_DeployHelper.CallOpts) } -// OutboxTemplate is a free data retrieval call binding the contract method 0xfc6a2ed0. +// NICKCREATE2VALUE is a free data retrieval call binding the contract method 0x4367d652. // -// Solidity: function outboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) OutboxTemplate(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function NICK_CREATE2_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCaller) NICKCREATE2VALUE(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "outboxTemplate") + err := _DeployHelper.contract.Call(opts, &out, "NICK_CREATE2_VALUE") if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// OutboxTemplate is a free data retrieval call binding the contract method 0xfc6a2ed0. +// NICKCREATE2VALUE is a free data retrieval call binding the contract method 0x4367d652. // -// Solidity: function outboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) OutboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.OutboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperSession) NICKCREATE2VALUE() (*big.Int, error) { + return _DeployHelper.Contract.NICKCREATE2VALUE(&_DeployHelper.CallOpts) } -// OutboxTemplate is a free data retrieval call binding the contract method 0xfc6a2ed0. +// NICKCREATE2VALUE is a free data retrieval call binding the contract method 0x4367d652. // -// Solidity: function outboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) OutboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.OutboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function NICK_CREATE2_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCallerSession) NICKCREATE2VALUE() (*big.Int, error) { + return _DeployHelper.Contract.NICKCREATE2VALUE(&_DeployHelper.CallOpts) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// ZOLTUCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xd3a3faab. // -// Solidity: function owner() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ZOLTU_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCaller) ZOLTUCREATE2DEPLOYER(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "owner") + err := _DeployHelper.contract.Call(opts, &out, "ZOLTU_CREATE2_DEPLOYER") if err != nil { return *new(common.Address), err @@ -2256,322 +4080,435 @@ func (_BridgeCreator *BridgeCreatorCaller) Owner(opts *bind.CallOpts) (common.Ad } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// ZOLTUCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xd3a3faab. // -// Solidity: function owner() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) Owner() (common.Address, error) { - return _BridgeCreator.Contract.Owner(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperSession) ZOLTUCREATE2DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ZOLTUCREATE2DEPLOYER(&_DeployHelper.CallOpts) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// ZOLTUCREATE2DEPLOYER is a free data retrieval call binding the contract method 0xd3a3faab. // -// Solidity: function owner() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) Owner() (common.Address, error) { - return _BridgeCreator.Contract.Owner(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_CREATE2_DEPLOYER() view returns(address) +func (_DeployHelper *DeployHelperCallerSession) ZOLTUCREATE2DEPLOYER() (common.Address, error) { + return _DeployHelper.Contract.ZOLTUCREATE2DEPLOYER(&_DeployHelper.CallOpts) } -// RollupEventInboxTemplate is a free data retrieval call binding the contract method 0xae583c03. +// ZOLTUCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x75ae22b5. // -// Solidity: function rollupEventInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) RollupEventInboxTemplate(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ZOLTU_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCaller) ZOLTUCREATE2PAYLOAD(opts *bind.CallOpts) ([]byte, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "rollupEventInboxTemplate") + err := _DeployHelper.contract.Call(opts, &out, "ZOLTU_CREATE2_PAYLOAD") if err != nil { - return *new(common.Address), err + return *new([]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) return out0, err } -// RollupEventInboxTemplate is a free data retrieval call binding the contract method 0xae583c03. +// ZOLTUCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x75ae22b5. // -// Solidity: function rollupEventInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) RollupEventInboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.RollupEventInboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperSession) ZOLTUCREATE2PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ZOLTUCREATE2PAYLOAD(&_DeployHelper.CallOpts) } -// RollupEventInboxTemplate is a free data retrieval call binding the contract method 0xae583c03. +// ZOLTUCREATE2PAYLOAD is a free data retrieval call binding the contract method 0x75ae22b5. // -// Solidity: function rollupEventInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) RollupEventInboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.RollupEventInboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_CREATE2_PAYLOAD() view returns(bytes) +func (_DeployHelper *DeployHelperCallerSession) ZOLTUCREATE2PAYLOAD() ([]byte, error) { + return _DeployHelper.Contract.ZOLTUCREATE2PAYLOAD(&_DeployHelper.CallOpts) } -// SequencerInboxTemplate is a free data retrieval call binding the contract method 0xe6027a87. +// ZOLTUVALUE is a free data retrieval call binding the contract method 0xdd0c625a. // -// Solidity: function sequencerInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCaller) SequencerInboxTemplate(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function ZOLTU_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCaller) ZOLTUVALUE(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _BridgeCreator.contract.Call(opts, &out, "sequencerInboxTemplate") + err := _DeployHelper.contract.Call(opts, &out, "ZOLTU_VALUE") if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// SequencerInboxTemplate is a free data retrieval call binding the contract method 0xe6027a87. +// ZOLTUVALUE is a free data retrieval call binding the contract method 0xdd0c625a. // -// Solidity: function sequencerInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorSession) SequencerInboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.SequencerInboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperSession) ZOLTUVALUE() (*big.Int, error) { + return _DeployHelper.Contract.ZOLTUVALUE(&_DeployHelper.CallOpts) } -// SequencerInboxTemplate is a free data retrieval call binding the contract method 0xe6027a87. +// ZOLTUVALUE is a free data retrieval call binding the contract method 0xdd0c625a. // -// Solidity: function sequencerInboxTemplate() view returns(address) -func (_BridgeCreator *BridgeCreatorCallerSession) SequencerInboxTemplate() (common.Address, error) { - return _BridgeCreator.Contract.SequencerInboxTemplate(&_BridgeCreator.CallOpts) +// Solidity: function ZOLTU_VALUE() view returns(uint256) +func (_DeployHelper *DeployHelperCallerSession) ZOLTUVALUE() (*big.Int, error) { + return _DeployHelper.Contract.ZOLTUVALUE(&_DeployHelper.CallOpts) } -// CreateBridge is a paid mutator transaction binding the contract method 0x6c6e47c0. +// GetDeploymentTotalCost is a free data retrieval call binding the contract method 0xacd7d02a. // -// Solidity: function createBridge(address adminProxy, address rollup, (uint256,uint256,uint256,uint256) maxTimeVariation) returns(address, address, address, address, address) -func (_BridgeCreator *BridgeCreatorTransactor) CreateBridge(opts *bind.TransactOpts, adminProxy common.Address, rollup common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { - return _BridgeCreator.contract.Transact(opts, "createBridge", adminProxy, rollup, maxTimeVariation) +// Solidity: function getDeploymentTotalCost(address inbox, uint256 maxFeePerGas) view returns(uint256) +func (_DeployHelper *DeployHelperCaller) GetDeploymentTotalCost(opts *bind.CallOpts, inbox common.Address, maxFeePerGas *big.Int) (*big.Int, error) { + var out []interface{} + err := _DeployHelper.contract.Call(opts, &out, "getDeploymentTotalCost", inbox, maxFeePerGas) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + } -// CreateBridge is a paid mutator transaction binding the contract method 0x6c6e47c0. +// GetDeploymentTotalCost is a free data retrieval call binding the contract method 0xacd7d02a. // -// Solidity: function createBridge(address adminProxy, address rollup, (uint256,uint256,uint256,uint256) maxTimeVariation) returns(address, address, address, address, address) -func (_BridgeCreator *BridgeCreatorSession) CreateBridge(adminProxy common.Address, rollup common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { - return _BridgeCreator.Contract.CreateBridge(&_BridgeCreator.TransactOpts, adminProxy, rollup, maxTimeVariation) +// Solidity: function getDeploymentTotalCost(address inbox, uint256 maxFeePerGas) view returns(uint256) +func (_DeployHelper *DeployHelperSession) GetDeploymentTotalCost(inbox common.Address, maxFeePerGas *big.Int) (*big.Int, error) { + return _DeployHelper.Contract.GetDeploymentTotalCost(&_DeployHelper.CallOpts, inbox, maxFeePerGas) } -// CreateBridge is a paid mutator transaction binding the contract method 0x6c6e47c0. +// GetDeploymentTotalCost is a free data retrieval call binding the contract method 0xacd7d02a. // -// Solidity: function createBridge(address adminProxy, address rollup, (uint256,uint256,uint256,uint256) maxTimeVariation) returns(address, address, address, address, address) -func (_BridgeCreator *BridgeCreatorTransactorSession) CreateBridge(adminProxy common.Address, rollup common.Address, maxTimeVariation ISequencerInboxMaxTimeVariation) (*types.Transaction, error) { - return _BridgeCreator.Contract.CreateBridge(&_BridgeCreator.TransactOpts, adminProxy, rollup, maxTimeVariation) +// Solidity: function getDeploymentTotalCost(address inbox, uint256 maxFeePerGas) view returns(uint256) +func (_DeployHelper *DeployHelperCallerSession) GetDeploymentTotalCost(inbox common.Address, maxFeePerGas *big.Int) (*big.Int, error) { + return _DeployHelper.Contract.GetDeploymentTotalCost(&_DeployHelper.CallOpts, inbox, maxFeePerGas) } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// Perform is a paid mutator transaction binding the contract method 0xd7c641e7. // -// Solidity: function renounceOwnership() returns() -func (_BridgeCreator *BridgeCreatorTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BridgeCreator.contract.Transact(opts, "renounceOwnership") +// Solidity: function perform(address _inbox, address _nativeToken, uint256 _maxFeePerGas) payable returns() +func (_DeployHelper *DeployHelperTransactor) Perform(opts *bind.TransactOpts, _inbox common.Address, _nativeToken common.Address, _maxFeePerGas *big.Int) (*types.Transaction, error) { + return _DeployHelper.contract.Transact(opts, "perform", _inbox, _nativeToken, _maxFeePerGas) } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// Perform is a paid mutator transaction binding the contract method 0xd7c641e7. // -// Solidity: function renounceOwnership() returns() -func (_BridgeCreator *BridgeCreatorSession) RenounceOwnership() (*types.Transaction, error) { - return _BridgeCreator.Contract.RenounceOwnership(&_BridgeCreator.TransactOpts) +// Solidity: function perform(address _inbox, address _nativeToken, uint256 _maxFeePerGas) payable returns() +func (_DeployHelper *DeployHelperSession) Perform(_inbox common.Address, _nativeToken common.Address, _maxFeePerGas *big.Int) (*types.Transaction, error) { + return _DeployHelper.Contract.Perform(&_DeployHelper.TransactOpts, _inbox, _nativeToken, _maxFeePerGas) } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// Perform is a paid mutator transaction binding the contract method 0xd7c641e7. // -// Solidity: function renounceOwnership() returns() -func (_BridgeCreator *BridgeCreatorTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _BridgeCreator.Contract.RenounceOwnership(&_BridgeCreator.TransactOpts) +// Solidity: function perform(address _inbox, address _nativeToken, uint256 _maxFeePerGas) payable returns() +func (_DeployHelper *DeployHelperTransactorSession) Perform(_inbox common.Address, _nativeToken common.Address, _maxFeePerGas *big.Int) (*types.Transaction, error) { + return _DeployHelper.Contract.Perform(&_DeployHelper.TransactOpts, _inbox, _nativeToken, _maxFeePerGas) } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BridgeCreator *BridgeCreatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _BridgeCreator.contract.Transact(opts, "transferOwnership", newOwner) +// ERC20RollupEventInboxMetaData contains all meta data concerning the ERC20RollupEventInbox contract. +var ERC20RollupEventInboxMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50608051610a7161003060003960006103380152610a716000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b61007461008436600461084e565b61032e565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c636600461086b565b610522565b60005461009c906001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015591906108e7565b6001600160a01b0316336001600160a01b03161461023d57600154604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156101cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f391906108e7565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b591906108e7565b6001549091506001600160a01b038083169116036102ff576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103cc5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610234565b6000546001600160a01b03161561040f576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661044f576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906108e7565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b0316331461057c5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610234565b806105c95760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610234565b6001486105d46106c3565b1561064957606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190610904565b610646908261091d565b90505b6000858383878760405160200161066495949392919061095d565b6040516020818303038152906040529050600061068082610789565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b291906109ce565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f20000000000000000000000000000000000000000000000000000000017905290516000918291829160649161072f9190610a1f565b600060405180830381855afa9150503d806000811461076a576040519150601f19603f3d011682016040523d82523d6000602084013e61076f565b606091505b5091509150818015610782575080516020145b9250505090565b60008054825160208401206040517f75d81e25000000000000000000000000000000000000000000000000000000008152600b60048201526024810184905260448101919091526064810183905282916001600160a01b0316906375d81e25906084016020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f9190610904565b9392505050565b6001600160a01b038116811461084b57600080fd5b50565b60006020828403121561086057600080fd5b813561082f81610836565b60008060006040848603121561088057600080fd5b83359250602084013567ffffffffffffffff8082111561089f57600080fd5b818601915086601f8301126108b357600080fd5b8135818111156108c257600080fd5b8760208285010111156108d457600080fd5b6020830194508093505050509250925092565b6000602082840312156108f957600080fd5b815161082f81610836565b60006020828403121561091657600080fd5b5051919050565b80820180821115610957577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b838110156109c55781810151838201526020016109ad565b50506000910152565b60208152600082518060208401526109ed8160408501602087016109aa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008251610a318184602087016109aa565b919091019291505056fea26469706673582212202efcd08acdb43d491aa81dcbc204fb9d712996c0ccf168016145c84963578c9d64736f6c63430008110033", } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BridgeCreator *BridgeCreatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BridgeCreator.Contract.TransferOwnership(&_BridgeCreator.TransactOpts, newOwner) +// ERC20RollupEventInboxABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20RollupEventInboxMetaData.ABI instead. +var ERC20RollupEventInboxABI = ERC20RollupEventInboxMetaData.ABI + +// ERC20RollupEventInboxBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20RollupEventInboxMetaData.Bin instead. +var ERC20RollupEventInboxBin = ERC20RollupEventInboxMetaData.Bin + +// DeployERC20RollupEventInbox deploys a new Ethereum contract, binding an instance of ERC20RollupEventInbox to it. +func DeployERC20RollupEventInbox(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ERC20RollupEventInbox, error) { + parsed, err := ERC20RollupEventInboxMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20RollupEventInboxBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20RollupEventInbox{ERC20RollupEventInboxCaller: ERC20RollupEventInboxCaller{contract: contract}, ERC20RollupEventInboxTransactor: ERC20RollupEventInboxTransactor{contract: contract}, ERC20RollupEventInboxFilterer: ERC20RollupEventInboxFilterer{contract: contract}}, nil } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BridgeCreator *BridgeCreatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BridgeCreator.Contract.TransferOwnership(&_BridgeCreator.TransactOpts, newOwner) +// ERC20RollupEventInbox is an auto generated Go binding around an Ethereum contract. +type ERC20RollupEventInbox struct { + ERC20RollupEventInboxCaller // Read-only binding to the contract + ERC20RollupEventInboxTransactor // Write-only binding to the contract + ERC20RollupEventInboxFilterer // Log filterer for contract events } -// UpdateTemplates is a paid mutator transaction binding the contract method 0x2147e58e. -// -// Solidity: function updateTemplates(address _bridgeTemplate, address _sequencerInboxTemplate, address _inboxTemplate, address _rollupEventInboxTemplate, address _outboxTemplate) returns() -func (_BridgeCreator *BridgeCreatorTransactor) UpdateTemplates(opts *bind.TransactOpts, _bridgeTemplate common.Address, _sequencerInboxTemplate common.Address, _inboxTemplate common.Address, _rollupEventInboxTemplate common.Address, _outboxTemplate common.Address) (*types.Transaction, error) { - return _BridgeCreator.contract.Transact(opts, "updateTemplates", _bridgeTemplate, _sequencerInboxTemplate, _inboxTemplate, _rollupEventInboxTemplate, _outboxTemplate) +// ERC20RollupEventInboxCaller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20RollupEventInboxCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// UpdateTemplates is a paid mutator transaction binding the contract method 0x2147e58e. -// -// Solidity: function updateTemplates(address _bridgeTemplate, address _sequencerInboxTemplate, address _inboxTemplate, address _rollupEventInboxTemplate, address _outboxTemplate) returns() -func (_BridgeCreator *BridgeCreatorSession) UpdateTemplates(_bridgeTemplate common.Address, _sequencerInboxTemplate common.Address, _inboxTemplate common.Address, _rollupEventInboxTemplate common.Address, _outboxTemplate common.Address) (*types.Transaction, error) { - return _BridgeCreator.Contract.UpdateTemplates(&_BridgeCreator.TransactOpts, _bridgeTemplate, _sequencerInboxTemplate, _inboxTemplate, _rollupEventInboxTemplate, _outboxTemplate) +// ERC20RollupEventInboxTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20RollupEventInboxTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// UpdateTemplates is a paid mutator transaction binding the contract method 0x2147e58e. -// -// Solidity: function updateTemplates(address _bridgeTemplate, address _sequencerInboxTemplate, address _inboxTemplate, address _rollupEventInboxTemplate, address _outboxTemplate) returns() -func (_BridgeCreator *BridgeCreatorTransactorSession) UpdateTemplates(_bridgeTemplate common.Address, _sequencerInboxTemplate common.Address, _inboxTemplate common.Address, _rollupEventInboxTemplate common.Address, _outboxTemplate common.Address) (*types.Transaction, error) { - return _BridgeCreator.Contract.UpdateTemplates(&_BridgeCreator.TransactOpts, _bridgeTemplate, _sequencerInboxTemplate, _inboxTemplate, _rollupEventInboxTemplate, _outboxTemplate) +// ERC20RollupEventInboxFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20RollupEventInboxFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// BridgeCreatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BridgeCreator contract. -type BridgeCreatorOwnershipTransferredIterator struct { - Event *BridgeCreatorOwnershipTransferred // Event containing the contract specifics and raw log +// ERC20RollupEventInboxSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20RollupEventInboxSession struct { + Contract *ERC20RollupEventInbox // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data +// ERC20RollupEventInboxCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20RollupEventInboxCallerSession struct { + Contract *ERC20RollupEventInboxCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration +// ERC20RollupEventInboxTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20RollupEventInboxTransactorSession struct { + Contract *ERC20RollupEventInboxTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BridgeCreatorOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false +// ERC20RollupEventInboxRaw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20RollupEventInboxRaw struct { + Contract *ERC20RollupEventInbox // Generic contract binding to access the raw methods on +} + +// ERC20RollupEventInboxCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20RollupEventInboxCallerRaw struct { + Contract *ERC20RollupEventInboxCaller // Generic read-only contract binding to access the raw methods on +} + +// ERC20RollupEventInboxTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20RollupEventInboxTransactorRaw struct { + Contract *ERC20RollupEventInboxTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20RollupEventInbox creates a new instance of ERC20RollupEventInbox, bound to a specific deployed contract. +func NewERC20RollupEventInbox(address common.Address, backend bind.ContractBackend) (*ERC20RollupEventInbox, error) { + contract, err := bindERC20RollupEventInbox(address, backend, backend, backend) + if err != nil { + return nil, err } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BridgeCreatorOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true + return &ERC20RollupEventInbox{ERC20RollupEventInboxCaller: ERC20RollupEventInboxCaller{contract: contract}, ERC20RollupEventInboxTransactor: ERC20RollupEventInboxTransactor{contract: contract}, ERC20RollupEventInboxFilterer: ERC20RollupEventInboxFilterer{contract: contract}}, nil +} - default: - return false - } +// NewERC20RollupEventInboxCaller creates a new read-only instance of ERC20RollupEventInbox, bound to a specific deployed contract. +func NewERC20RollupEventInboxCaller(address common.Address, caller bind.ContractCaller) (*ERC20RollupEventInboxCaller, error) { + contract, err := bindERC20RollupEventInbox(address, caller, nil, nil) + if err != nil { + return nil, err } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BridgeCreatorOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true + return &ERC20RollupEventInboxCaller{contract: contract}, nil +} - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() +// NewERC20RollupEventInboxTransactor creates a new write-only instance of ERC20RollupEventInbox, bound to a specific deployed contract. +func NewERC20RollupEventInboxTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC20RollupEventInboxTransactor, error) { + contract, err := bindERC20RollupEventInbox(address, nil, transactor, nil) + if err != nil { + return nil, err } + return &ERC20RollupEventInboxTransactor{contract: contract}, nil } -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeCreatorOwnershipTransferredIterator) Error() error { - return it.fail +// NewERC20RollupEventInboxFilterer creates a new log filterer instance of ERC20RollupEventInbox, bound to a specific deployed contract. +func NewERC20RollupEventInboxFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC20RollupEventInboxFilterer, error) { + contract, err := bindERC20RollupEventInbox(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20RollupEventInboxFilterer{contract: contract}, nil } -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BridgeCreatorOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil +// bindERC20RollupEventInbox binds a generic wrapper to an already deployed contract. +func bindERC20RollupEventInbox(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20RollupEventInboxMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } -// BridgeCreatorOwnershipTransferred represents a OwnershipTransferred event raised by the BridgeCreator contract. -type BridgeCreatorOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20RollupEventInbox.Contract.ERC20RollupEventInboxCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.ERC20RollupEventInboxTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.ERC20RollupEventInboxTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20RollupEventInbox.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.contract.Transact(opts, method, params...) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20RollupEventInbox.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxSession) Bridge() (common.Address, error) { + return _ERC20RollupEventInbox.Contract.Bridge(&_ERC20RollupEventInbox.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxCallerSession) Bridge() (common.Address, error) { + return _ERC20RollupEventInbox.Contract.Bridge(&_ERC20RollupEventInbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxCaller) Rollup(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20RollupEventInbox.contract.Call(opts, &out, "rollup") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxSession) Rollup() (common.Address, error) { + return _ERC20RollupEventInbox.Contract.Rollup(&_ERC20RollupEventInbox.CallOpts) +} + +// Rollup is a free data retrieval call binding the contract method 0xcb23bcb5. +// +// Solidity: function rollup() view returns(address) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxCallerSession) Rollup() (common.Address, error) { + return _ERC20RollupEventInbox.Contract.Rollup(&_ERC20RollupEventInbox.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _ERC20RollupEventInbox.contract.Transact(opts, "initialize", _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.Initialize(&_ERC20RollupEventInbox.TransactOpts, _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.Initialize(&_ERC20RollupEventInbox.TransactOpts, _bridge) +} + +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. +// +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactor) RollupInitialized(opts *bind.TransactOpts, chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _ERC20RollupEventInbox.contract.Transact(opts, "rollupInitialized", chainId, chainConfig) } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BridgeCreator *BridgeCreatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BridgeCreatorOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _BridgeCreator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &BridgeCreatorOwnershipTransferredIterator{contract: _BridgeCreator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.RollupInitialized(&_ERC20RollupEventInbox.TransactOpts, chainId, chainConfig) } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// RollupInitialized is a paid mutator transaction binding the contract method 0xcf8d56d6. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BridgeCreator *BridgeCreatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BridgeCreatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } +// Solidity: function rollupInitialized(uint256 chainId, string chainConfig) returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactorSession) RollupInitialized(chainId *big.Int, chainConfig string) (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.RollupInitialized(&_ERC20RollupEventInbox.TransactOpts, chainId, chainConfig) +} - logs, sub, err := _BridgeCreator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BridgeCreatorOwnershipTransferred) - if err := _BridgeCreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactor) UpdateRollupAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20RollupEventInbox.contract.Transact(opts, "updateRollupAddress") +} - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. +// +// Solidity: function updateRollupAddress() returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxSession) UpdateRollupAddress() (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.UpdateRollupAddress(&_ERC20RollupEventInbox.TransactOpts) } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BridgeCreator *BridgeCreatorFilterer) ParseOwnershipTransferred(log types.Log) (*BridgeCreatorOwnershipTransferred, error) { - event := new(BridgeCreatorOwnershipTransferred) - if err := _BridgeCreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function updateRollupAddress() returns() +func (_ERC20RollupEventInbox *ERC20RollupEventInboxTransactorSession) UpdateRollupAddress() (*types.Transaction, error) { + return _ERC20RollupEventInbox.Contract.UpdateRollupAddress(&_ERC20RollupEventInbox.TransactOpts) } -// BridgeCreatorTemplatesUpdatedIterator is returned from FilterTemplatesUpdated and is used to iterate over the raw logs and unpacked data for TemplatesUpdated events raised by the BridgeCreator contract. -type BridgeCreatorTemplatesUpdatedIterator struct { - Event *BridgeCreatorTemplatesUpdated // Event containing the contract specifics and raw log +// ERC20RollupEventInboxInboxMessageDeliveredIterator is returned from FilterInboxMessageDelivered and is used to iterate over the raw logs and unpacked data for InboxMessageDelivered events raised by the ERC20RollupEventInbox contract. +type ERC20RollupEventInboxInboxMessageDeliveredIterator struct { + Event *ERC20RollupEventInboxInboxMessageDelivered // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2585,7 +4522,7 @@ type BridgeCreatorTemplatesUpdatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *BridgeCreatorTemplatesUpdatedIterator) Next() bool { +func (it *ERC20RollupEventInboxInboxMessageDeliveredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2594,7 +4531,7 @@ func (it *BridgeCreatorTemplatesUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BridgeCreatorTemplatesUpdated) + it.Event = new(ERC20RollupEventInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2609,7 +4546,7 @@ func (it *BridgeCreatorTemplatesUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BridgeCreatorTemplatesUpdated) + it.Event = new(ERC20RollupEventInboxInboxMessageDelivered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2625,40 +4562,52 @@ func (it *BridgeCreatorTemplatesUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BridgeCreatorTemplatesUpdatedIterator) Error() error { +func (it *ERC20RollupEventInboxInboxMessageDeliveredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BridgeCreatorTemplatesUpdatedIterator) Close() error { +func (it *ERC20RollupEventInboxInboxMessageDeliveredIterator) Close() error { it.sub.Unsubscribe() return nil } -// BridgeCreatorTemplatesUpdated represents a TemplatesUpdated event raised by the BridgeCreator contract. -type BridgeCreatorTemplatesUpdated struct { - Raw types.Log // Blockchain specific contextual infos +// ERC20RollupEventInboxInboxMessageDelivered represents a InboxMessageDelivered event raised by the ERC20RollupEventInbox contract. +type ERC20RollupEventInboxInboxMessageDelivered struct { + MessageNum *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterTemplatesUpdated is a free log retrieval operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// FilterInboxMessageDelivered is a free log retrieval operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event TemplatesUpdated() -func (_BridgeCreator *BridgeCreatorFilterer) FilterTemplatesUpdated(opts *bind.FilterOpts) (*BridgeCreatorTemplatesUpdatedIterator, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) FilterInboxMessageDelivered(opts *bind.FilterOpts, messageNum []*big.Int) (*ERC20RollupEventInboxInboxMessageDeliveredIterator, error) { - logs, sub, err := _BridgeCreator.contract.FilterLogs(opts, "TemplatesUpdated") + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20RollupEventInbox.contract.FilterLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } - return &BridgeCreatorTemplatesUpdatedIterator{contract: _BridgeCreator.contract, event: "TemplatesUpdated", logs: logs, sub: sub}, nil + return &ERC20RollupEventInboxInboxMessageDeliveredIterator{contract: _ERC20RollupEventInbox.contract, event: "InboxMessageDelivered", logs: logs, sub: sub}, nil } -// WatchTemplatesUpdated is a free log subscription operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// WatchInboxMessageDelivered is a free log subscription operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event TemplatesUpdated() -func (_BridgeCreator *BridgeCreatorFilterer) WatchTemplatesUpdated(opts *bind.WatchOpts, sink chan<- *BridgeCreatorTemplatesUpdated) (event.Subscription, error) { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) WatchInboxMessageDelivered(opts *bind.WatchOpts, sink chan<- *ERC20RollupEventInboxInboxMessageDelivered, messageNum []*big.Int) (event.Subscription, error) { - logs, sub, err := _BridgeCreator.contract.WatchLogs(opts, "TemplatesUpdated") + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + + logs, sub, err := _ERC20RollupEventInbox.contract.WatchLogs(opts, "InboxMessageDelivered", messageNumRule) if err != nil { return nil, err } @@ -2668,8 +4617,8 @@ func (_BridgeCreator *BridgeCreatorFilterer) WatchTemplatesUpdated(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BridgeCreatorTemplatesUpdated) - if err := _BridgeCreator.contract.UnpackLog(event, "TemplatesUpdated", log); err != nil { + event := new(ERC20RollupEventInboxInboxMessageDelivered) + if err := _ERC20RollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return err } event.Raw = log @@ -2690,220 +4639,160 @@ func (_BridgeCreator *BridgeCreatorFilterer) WatchTemplatesUpdated(opts *bind.Wa }), nil } -// ParseTemplatesUpdated is a log parse operation binding the contract event 0xc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b. +// ParseInboxMessageDelivered is a log parse operation binding the contract event 0xff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b. // -// Solidity: event TemplatesUpdated() -func (_BridgeCreator *BridgeCreatorFilterer) ParseTemplatesUpdated(log types.Log) (*BridgeCreatorTemplatesUpdated, error) { - event := new(BridgeCreatorTemplatesUpdated) - if err := _BridgeCreator.contract.UnpackLog(event, "TemplatesUpdated", log); err != nil { +// Solidity: event InboxMessageDelivered(uint256 indexed messageNum, bytes data) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) ParseInboxMessageDelivered(log types.Log) (*ERC20RollupEventInboxInboxMessageDelivered, error) { + event := new(ERC20RollupEventInboxInboxMessageDelivered) + if err := _ERC20RollupEventInbox.contract.UnpackLog(event, "InboxMessageDelivered", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ConstantArrayStorageMetaData contains all meta data concerning the ConstantArrayStorage contract. -var ConstantArrayStorageMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"__array\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"array\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516102a03803806102a083398101604081905261002f916100bf565b8051610042906000906020840190610049565b505061017c565b828054828255906000526020600020908101928215610084579160200282015b82811115610084578251825591602001919060010190610069565b50610090929150610094565b5090565b5b808211156100905760008155600101610095565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156100d257600080fd5b82516001600160401b03808211156100e957600080fd5b818501915085601f8301126100fd57600080fd5b81518181111561010f5761010f6100a9565b8060051b604051601f19603f83011681018181108582111715610134576101346100a9565b60405291825284820192508381018501918883111561015257600080fd5b938501935b8285101561017057845184529385019392850192610157565b98975050505050505050565b6101158061018b6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063b0ec2ae114602d575b600080fd5b60336047565b604051603e9190609d565b60405180910390f35b60606000805480602002602001604051908101604052809291908181526020018280548015609357602002820191906000526020600020905b8154815260200190600101908083116080575b5050505050905090565b6020808252825182820181905260009190848201906040850190845b8181101560d35783518352928401929184019160010160b9565b5090969550505050505056fea2646970667358221220c5ce6fa0f504bc6a45064e5ddfe4323d9979fa8f7ed56f99dd0243bbe6af6c0664736f6c63430008110033", -} - -// ConstantArrayStorageABI is the input ABI used to generate the binding from. -// Deprecated: Use ConstantArrayStorageMetaData.ABI instead. -var ConstantArrayStorageABI = ConstantArrayStorageMetaData.ABI - -// ConstantArrayStorageBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ConstantArrayStorageMetaData.Bin instead. -var ConstantArrayStorageBin = ConstantArrayStorageMetaData.Bin - -// DeployConstantArrayStorage deploys a new Ethereum contract, binding an instance of ConstantArrayStorage to it. -func DeployConstantArrayStorage(auth *bind.TransactOpts, backend bind.ContractBackend, __array []*big.Int) (common.Address, *types.Transaction, *ConstantArrayStorage, error) { - parsed, err := ConstantArrayStorageMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ConstantArrayStorageBin), backend, __array) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ConstantArrayStorage{ConstantArrayStorageCaller: ConstantArrayStorageCaller{contract: contract}, ConstantArrayStorageTransactor: ConstantArrayStorageTransactor{contract: contract}, ConstantArrayStorageFilterer: ConstantArrayStorageFilterer{contract: contract}}, nil -} - -// ConstantArrayStorage is an auto generated Go binding around an Ethereum contract. -type ConstantArrayStorage struct { - ConstantArrayStorageCaller // Read-only binding to the contract - ConstantArrayStorageTransactor // Write-only binding to the contract - ConstantArrayStorageFilterer // Log filterer for contract events -} - -// ConstantArrayStorageCaller is an auto generated read-only Go binding around an Ethereum contract. -type ConstantArrayStorageCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ConstantArrayStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ConstantArrayStorageTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ConstantArrayStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ConstantArrayStorageFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ConstantArrayStorageSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ConstantArrayStorageSession struct { - Contract *ConstantArrayStorage // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ConstantArrayStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ConstantArrayStorageCallerSession struct { - Contract *ConstantArrayStorageCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ConstantArrayStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ConstantArrayStorageTransactorSession struct { - Contract *ConstantArrayStorageTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ConstantArrayStorageRaw is an auto generated low-level Go binding around an Ethereum contract. -type ConstantArrayStorageRaw struct { - Contract *ConstantArrayStorage // Generic contract binding to access the raw methods on -} - -// ConstantArrayStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ConstantArrayStorageCallerRaw struct { - Contract *ConstantArrayStorageCaller // Generic read-only contract binding to access the raw methods on -} - -// ConstantArrayStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ConstantArrayStorageTransactorRaw struct { - Contract *ConstantArrayStorageTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewConstantArrayStorage creates a new instance of ConstantArrayStorage, bound to a specific deployed contract. -func NewConstantArrayStorage(address common.Address, backend bind.ContractBackend) (*ConstantArrayStorage, error) { - contract, err := bindConstantArrayStorage(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ConstantArrayStorage{ConstantArrayStorageCaller: ConstantArrayStorageCaller{contract: contract}, ConstantArrayStorageTransactor: ConstantArrayStorageTransactor{contract: contract}, ConstantArrayStorageFilterer: ConstantArrayStorageFilterer{contract: contract}}, nil -} - -// NewConstantArrayStorageCaller creates a new read-only instance of ConstantArrayStorage, bound to a specific deployed contract. -func NewConstantArrayStorageCaller(address common.Address, caller bind.ContractCaller) (*ConstantArrayStorageCaller, error) { - contract, err := bindConstantArrayStorage(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ConstantArrayStorageCaller{contract: contract}, nil -} +// ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator is returned from FilterInboxMessageDeliveredFromOrigin and is used to iterate over the raw logs and unpacked data for InboxMessageDeliveredFromOrigin events raised by the ERC20RollupEventInbox contract. +type ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator struct { + Event *ERC20RollupEventInboxInboxMessageDeliveredFromOrigin // Event containing the contract specifics and raw log -// NewConstantArrayStorageTransactor creates a new write-only instance of ConstantArrayStorage, bound to a specific deployed contract. -func NewConstantArrayStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*ConstantArrayStorageTransactor, error) { - contract, err := bindConstantArrayStorage(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ConstantArrayStorageTransactor{contract: contract}, nil -} + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// NewConstantArrayStorageFilterer creates a new log filterer instance of ConstantArrayStorage, bound to a specific deployed contract. -func NewConstantArrayStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*ConstantArrayStorageFilterer, error) { - contract, err := bindConstantArrayStorage(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ConstantArrayStorageFilterer{contract: contract}, nil + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration } -// bindConstantArrayStorage binds a generic wrapper to an already deployed contract. -func bindConstantArrayStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ConstantArrayStorageMetaData.GetAbi() - if err != nil { - return nil, err +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ConstantArrayStorage *ConstantArrayStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ConstantArrayStorage.Contract.ConstantArrayStorageCaller.contract.Call(opts, result, method, params...) -} + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20RollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ConstantArrayStorage *ConstantArrayStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ConstantArrayStorage.Contract.ConstantArrayStorageTransactor.contract.Transfer(opts) -} + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20RollupEventInboxInboxMessageDeliveredFromOrigin) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// Transact invokes the (paid) contract method with params as input values. -func (_ConstantArrayStorage *ConstantArrayStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ConstantArrayStorage.Contract.ConstantArrayStorageTransactor.contract.Transact(opts, method, params...) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ConstantArrayStorage *ConstantArrayStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ConstantArrayStorage.Contract.contract.Call(opts, result, method, params...) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator) Error() error { + return it.fail } -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ConstantArrayStorage *ConstantArrayStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ConstantArrayStorage.Contract.contract.Transfer(opts) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// Transact invokes the (paid) contract method with params as input values. -func (_ConstantArrayStorage *ConstantArrayStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ConstantArrayStorage.Contract.contract.Transact(opts, method, params...) +// ERC20RollupEventInboxInboxMessageDeliveredFromOrigin represents a InboxMessageDeliveredFromOrigin event raised by the ERC20RollupEventInbox contract. +type ERC20RollupEventInboxInboxMessageDeliveredFromOrigin struct { + MessageNum *big.Int + Raw types.Log // Blockchain specific contextual infos } -// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. +// FilterInboxMessageDeliveredFromOrigin is a free log retrieval operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // -// Solidity: function array() view returns(uint256[]) -func (_ConstantArrayStorage *ConstantArrayStorageCaller) Array(opts *bind.CallOpts) ([]*big.Int, error) { - var out []interface{} - err := _ConstantArrayStorage.contract.Call(opts, &out, "array") +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) FilterInboxMessageDeliveredFromOrigin(opts *bind.FilterOpts, messageNum []*big.Int) (*ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator, error) { + + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } + logs, sub, err := _ERC20RollupEventInbox.contract.FilterLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) if err != nil { - return *new([]*big.Int), err + return nil, err } + return &ERC20RollupEventInboxInboxMessageDeliveredFromOriginIterator{contract: _ERC20RollupEventInbox.contract, event: "InboxMessageDeliveredFromOrigin", logs: logs, sub: sub}, nil +} - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) +// WatchInboxMessageDeliveredFromOrigin is a free log subscription operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. +// +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) WatchInboxMessageDeliveredFromOrigin(opts *bind.WatchOpts, sink chan<- *ERC20RollupEventInboxInboxMessageDeliveredFromOrigin, messageNum []*big.Int) (event.Subscription, error) { - return out0, err + var messageNumRule []interface{} + for _, messageNumItem := range messageNum { + messageNumRule = append(messageNumRule, messageNumItem) + } -} + logs, sub, err := _ERC20RollupEventInbox.contract.WatchLogs(opts, "InboxMessageDeliveredFromOrigin", messageNumRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20RollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _ERC20RollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return err + } + event.Raw = log -// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. -// -// Solidity: function array() view returns(uint256[]) -func (_ConstantArrayStorage *ConstantArrayStorageSession) Array() ([]*big.Int, error) { - return _ConstantArrayStorage.Contract.Array(&_ConstantArrayStorage.CallOpts) + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil } -// Array is a free data retrieval call binding the contract method 0xb0ec2ae1. +// ParseInboxMessageDeliveredFromOrigin is a log parse operation binding the contract event 0xab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c. // -// Solidity: function array() view returns(uint256[]) -func (_ConstantArrayStorage *ConstantArrayStorageCallerSession) Array() ([]*big.Int, error) { - return _ConstantArrayStorage.Contract.Array(&_ConstantArrayStorage.CallOpts) +// Solidity: event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum) +func (_ERC20RollupEventInbox *ERC20RollupEventInboxFilterer) ParseInboxMessageDeliveredFromOrigin(log types.Log) (*ERC20RollupEventInboxInboxMessageDeliveredFromOrigin, error) { + event := new(ERC20RollupEventInboxInboxMessageDeliveredFromOrigin) + if err := _ERC20RollupEventInbox.contract.UnpackLog(event, "InboxMessageDeliveredFromOrigin", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } // IOldRollupMetaData contains all meta data concerning the IOldRollup contract. @@ -3688,7 +5577,7 @@ func (_IOldRollupAdmin *IOldRollupAdminTransactorSession) Resume() (*types.Trans // IRollupAdminMetaData contains all meta data concerning the IRollupAdmin contract. var IRollupAdminMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"forceConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"forceCreateAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"stacker\",\"type\":\"address[]\"}],\"name\":\"forceRefundStaker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInbox\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"removeOldOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"setBaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challengeManager\",\"type\":\"address\"}],\"name\":\"setChallengeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"setConfirmPeriodBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"setLoserStakeEscrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setMinimumAssertionPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_val\",\"type\":\"bool[]\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"setValidatorWhitelistDisabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"setWasmModuleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"forceConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"forceCreateAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"stacker\",\"type\":\"address[]\"}],\"name\":\"forceRefundStaker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"removeOldOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"setBaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challengeManager\",\"type\":\"address\"}],\"name\":\"setChallengeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"setConfirmPeriodBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"setLoserStakeEscrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setMinimumAssertionPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_val\",\"type\":\"bool[]\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"setValidatorWhitelistDisabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"setWasmModuleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // IRollupAdminABI is the input ABI used to generate the binding from. @@ -4382,7 +6271,7 @@ func (_IRollupAdmin *IRollupAdminFilterer) ParseOwnerFunctionCalled(log types.Lo // IRollupCoreMetaData contains all meta data concerning the IRollupCore contract. var IRollupCoreMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // IRollupCoreABI is the input ABI used to generate the binding from. @@ -4655,6 +6544,37 @@ func (_IRollupCore *IRollupCoreCallerSession) ChainId() (*big.Int, error) { return _IRollupCore.Contract.ChainId(&_IRollupCore.CallOpts) } +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupCore *IRollupCoreCaller) ChallengeManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IRollupCore.contract.Call(opts, &out, "challengeManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupCore *IRollupCoreSession) ChallengeManager() (common.Address, error) { + return _IRollupCore.Contract.ChallengeManager(&_IRollupCore.CallOpts) +} + +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupCore *IRollupCoreCallerSession) ChallengeManager() (common.Address, error) { + return _IRollupCore.Contract.ChallengeManager(&_IRollupCore.CallOpts) +} + // ConfirmPeriodBlocks is a free data retrieval call binding the contract method 0x2e7acfa6. // // Solidity: function confirmPeriodBlocks() view returns(uint64) @@ -6615,7 +8535,7 @@ func (_IRollupEventInbox *IRollupEventInboxTransactorSession) UpdateRollupAddres // IRollupUserMetaData contains all meta data concerning the IRollupUser contract. var IRollupUserMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"addToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"winningEdgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"confirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"}],\"name\":\"reduceDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterValidatorAfk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOldDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"stakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"addToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"winningEdgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"confirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"}],\"name\":\"reduceDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterValidatorAfk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOldDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"stakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // IRollupUserABI is the input ABI used to generate the binding from. @@ -6888,6 +8808,37 @@ func (_IRollupUser *IRollupUserCallerSession) ChainId() (*big.Int, error) { return _IRollupUser.Contract.ChainId(&_IRollupUser.CallOpts) } +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupUser *IRollupUserCaller) ChallengeManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IRollupUser.contract.Call(opts, &out, "challengeManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupUser *IRollupUserSession) ChallengeManager() (common.Address, error) { + return _IRollupUser.Contract.ChallengeManager(&_IRollupUser.CallOpts) +} + +// ChallengeManager is a free data retrieval call binding the contract method 0x023a96fe. +// +// Solidity: function challengeManager() view returns(address) +func (_IRollupUser *IRollupUserCallerSession) ChallengeManager() (common.Address, error) { + return _IRollupUser.Contract.ChallengeManager(&_IRollupUser.CallOpts) +} + // ConfirmPeriodBlocks is a free data retrieval call binding the contract method 0x2e7acfa6. // // Solidity: function confirmPeriodBlocks() view returns(uint64) @@ -8821,8 +10772,8 @@ func (_IRollupUser *IRollupUserFilterer) ParseUserWithdrawableFundsUpdated(log t // RollupAdminLogicMetaData contains all meta data concerning the RollupAdminLogic contract. var RollupAdminLogicMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"forceConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"forceCreateAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"staker\",\"type\":\"address[]\"}],\"name\":\"forceRefundStaker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInbox\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"removeOldOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_anyTrustFastConfirmer\",\"type\":\"address\"}],\"name\":\"setAnyTrustFastConfirmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"setBaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challengeManager\",\"type\":\"address\"}],\"name\":\"setChallengeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"setConfirmPeriodBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInbox\",\"name\":\"newInbox\",\"type\":\"address\"}],\"name\":\"setInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"setLoserStakeEscrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setMinimumAssertionPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_val\",\"type\":\"bool[]\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"setValidatorWhitelistDisabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"setWasmModuleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeSecondaryTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeSecondaryToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c0604052620000196200003660201b62002d2b1760201c565b15156080523060a0523480156200002f57600080fd5b5062000104565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b506000920191825250919050565b60805160a0516158626200017e60003960008181610de601528181610e700152818161116f015281816111f401528181611353015281816113d801528181611521015281816117ab0152818161183001528181612705015261278a015260008181610fc4015281816123d201526142da01526158626000f3fe6080604052600436106103de5760003560e01c80636ddd37441161020d578063aa38a6e711610128578063e78cea92116100bb578063f065de3f1161008a578063fb0e722b1161006f578063fb0e722b14610d1c578063fc8ffa0314610d3c578063ff204f3b14610d5c57600080fd5b8063f065de3f14610ccc578063facd743b14610cec57600080fd5b8063e78cea9214610bd8578063e8bd492214610bf8578063ee35f32714610c81578063ef40a67014610c9657600080fd5b8063ce66d05c116100f7578063ce66d05c14610b63578063dff6978714610b83578063e51019a614610b98578063e531d8c714610bb857600080fd5b8063aa38a6e714610ae3578063b7626e7314610b03578063bc45e0ae14610b23578063ce11e6ab14610b4357600080fd5b80638ee1a126116101a05780639a8a05921161016f5780639a8a0592146109ab578063a23c44b1146109c1578063a2b4f1d814610aa3578063a3ffb77214610ac357600080fd5b80638ee1a12614610942578063948d6588146109585780639846129a146109785780639a7b45561461098b57600080fd5b80637c75c298116101dc5780637c75c298146108c05780638456cb59146108e057806388302884146108f5578063893849601461092257600080fd5b80636ddd3744146108545780636f62fdfd1461087457806371ef232c1461089457806376e7e23b146108aa57600080fd5b80633659cfe6116102fd57806353b60c4a116102905780635bf038331161025f5780635bf03833146107bf5780635c975abb146107df5780636177fd18146107f757806365f7f80d1461083f57600080fd5b806353b60c4a1461073a57806355840a581461075a578063567ca41b1461077f57806356bbc9e61461079f57600080fd5b80634f1ef286116102cc5780634f1ef286146106d25780634f61f850146106e557806351ed6a301461070557806352d1902d1461072557600080fd5b80633659cfe6146106435780633be680ea1461066357806345e38b641461069c57806347fb24c5146106b257600080fd5b806313af4035116103755780632e7acfa6116103445780632e7acfa6146105b75780632f30cabd146105d8578063308362281461060e578063353325e01461062e57600080fd5b806313af40351461051a57806313c56ca71461053a5780631b1689e9146105685780632abdd2301461057e57600080fd5b80630d40a0fd116103b15780630d40a0fd146104775780630d561b371461049757806311715585146104b757806312ab3d3b146104f057600080fd5b8063023a96fe146103e3578063046f7da21461042057806304972af91461043757806306ae585114610457575b600080fd5b3480156103ef57600080fd5b50606954610403906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042c57600080fd5b50610435610d7c565b005b34801561044357600080fd5b50610435610452366004614cec565b610da0565b34801561046357600080fd5b50610435610472366004614d24565b610dba565b34801561048357600080fd5b50610435610492366004614d52565b610ddc565b3480156104a357600080fd5b506104356104b2366004614d52565b610f2a565b3480156104c357600080fd5b506104d76104d2366004614d24565b610f7e565b60405167ffffffffffffffff9091168152602001610417565b3480156104fc57600080fd5b50607a5461050a9060ff1681565b6040519015158152602001610417565b34801561052657600080fd5b50610435610535366004614d52565b610f9a565b34801561054657600080fd5b5061055a610555366004614d24565b610fc0565b604051908152602001610417565b34801561057457600080fd5b5061055a60795481565b34801561058a57600080fd5b5061055a610599366004614d52565b6001600160a01b031660009081526076602052604090206001015490565b3480156105c357600080fd5b506066546104d79067ffffffffffffffff1681565b3480156105e457600080fd5b5061055a6105f3366004614d52565b6001600160a01b031660009081526077602052604090205490565b34801561061a57600080fd5b5061050a610629366004614d24565b61110d565b34801561063a57600080fd5b5061055a611129565b34801561064f57600080fd5b5061043561065e366004614d52565b611165565b34801561066f57600080fd5b506069546104d79074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156106a857600080fd5b5061055a60715481565b3480156106be57600080fd5b506104356106cd366004614d7d565b6112ab565b6104356106e0366004614e26565b611349565b3480156106f157600080fd5b50610435610700366004614d52565b61147f565b34801561071157600080fd5b50607054610403906001600160a01b031681565b34801561073157600080fd5b5061055a611514565b34801561074657600080fd5b50610435610755366004614d52565b6115d9565b34801561076657600080fd5b50607a546104039061010090046001600160a01b031681565b34801561078b57600080fd5b5061043561079a366004614d52565b611611565b3480156107ab57600080fd5b506104d76107ba366004614d24565b61170b565b3480156107cb57600080fd5b506104356107da366004614ee6565b611733565b3480156107eb57600080fd5b5060335460ff1661050a565b34801561080357600080fd5b5061050a610812366004614d52565b6001600160a01b031660009081526076602052604090206002015468010000000000000000900460ff1690565b34801561084b57600080fd5b5060735461055a565b34801561086057600080fd5b5061040361086f366004614f3e565b611767565b34801561088057600080fd5b5061043561088f366004614f59565b6117a1565b3480156108a057600080fd5b5061055a60785481565b3480156108b657600080fd5b5061055a60675481565b3480156108cc57600080fd5b506104356108db366004614ff9565b6124fa565b3480156108ec57600080fd5b506104356125ec565b34801561090157600080fd5b50610915610910366004614d24565b612610565b604051610417919061506f565b34801561092e57600080fd5b5061043561093d366004614d24565b6126b7565b34801561094e57600080fd5b5061055a60685481565b34801561096457600080fd5b50610435610973366004614d24565b6126d9565b610435610986366004614e26565b6126fb565b34801561099757600080fd5b506104356109a63660046150d0565b612831565b3480156109b757600080fd5b5061055a60655481565b3480156109cd57600080fd5b50610a646109dc366004614d52565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152607660209081526040918290208251608081018452815481526001820154928101929092526002015467ffffffffffffffff8116928201929092526801000000000000000090910460ff161515606082015290565b6040516104179190815181526020808301519082015260408083015167ffffffffffffffff169082015260609182015115159181019190915260800190565b348015610aaf57600080fd5b50610435610abe366004615114565b612865565b348015610acf57600080fd5b50610435610ade366004615131565b612890565b348015610aef57600080fd5b50606d54610403906001600160a01b031681565b348015610b0f57600080fd5b50610435610b1e366004614d52565b6129e4565b348015610b2f57600080fd5b50606e54610403906001600160a01b031681565b348015610b4f57600080fd5b50606c54610403906001600160a01b031681565b348015610b6f57600080fd5b50610435610b7e366004614f3e565b612a1c565b348015610b8f57600080fd5b506075546104d7565b348015610ba457600080fd5b50610435610bb336600461519d565b612ab0565b348015610bc457600080fd5b5061050a610bd3366004614d24565b612b1d565b348015610be457600080fd5b50606b54610403906001600160a01b031681565b348015610c0457600080fd5b50610c4f610c13366004614d52565b60766020526000908152604090208054600182015460029092015490919067ffffffffffffffff81169068010000000000000000900460ff1684565b6040516104179493929190938452602084019290925267ffffffffffffffff1660408301521515606082015260800190565b348015610c8d57600080fd5b50610403612b4d565b348015610ca257600080fd5b5061055a610cb1366004614d52565b6001600160a01b031660009081526076602052604090205490565b348015610cd857600080fd5b50606f54610403906001600160a01b031681565b348015610cf857600080fd5b5061050a610d07366004614d52565b60726020526000908152604090205460ff1681565b348015610d2857600080fd5b50606a54610403906001600160a01b031681565b348015610d4857600080fd5b50610435610d57366004614d52565b612bd9565b348015610d6857600080fd5b50610435610d77366004614d52565b612c79565b610d84612df1565b6040516004906000805160206157e683398151915290600090a2565b610db681610dad84612e43565b60010154612ea4565b5050565b6067819055604051600c906000805160206157e683398151915290600090a250565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e6e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ea0612fa9565b6001600160a01b031614610f0b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b60408051600080825260208201909252610f2791839190612fdc565b50565b607a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03841602179055604051601f906000805160206157e683398151915290600090a250565b6000610f8982612e43565b5467ffffffffffffffff1692915050565b610fa38161317c565b6040516007906000805160206157e683398151915290600090a250565b60007f00000000000000000000000000000000000000000000000000000000000000001561104a576000828152607b6020526040902054806110445760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610e65565b92915050565b600061105583612e43565b6040805160c081018252825467ffffffffffffffff808216835268010000000000000000820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529293506110f092909184916080840191600160c81b90041660028111156110cc576110cc61503b565b60028111156110dd576110dd61503b565b81526020016001820154815250506131d0565b54600160801b900467ffffffffffffffff1692915050565b919050565b600061111882612e43565b54600160c01b900460ff1692915050565b6000611133614be9565b60408051606081018252828152600160208201526000918101829052908061115c818481613235565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111f25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611224612fa9565b6001600160a01b03161461128f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b60408051600080825260208201909252610f279183919061324e565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b5050604051600292506000805160206157e68339815191529150600090a25050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113d65760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611408612fa9565b6001600160a01b0316146114735760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b610db68282600161324e565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156114df57600080fd5b505af11580156114f3573d6000803e3d6000fd5b5050604051601b92506000805160206157e68339815191529150600090a250565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115b45760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e65565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b038316179055604051601c906000805160206157e683398151915290600090a250565b606c546001600160a01b039081169082160361166f5760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610e65565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156116d657600080fd5b505af11580156116ea573d6000803e3d6000fd5b5050604051600192506000805160206157e68339815191529150600090a250565b600061171682612e43565b5468010000000000000000900467ffffffffffffffff1692915050565b61173b6133ee565b61174784848484613442565b6040516018906000805160206157e683398151915290600090a250505050565b600060758267ffffffffffffffff1681548110611786576117866151db565b6000918252602090912001546001600160a01b031692915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361182e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611860612fa9565b6001600160a01b0316146118cb5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b600054610100900460ff16158080156118eb5750600054600160ff909116105b806119055750303b158015611905575060005460ff166001145b6119775760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610e65565b6000805460ff19166001179055801561199a576000805461ff0019166101001790555b436079556119ab6020830183614d52565b606b80546001600160a01b0319166001600160a01b03929092169190911790556119d86020830183614d52565b6001600160a01b03166347fb24c56119f66060850160408601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b50611a7c925050506020830183614d52565b6001600160a01b0316634f61f850611a9a6040850160208601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611af357600080fd5b505af1158015611b07573d6000803e3d6000fd5b50611b1c925050506060830160408401614d52565b606a80546001600160a01b0319166001600160a01b0392909216919091179055611b4c6080830160608401614d52565b606c80546001600160a01b0319166001600160a01b0392909216919091179055611b796020830183614d52565b6001600160a01b031663cee3d728611b976080850160608601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b50611c209250505060a0830160808401614d52565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd13611c5560a0850160808601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd591906151f1565b611dfe57611ce66020830183614d52565b6001600160a01b03166347fb24c5611d0460a0850160808601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b50611d8d9250505060a0830160808401614d52565b6001600160a01b031663cf8d56d660c0850135611dad60e087018761520e565b6040518463ffffffff1660e01b8152600401611dcb93929190615273565b600060405180830381600087803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b505050505b611e0e6040830160208401614d52565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6f91906152a9565b600003611f2957611e866040830160208401614d52565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b505050505b611f3b61012083016101008401614d52565b606e80546001600160a01b0319166001600160a01b0392909216919091179055611f6b60c0830160a08401614d52565b606980546001600160a01b0319166001600160a01b0392909216919091179055611f986020840184614f3e565b6066805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560c083013560655560408301356067556060830135606855604b607155611fe961034084016103208501614f3e565b606960146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555061201961365f565b6001600160a01b031661203260c0850160a08601614d52565b6001600160a01b0316036120885760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f455343524f575f41444d494e0000000000000000000000006044820152606401610e65565b61209860a0840160808501614d52565b6001600160a01b03166120b160c0850160a08601614d52565b6001600160a01b0316036121075760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f455343524f575f4f574e45520000000000000000000000006044820152606401610e65565b61211760c0840160a08501614d52565b606f80546001600160a01b0319166001600160a01b03929092169190911790556121476040840160208501614d52565b607080546001600160a01b0319166001600160a01b039290921691909117905561217961030084016102e08501614d52565b607a80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9092169190911790556000808061220f816121da6121d5368a90038a016102008b016153e3565b613687565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228991906152a9565b9050866102c0013581036122a5576122a2600182615460565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c8301528051606481840301815260849092019052805191012060009061233c906001906136b7565b905061234881846136ef565b612350614c0e565b612363368a90038a016102008b016153e3565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946123c89489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615501565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156124695760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245991906152a9565b6000858152607b60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a150505050505080156124f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6125026133ee565b8061254f5760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610e65565b60005b818110156125cd5761258983838381811061256f5761256f6151db565b90506020020160208101906125849190614d52565b613826565b6125ba83838381811061259e5761259e6151db565b90506020020160208101906125b39190614d52565b600061392f565b50806125c5816155e0565b915050612552565b506040516016906000805160206157e683398151915290600090a25050565b6125f4613a01565b6040516003906000805160206157e683398151915290600090a2565b612618614c78565b61262182612e43565b6040805160c081018252825467ffffffffffffffff808216835268010000000000000000820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b9091041660028111156126915761269161503b565b60028111156126a2576126a261503b565b81526020016001820154815250509050919050565b6068819055604051601a906000805160206157e683398151915290600090a250565b60718190556040516008906000805160206157e683398151915290600090a250565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036127885760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127ba612fa9565b6001600160a01b0316146128255760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b610db682826001612fdc565b6128396133ee565b612844828483613a3e565b50506040516017906000805160206157e683398151915290600090a2505050565b607a805460ff1916821515179055604051601e906000805160206157e683398151915290600090a250565b826128dd5760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610e65565b82811461292c5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610e65565b60005b838110156129c357828282818110612949576129496151db565b905060200201602081019061295e9190615114565b60726000878785818110612974576129746151db565b90506020020160208101906129899190614d52565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806129bb816155e0565b91505061292f565b506040516006906000805160206157e683398151915290600090a250505050565b606980546001600160a01b0319166001600160a01b0383161790556040516020906000805160206157e683398151915290600090a250565b60008167ffffffffffffffff1611612a765760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610e65565b6066805467ffffffffffffffff191667ffffffffffffffff83161790556040516009906000805160206157e683398151915290600090a250565b612ac982612ac3368690038601866153e3565b83613235565b8414612b175760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610e65565b50505050565b60006001612b2a83612e43565b54600160c81b900460ff166002811115612b4657612b4661503b565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd491906155fa565b905090565b612be161365f565b6001600160a01b0316816001600160a01b031603612c415760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f455343524f570000000000000000000000000000000000006044820152606401610e65565b606f80546001600160a01b0319166001600160a01b0383161790556040516019906000805160206157e683398151915290600090a250565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b158015612cf757600080fd5b505af1158015612d0b573d6000803e3d6000fd5b5050604051600092506000805160206157e683398151915291508290a250565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491612d97919061563b565b600060405180830381855afa9150503d8060008114612dd2576040519150601f19603f3d011682016040523d82523d6000602084013e612dd7565b606091505b5091509150818015612dea575080516020145b9250505090565b612df96133ee565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081612e925760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610e65565b50600090815260746020526040902090565b612f5b82356020840135612ebe6060860160408701614d52565b612ece6080870160608801614f3e565b612ede60a0880160808901614f3e565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610db65760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610e65565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561300f576124f58361437d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613069575060408051601f3d908101601f19168201909252613066918101906152a9565b60015b6130db5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610e65565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146131705760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610e65565b506124f583838361443e565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6131a561365f565b604080516001600160a01b03928316815291841660208301520160405180910390a1610f2781614463565b6000816080015160028111156131e8576131e861503b565b03610f275760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610e65565b6000613244846121da85613687565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613281576124f583614506565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132db575060408051601f3d908101601f191682019092526132d8918101906152a9565b60015b61334d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610e65565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146133e25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610e65565b506124f58383836145aa565b60335460ff166134405760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610e65565b565b600061344d85612e43565b905060018154600160c81b900460ff16600281111561346e5761346e61503b565b146134bb5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610e65565b6134d4846134ce368690038601866153e3565b84613235565b85146135225760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610e65565b600061353b61353636869003860186615657565b6145b3565b9050600061355661355136879003870187615657565b6145c5565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b50505060738890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103612fcd565b60008160405160200161369a9190615673565b604051602081830303815290604052805190602001209050919050565b6136bf614c78565b6136c7614c78565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b6136f76145d1565b6002608083018190525060008181526074602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff96831668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b83600281111561380e5761380e61503b565b021790555060a0919091015160019091015560735550565b6001600160a01b03811660009081526076602052604090206002015468010000000000000000900460ff1661389d5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610e65565b6001600160a01b038116600090815260766020526040812060010154607354909190821490806138cc84612e43565b5467ffffffffffffffff1611905081806138e35750805b612b175760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610e65565b6001600160a01b03821660009081526076602052604081208054808411156139995760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610e65565b60006139a58583615681565b85845590506139b48682614656565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b613a096146fb565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e263390565b600080613a5160408601610dad86612e43565b6001613a6561024087016102208801615694565b6002811115613a7657613a7661503b565b1480613aa457506002613a9161024087016102208801615694565b6002811115613aa257613aa261503b565b145b613af05760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610e65565b83613b128635613b0836899003890160e08a016153e3565b6020890135613235565b14613b5f5760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610e65565b6001613b7361018087016101608801615694565b6002811115613b8457613b8461503b565b14613bd15760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610e65565b6000613bdc85612e43565b90506000806101a0880160e0890182613bf5838361474e565b1215613c435760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610e65565b6000613c69613c5860e08d0160c08e01614f3e565b849067ffffffffffffffff1661485b565b90506000811315613cbc5760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610e65565b6002613cd06102408d016102208e01615694565b6002811115613ce157613ce161503b565b14158015613cef5750600081125b15613d5157600196506000613d04848461474e565b13613d515760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610e65565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd691906152a9565b90506000613de4858361485b565b1315613e325760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610e65565b80613e4360e08e0160c08f01614f3e565b67ffffffffffffffff161115613e9b5760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610e65565b6000613eb4613eaf36879003870187615657565b6148e3565b67ffffffffffffffff169050818103613ed957613ed2826001615460565b9650613edd565b8196505b80600003613f2d5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610e65565b606b546001600160a01b03166316bf5579613f49600184615681565b6040518263ffffffff1660e01b8152600401613f6791815260200190565b602060405180830381865afa158015613f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa891906152a9565b95505050505050613fc887896101a001803603810190612ac391906153e3565b945085851480613fd6575085155b6140225760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610e65565b600061402d86612e43565b54600160c81b900460ff1660028111156140495761404961503b565b146140965760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610e65565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c8301528051606481840301815260849092019052805191012060009161413a9167ffffffffffffffff90911615906136b7565b9050614145846148f1565b60008681526074602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff96831668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156142525761425261503b565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516142d09796959493929190615718565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156143715760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561433d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436191906152a9565b6000878152607b60205260409020555b50505050935093915050565b6001600160a01b0381163b6143fa5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610e65565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6144478361497f565b6000825111806144545750805b156124f557612b1783836149bf565b6001600160a01b0381166144df5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610e65565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610361441d565b6001600160a01b0381163b6145835760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610e65565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61441d565b614447836149e4565b8051600090815b602002015192915050565b805160009060016145ba565b600054610100900460ff1661464e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e65565b613440614a24565b6001600160a01b0382166000908152607760205260408120549061467a8383615460565b6001600160a01b03851660009081526077602052604081208290556078805492935085929091906146ac908490615460565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff16156134405760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610e65565b600080614763613eaf36869003860186615657565b90506000614779613eaf36869003860186615657565b90508067ffffffffffffffff168267ffffffffffffffff1610156147a35760001992505050611044565b8067ffffffffffffffff168267ffffffffffffffff1611156147ca57600192505050611044565b60006147e36147de36889003880188615657565b614aad565b905060006147f96147de36889003880188615657565b90508067ffffffffffffffff168267ffffffffffffffff16101561482557600019945050505050611044565b8067ffffffffffffffff168267ffffffffffffffff16111561484e576001945050505050611044565b6000945050505050611044565b600080614870613eaf36869003860186615657565b9050828167ffffffffffffffff16101561488f57600019915050611044565b828167ffffffffffffffff1611156148ab576001915050611044565b60006148bf6147de36879003870187615657565b67ffffffffffffffff1611156148d9576001915050611044565b6000915050611044565b6020810151600090816145ba565b805467ffffffffffffffff1660000361492157805467ffffffffffffffff19164367ffffffffffffffff16179055565b805468010000000000000000900467ffffffffffffffff16600003610f275780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004367ffffffffffffffff1602179055565b6149888161437d565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6060613247838360405180606001604052806027815260200161580660279139614abc565b6149ed81614506565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600054610100900460ff16614aa15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e65565b6033805460ff19169055565b602081015160009060016145ba565b60606001600160a01b0384163b614b3b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610e65565b600080856001600160a01b031685604051614b56919061563b565b600060405180830381855af49150503d8060008114614b91576040519150601f19603f3d011682016040523d82523d6000602084013e614b96565b606091505b5091509150614ba6828286614bb0565b9695505050505050565b60608315614bbf575081613247565b825115614bcf5782518084602001fd5b8160405162461bcd60e51b8152600401610e6591906157b2565b6040518060400160405280614bfc614caf565b8152602001614c09614caf565b905290565b6040518060600160405280614c5e604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b8152602001614c6b614ccd565b8152602001614c09614ccd565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b6040518060600160405280614ce0614be9565b81526020016000614ca2565b60008082840360c0811215614d0057600080fd5b8335925060a0601f1982011215614d1657600080fd5b506020830190509250929050565b600060208284031215614d3657600080fd5b5035919050565b6001600160a01b0381168114610f2757600080fd5b600060208284031215614d6457600080fd5b813561324781614d3d565b8015158114610f2757600080fd5b60008060408385031215614d9057600080fd5b8235614d9b81614d3d565b91506020830135614dab81614d6f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614def57614def614db6565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614e1e57614e1e614db6565b604052919050565b60008060408385031215614e3957600080fd5b8235614e4481614d3d565b915060208381013567ffffffffffffffff80821115614e6257600080fd5b818601915086601f830112614e7657600080fd5b813581811115614e8857614e88614db6565b614e9a84601f19601f84011601614df5565b91508082528784828501011115614eb057600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c08284031215614ee057600080fd5b50919050565b6000806000806101208587031215614efd57600080fd5b8435935060208501359250614f158660408701614ece565b939692955092936101000135925050565b803567ffffffffffffffff8116811461110857600080fd5b600060208284031215614f5057600080fd5b61324782614f26565b600080828403610140811215614f6e57600080fd5b833567ffffffffffffffff811115614f8557600080fd5b84016103408187031215614f9857600080fd5b9250610120601f1982011215614d1657600080fd5b60008083601f840112614fbf57600080fd5b50813567ffffffffffffffff811115614fd757600080fd5b6020830191508360208260051b8501011115614ff257600080fd5b9250929050565b6000806020838503121561500c57600080fd5b823567ffffffffffffffff81111561502357600080fd5b61502f85828601614fad565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110610f2757634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff8084511683528060208501511660208401528060408501511660408401525060608301511515606083015260808301516150b981615051565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156150e757600080fd5b84359350610260601f19820112156150fe57600080fd5b5060208401915061028084013590509250925092565b60006020828403121561512657600080fd5b813561324781614d6f565b6000806000806040858703121561514757600080fd5b843567ffffffffffffffff8082111561515f57600080fd5b61516b88838901614fad565b9096509450602087013591508082111561518457600080fd5b5061519187828801614fad565b95989497509550505050565b60008060008061012085870312156151b457600080fd5b843593506151c58660208701614ece565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561520357600080fd5b815161324781614d6f565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261524357600080fd5b83018035915067ffffffffffffffff82111561525e57600080fd5b602001915036819003821315614ff257600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156152bb57600080fd5b5051919050565b600082601f8301126152d357600080fd5b6040516040810181811067ffffffffffffffff821117156152f6576152f6614db6565b806040525080604084018581111561530d57600080fd5b845b8181101561532e5761532081614f26565b83526020928301920161530f565b509195945050505050565b60006080828403121561534b57600080fd5b6040516040810181811067ffffffffffffffff8211171561536e5761536e614db6565b604052905080601f8301841361538357600080fd5b61538b614dcc565b80604085018681111561539d57600080fd5b855b818110156153b757803584526020938401930161539f565b508184526153c587826152c2565b60208501525050505092915050565b80356003811061110857600080fd5b600060c082840312156153f557600080fd5b6040516060810181811067ffffffffffffffff8211171561541857615418614db6565b6040526154258484615339565b8152615433608084016153d4565b602082015260a09290920135604083015250919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156110445761104461544a565b61547c81615051565b9052565b805180518360005b60028110156154a7578251825260209283019290910190600101615488565b505050602090810151906040840160005b60028110156154df57835167ffffffffffffffff16825292820192908201906001016154b8565b505082015190506154f36080840182615473565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050602089015161557c60e0840182615480565b5060408901516155906101a0840182615480565b508761026083015286610280830152856102a0830152846102c08301526155c36102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b600060001982036155f3576155f361544a565b5060010190565b60006020828403121561560c57600080fd5b815161324781614d3d565b60005b8381101561563257818101518382015260200161561a565b50506000910152565b6000825161564d818460208701615617565b9190910192915050565b60006080828403121561566957600080fd5b6132478383615339565b60c081016110448284615480565b818103818111156110445761104461544a565b6000602082840312156156a657600080fd5b613247826153d4565b6040818337604082016040820160005b60028110156156f05767ffffffffffffffff6156da83614f26565b16835260209283019291909101906001016156bf565b5050506156ff608082016153d4565b61570881615051565b608083015260a090810135910152565b60006103208201905088358252602089013560208301526040890135604083015260608901356060830152608089013561575181614d3d565b6001600160a01b0316608083015261576b60a08a01614f26565b67ffffffffffffffff80821660a08501528061578960c08d01614f26565b1660c085015250506157a160e0830160e08b016156af565b6101a0615590818401828c016156af565b60208152600082518060208401526157d1816040850160208701615617565b601f01601f1916919091016040019291505056feea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206b31a30cce1fd9ea976efb3468768af596e858abddb012a33b60834efafcf5ee64736f6c63430008110033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"OwnerFunctionCalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"forceConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"forceCreateAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"staker\",\"type\":\"address[]\"}],\"name\":\"forceRefundStaker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"removeOldOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_anyTrustFastConfirmer\",\"type\":\"address\"}],\"name\":\"setAnyTrustFastConfirmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBaseStake\",\"type\":\"uint256\"}],\"name\":\"setBaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_challengeManager\",\"type\":\"address\"}],\"name\":\"setChallengeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newConfirmPeriod\",\"type\":\"uint64\"}],\"name\":\"setConfirmPeriodBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"newInbox\",\"type\":\"address\"}],\"name\":\"setInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newLoserStakerEscrow\",\"type\":\"address\"}],\"name\":\"setLoserStakeEscrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"setMinimumAssertionPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"_outbox\",\"type\":\"address\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_val\",\"type\":\"bool[]\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_validatorWhitelistDisabled\",\"type\":\"bool\"}],\"name\":\"setValidatorWhitelistDisabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newWasmModuleRoot\",\"type\":\"bytes32\"}],\"name\":\"setWasmModuleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeSecondaryTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeSecondaryToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c0604052620000196200003660201b62002d2b1760201c565b15156080523060a0523480156200002f57600080fd5b5062000104565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b506000920191825250919050565b60805160a0516158626200017e60003960008181610de601528181610e700152818161116f015281816111f401528181611353015281816113d801528181611521015281816117ab0152818161183001528181612705015261278a015260008181610fc4015281816123d201526142da01526158626000f3fe6080604052600436106103de5760003560e01c80636ddd37441161020d578063aa38a6e711610128578063e78cea92116100bb578063f065de3f1161008a578063fb0e722b1161006f578063fb0e722b14610d1c578063fc8ffa0314610d3c578063ff204f3b14610d5c57600080fd5b8063f065de3f14610ccc578063facd743b14610cec57600080fd5b8063e78cea9214610bd8578063e8bd492214610bf8578063ee35f32714610c81578063ef40a67014610c9657600080fd5b8063ce66d05c116100f7578063ce66d05c14610b63578063dff6978714610b83578063e51019a614610b98578063e531d8c714610bb857600080fd5b8063aa38a6e714610ae3578063b7626e7314610b03578063bc45e0ae14610b23578063ce11e6ab14610b4357600080fd5b80638ee1a126116101a05780639a8a05921161016f5780639a8a0592146109ab578063a23c44b1146109c1578063a2b4f1d814610aa3578063a3ffb77214610ac357600080fd5b80638ee1a12614610942578063948d6588146109585780639846129a146109785780639a7b45561461098b57600080fd5b80637c75c298116101dc5780637c75c298146108c05780638456cb59146108e057806388302884146108f5578063893849601461092257600080fd5b80636ddd3744146108545780636f62fdfd1461087457806371ef232c1461089457806376e7e23b146108aa57600080fd5b80633659cfe6116102fd57806353b60c4a116102905780635bf038331161025f5780635bf03833146107bf5780635c975abb146107df5780636177fd18146107f757806365f7f80d1461083f57600080fd5b806353b60c4a1461073a57806355840a581461075a578063567ca41b1461077f57806356bbc9e61461079f57600080fd5b80634f1ef286116102cc5780634f1ef286146106d25780634f61f850146106e557806351ed6a301461070557806352d1902d1461072557600080fd5b80633659cfe6146106435780633be680ea1461066357806345e38b641461069c57806347fb24c5146106b257600080fd5b806313af4035116103755780632e7acfa6116103445780632e7acfa6146105b75780632f30cabd146105d8578063308362281461060e578063353325e01461062e57600080fd5b806313af40351461051a57806313c56ca71461053a5780631b1689e9146105685780632abdd2301461057e57600080fd5b80630d40a0fd116103b15780630d40a0fd146104775780630d561b371461049757806311715585146104b757806312ab3d3b146104f057600080fd5b8063023a96fe146103e3578063046f7da21461042057806304972af91461043757806306ae585114610457575b600080fd5b3480156103ef57600080fd5b50606954610403906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042c57600080fd5b50610435610d7c565b005b34801561044357600080fd5b50610435610452366004614cec565b610da0565b34801561046357600080fd5b50610435610472366004614d24565b610dba565b34801561048357600080fd5b50610435610492366004614d52565b610ddc565b3480156104a357600080fd5b506104356104b2366004614d52565b610f2a565b3480156104c357600080fd5b506104d76104d2366004614d24565b610f7e565b60405167ffffffffffffffff9091168152602001610417565b3480156104fc57600080fd5b50607a5461050a9060ff1681565b6040519015158152602001610417565b34801561052657600080fd5b50610435610535366004614d52565b610f9a565b34801561054657600080fd5b5061055a610555366004614d24565b610fc0565b604051908152602001610417565b34801561057457600080fd5b5061055a60795481565b34801561058a57600080fd5b5061055a610599366004614d52565b6001600160a01b031660009081526076602052604090206001015490565b3480156105c357600080fd5b506066546104d79067ffffffffffffffff1681565b3480156105e457600080fd5b5061055a6105f3366004614d52565b6001600160a01b031660009081526077602052604090205490565b34801561061a57600080fd5b5061050a610629366004614d24565b61110d565b34801561063a57600080fd5b5061055a611129565b34801561064f57600080fd5b5061043561065e366004614d52565b611165565b34801561066f57600080fd5b506069546104d79074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156106a857600080fd5b5061055a60715481565b3480156106be57600080fd5b506104356106cd366004614d7d565b6112ab565b6104356106e0366004614e26565b611349565b3480156106f157600080fd5b50610435610700366004614d52565b61147f565b34801561071157600080fd5b50607054610403906001600160a01b031681565b34801561073157600080fd5b5061055a611514565b34801561074657600080fd5b50610435610755366004614d52565b6115d9565b34801561076657600080fd5b50607a546104039061010090046001600160a01b031681565b34801561078b57600080fd5b5061043561079a366004614d52565b611611565b3480156107ab57600080fd5b506104d76107ba366004614d24565b61170b565b3480156107cb57600080fd5b506104356107da366004614ee6565b611733565b3480156107eb57600080fd5b5060335460ff1661050a565b34801561080357600080fd5b5061050a610812366004614d52565b6001600160a01b031660009081526076602052604090206002015468010000000000000000900460ff1690565b34801561084b57600080fd5b5060735461055a565b34801561086057600080fd5b5061040361086f366004614f3e565b611767565b34801561088057600080fd5b5061043561088f366004614f59565b6117a1565b3480156108a057600080fd5b5061055a60785481565b3480156108b657600080fd5b5061055a60675481565b3480156108cc57600080fd5b506104356108db366004614ff9565b6124fa565b3480156108ec57600080fd5b506104356125ec565b34801561090157600080fd5b50610915610910366004614d24565b612610565b604051610417919061506f565b34801561092e57600080fd5b5061043561093d366004614d24565b6126b7565b34801561094e57600080fd5b5061055a60685481565b34801561096457600080fd5b50610435610973366004614d24565b6126d9565b610435610986366004614e26565b6126fb565b34801561099757600080fd5b506104356109a63660046150d0565b612831565b3480156109b757600080fd5b5061055a60655481565b3480156109cd57600080fd5b50610a646109dc366004614d52565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152607660209081526040918290208251608081018452815481526001820154928101929092526002015467ffffffffffffffff8116928201929092526801000000000000000090910460ff161515606082015290565b6040516104179190815181526020808301519082015260408083015167ffffffffffffffff169082015260609182015115159181019190915260800190565b348015610aaf57600080fd5b50610435610abe366004615114565b612865565b348015610acf57600080fd5b50610435610ade366004615131565b612890565b348015610aef57600080fd5b50606d54610403906001600160a01b031681565b348015610b0f57600080fd5b50610435610b1e366004614d52565b6129e4565b348015610b2f57600080fd5b50606e54610403906001600160a01b031681565b348015610b4f57600080fd5b50606c54610403906001600160a01b031681565b348015610b6f57600080fd5b50610435610b7e366004614f3e565b612a1c565b348015610b8f57600080fd5b506075546104d7565b348015610ba457600080fd5b50610435610bb336600461519d565b612ab0565b348015610bc457600080fd5b5061050a610bd3366004614d24565b612b1d565b348015610be457600080fd5b50606b54610403906001600160a01b031681565b348015610c0457600080fd5b50610c4f610c13366004614d52565b60766020526000908152604090208054600182015460029092015490919067ffffffffffffffff81169068010000000000000000900460ff1684565b6040516104179493929190938452602084019290925267ffffffffffffffff1660408301521515606082015260800190565b348015610c8d57600080fd5b50610403612b4d565b348015610ca257600080fd5b5061055a610cb1366004614d52565b6001600160a01b031660009081526076602052604090205490565b348015610cd857600080fd5b50606f54610403906001600160a01b031681565b348015610cf857600080fd5b5061050a610d07366004614d52565b60726020526000908152604090205460ff1681565b348015610d2857600080fd5b50606a54610403906001600160a01b031681565b348015610d4857600080fd5b50610435610d57366004614d52565b612bd9565b348015610d6857600080fd5b50610435610d77366004614d52565b612c79565b610d84612df1565b6040516004906000805160206157e683398151915290600090a2565b610db681610dad84612e43565b60010154612ea4565b5050565b6067819055604051600c906000805160206157e683398151915290600090a250565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e6e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ea0612fa9565b6001600160a01b031614610f0b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b60408051600080825260208201909252610f2791839190612fdc565b50565b607a80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03841602179055604051601f906000805160206157e683398151915290600090a250565b6000610f8982612e43565b5467ffffffffffffffff1692915050565b610fa38161317c565b6040516007906000805160206157e683398151915290600090a250565b60007f00000000000000000000000000000000000000000000000000000000000000001561104a576000828152607b6020526040902054806110445760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610e65565b92915050565b600061105583612e43565b6040805160c081018252825467ffffffffffffffff808216835268010000000000000000820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529293506110f092909184916080840191600160c81b90041660028111156110cc576110cc61503b565b60028111156110dd576110dd61503b565b81526020016001820154815250506131d0565b54600160801b900467ffffffffffffffff1692915050565b919050565b600061111882612e43565b54600160c01b900460ff1692915050565b6000611133614be9565b60408051606081018252828152600160208201526000918101829052908061115c818481613235565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111f25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611224612fa9565b6001600160a01b03161461128f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b60408051600080825260208201909252610f279183919061324e565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b5050604051600292506000805160206157e68339815191529150600090a25050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113d65760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611408612fa9565b6001600160a01b0316146114735760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b610db68282600161324e565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156114df57600080fd5b505af11580156114f3573d6000803e3d6000fd5b5050604051601b92506000805160206157e68339815191529150600090a250565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115b45760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e65565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b038316179055604051601c906000805160206157e683398151915290600090a250565b606c546001600160a01b039081169082160361166f5760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610e65565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156116d657600080fd5b505af11580156116ea573d6000803e3d6000fd5b5050604051600192506000805160206157e68339815191529150600090a250565b600061171682612e43565b5468010000000000000000900467ffffffffffffffff1692915050565b61173b6133ee565b61174784848484613442565b6040516018906000805160206157e683398151915290600090a250505050565b600060758267ffffffffffffffff1681548110611786576117866151db565b6000918252602090912001546001600160a01b031692915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361182e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611860612fa9565b6001600160a01b0316146118cb5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b600054610100900460ff16158080156118eb5750600054600160ff909116105b806119055750303b158015611905575060005460ff166001145b6119775760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610e65565b6000805460ff19166001179055801561199a576000805461ff0019166101001790555b436079556119ab6020830183614d52565b606b80546001600160a01b0319166001600160a01b03929092169190911790556119d86020830183614d52565b6001600160a01b03166347fb24c56119f66060850160408601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b50611a7c925050506020830183614d52565b6001600160a01b0316634f61f850611a9a6040850160208601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611af357600080fd5b505af1158015611b07573d6000803e3d6000fd5b50611b1c925050506060830160408401614d52565b606a80546001600160a01b0319166001600160a01b0392909216919091179055611b4c6080830160608401614d52565b606c80546001600160a01b0319166001600160a01b0392909216919091179055611b796020830183614d52565b6001600160a01b031663cee3d728611b976080850160608601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b50611c209250505060a0830160808401614d52565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd13611c5560a0850160808601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd591906151f1565b611dfe57611ce66020830183614d52565b6001600160a01b03166347fb24c5611d0460a0850160808601614d52565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b50611d8d9250505060a0830160808401614d52565b6001600160a01b031663cf8d56d660c0850135611dad60e087018761520e565b6040518463ffffffff1660e01b8152600401611dcb93929190615273565b600060405180830381600087803b158015611de557600080fd5b505af1158015611df9573d6000803e3d6000fd5b505050505b611e0e6040830160208401614d52565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6f91906152a9565b600003611f2957611e866040830160208401614d52565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b505050505b611f3b61012083016101008401614d52565b606e80546001600160a01b0319166001600160a01b0392909216919091179055611f6b60c0830160a08401614d52565b606980546001600160a01b0319166001600160a01b0392909216919091179055611f986020840184614f3e565b6066805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560c083013560655560408301356067556060830135606855604b607155611fe961034084016103208501614f3e565b606960146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555061201961365f565b6001600160a01b031661203260c0850160a08601614d52565b6001600160a01b0316036120885760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f455343524f575f41444d494e0000000000000000000000006044820152606401610e65565b61209860a0840160808501614d52565b6001600160a01b03166120b160c0850160a08601614d52565b6001600160a01b0316036121075760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f455343524f575f4f574e45520000000000000000000000006044820152606401610e65565b61211760c0840160a08501614d52565b606f80546001600160a01b0319166001600160a01b03929092169190911790556121476040840160208501614d52565b607080546001600160a01b0319166001600160a01b039290921691909117905561217961030084016102e08501614d52565b607a80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9092169190911790556000808061220f816121da6121d5368a90038a016102008b016153e3565b613687565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228991906152a9565b9050866102c0013581036122a5576122a2600182615460565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c8301528051606481840301815260849092019052805191012060009061233c906001906136b7565b905061234881846136ef565b612350614c0e565b612363368a90038a016102008b016153e3565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946123c89489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615501565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156124695760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245991906152a9565b6000858152607b60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a150505050505080156124f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6125026133ee565b8061254f5760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610e65565b60005b818110156125cd5761258983838381811061256f5761256f6151db565b90506020020160208101906125849190614d52565b613826565b6125ba83838381811061259e5761259e6151db565b90506020020160208101906125b39190614d52565b600061392f565b50806125c5816155e0565b915050612552565b506040516016906000805160206157e683398151915290600090a25050565b6125f4613a01565b6040516003906000805160206157e683398151915290600090a2565b612618614c78565b61262182612e43565b6040805160c081018252825467ffffffffffffffff808216835268010000000000000000820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b9091041660028111156126915761269161503b565b60028111156126a2576126a261503b565b81526020016001820154815250509050919050565b6068819055604051601a906000805160206157e683398151915290600090a250565b60718190556040516008906000805160206157e683398151915290600090a250565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036127885760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610e65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127ba612fa9565b6001600160a01b0316146128255760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610e65565b610db682826001612fdc565b6128396133ee565b612844828483613a3e565b50506040516017906000805160206157e683398151915290600090a2505050565b607a805460ff1916821515179055604051601e906000805160206157e683398151915290600090a250565b826128dd5760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610e65565b82811461292c5760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610e65565b60005b838110156129c357828282818110612949576129496151db565b905060200201602081019061295e9190615114565b60726000878785818110612974576129746151db565b90506020020160208101906129899190614d52565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806129bb816155e0565b91505061292f565b506040516006906000805160206157e683398151915290600090a250505050565b606980546001600160a01b0319166001600160a01b0383161790556040516020906000805160206157e683398151915290600090a250565b60008167ffffffffffffffff1611612a765760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610e65565b6066805467ffffffffffffffff191667ffffffffffffffff83161790556040516009906000805160206157e683398151915290600090a250565b612ac982612ac3368690038601866153e3565b83613235565b8414612b175760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610e65565b50505050565b60006001612b2a83612e43565b54600160c81b900460ff166002811115612b4657612b4661503b565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd491906155fa565b905090565b612be161365f565b6001600160a01b0316816001600160a01b031603612c415760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f455343524f570000000000000000000000000000000000006044820152606401610e65565b606f80546001600160a01b0319166001600160a01b0383161790556040516019906000805160206157e683398151915290600090a250565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b158015612cf757600080fd5b505af1158015612d0b573d6000803e3d6000fd5b5050604051600092506000805160206157e683398151915291508290a250565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491612d97919061563b565b600060405180830381855afa9150503d8060008114612dd2576040519150601f19603f3d011682016040523d82523d6000602084013e612dd7565b606091505b5091509150818015612dea575080516020145b9250505090565b612df96133ee565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081612e925760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610e65565b50600090815260746020526040902090565b612f5b82356020840135612ebe6060860160408701614d52565b612ece6080870160608801614f3e565b612ede60a0880160808901614f3e565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610db65760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610e65565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561300f576124f58361437d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613069575060408051601f3d908101601f19168201909252613066918101906152a9565b60015b6130db5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610e65565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146131705760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610e65565b506124f583838361443e565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6131a561365f565b604080516001600160a01b03928316815291841660208301520160405180910390a1610f2781614463565b6000816080015160028111156131e8576131e861503b565b03610f275760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610e65565b6000613244846121da85613687565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613281576124f583614506565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156132db575060408051601f3d908101601f191682019092526132d8918101906152a9565b60015b61334d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610e65565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146133e25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610e65565b506124f58383836145aa565b60335460ff166134405760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610e65565b565b600061344d85612e43565b905060018154600160c81b900460ff16600281111561346e5761346e61503b565b146134bb5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610e65565b6134d4846134ce368690038601866153e3565b84613235565b85146135225760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610e65565b600061353b61353636869003860186615657565b6145b3565b9050600061355661355136879003870187615657565b6145c5565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156135bd57600080fd5b505af11580156135d1573d6000803e3d6000fd5b50505060738890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103612fcd565b60008160405160200161369a9190615673565b604051602081830303815290604052805190602001209050919050565b6136bf614c78565b6136c7614c78565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b6136f76145d1565b6002608083018190525060008181526074602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff96831668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b83600281111561380e5761380e61503b565b021790555060a0919091015160019091015560735550565b6001600160a01b03811660009081526076602052604090206002015468010000000000000000900460ff1661389d5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610e65565b6001600160a01b038116600090815260766020526040812060010154607354909190821490806138cc84612e43565b5467ffffffffffffffff1611905081806138e35750805b612b175760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610e65565b6001600160a01b03821660009081526076602052604081208054808411156139995760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610e65565b60006139a58583615681565b85845590506139b48682614656565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b613a096146fb565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e263390565b600080613a5160408601610dad86612e43565b6001613a6561024087016102208801615694565b6002811115613a7657613a7661503b565b1480613aa457506002613a9161024087016102208801615694565b6002811115613aa257613aa261503b565b145b613af05760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610e65565b83613b128635613b0836899003890160e08a016153e3565b6020890135613235565b14613b5f5760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610e65565b6001613b7361018087016101608801615694565b6002811115613b8457613b8461503b565b14613bd15760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610e65565b6000613bdc85612e43565b90506000806101a0880160e0890182613bf5838361474e565b1215613c435760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610e65565b6000613c69613c5860e08d0160c08e01614f3e565b849067ffffffffffffffff1661485b565b90506000811315613cbc5760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610e65565b6002613cd06102408d016102208e01615694565b6002811115613ce157613ce161503b565b14158015613cef5750600081125b15613d5157600196506000613d04848461474e565b13613d515760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610e65565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dd691906152a9565b90506000613de4858361485b565b1315613e325760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610e65565b80613e4360e08e0160c08f01614f3e565b67ffffffffffffffff161115613e9b5760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610e65565b6000613eb4613eaf36879003870187615657565b6148e3565b67ffffffffffffffff169050818103613ed957613ed2826001615460565b9650613edd565b8196505b80600003613f2d5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610e65565b606b546001600160a01b03166316bf5579613f49600184615681565b6040518263ffffffff1660e01b8152600401613f6791815260200190565b602060405180830381865afa158015613f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa891906152a9565b95505050505050613fc887896101a001803603810190612ac391906153e3565b945085851480613fd6575085155b6140225760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610e65565b600061402d86612e43565b54600160c81b900460ff1660028111156140495761404961503b565b146140965760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610e65565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c8301528051606481840301815260849092019052805191012060009161413a9167ffffffffffffffff90911615906136b7565b9050614145846148f1565b60008681526074602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff96831668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156142525761425261503b565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516142d09796959493929190615718565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156143715760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561433d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436191906152a9565b6000878152607b60205260409020555b50505050935093915050565b6001600160a01b0381163b6143fa5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610e65565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6144478361497f565b6000825111806144545750805b156124f557612b1783836149bf565b6001600160a01b0381166144df5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610e65565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610361441d565b6001600160a01b0381163b6145835760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610e65565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61441d565b614447836149e4565b8051600090815b602002015192915050565b805160009060016145ba565b600054610100900460ff1661464e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e65565b613440614a24565b6001600160a01b0382166000908152607760205260408120549061467a8383615460565b6001600160a01b03851660009081526077602052604081208290556078805492935085929091906146ac908490615460565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff16156134405760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610e65565b600080614763613eaf36869003860186615657565b90506000614779613eaf36869003860186615657565b90508067ffffffffffffffff168267ffffffffffffffff1610156147a35760001992505050611044565b8067ffffffffffffffff168267ffffffffffffffff1611156147ca57600192505050611044565b60006147e36147de36889003880188615657565b614aad565b905060006147f96147de36889003880188615657565b90508067ffffffffffffffff168267ffffffffffffffff16101561482557600019945050505050611044565b8067ffffffffffffffff168267ffffffffffffffff16111561484e576001945050505050611044565b6000945050505050611044565b600080614870613eaf36869003860186615657565b9050828167ffffffffffffffff16101561488f57600019915050611044565b828167ffffffffffffffff1611156148ab576001915050611044565b60006148bf6147de36879003870187615657565b67ffffffffffffffff1611156148d9576001915050611044565b6000915050611044565b6020810151600090816145ba565b805467ffffffffffffffff1660000361492157805467ffffffffffffffff19164367ffffffffffffffff16179055565b805468010000000000000000900467ffffffffffffffff16600003610f275780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004367ffffffffffffffff1602179055565b6149888161437d565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6060613247838360405180606001604052806027815260200161580660279139614abc565b6149ed81614506565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600054610100900460ff16614aa15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610e65565b6033805460ff19169055565b602081015160009060016145ba565b60606001600160a01b0384163b614b3b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610e65565b600080856001600160a01b031685604051614b56919061563b565b600060405180830381855af49150503d8060008114614b91576040519150601f19603f3d011682016040523d82523d6000602084013e614b96565b606091505b5091509150614ba6828286614bb0565b9695505050505050565b60608315614bbf575081613247565b825115614bcf5782518084602001fd5b8160405162461bcd60e51b8152600401610e6591906157b2565b6040518060400160405280614bfc614caf565b8152602001614c09614caf565b905290565b6040518060600160405280614c5e604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b8152602001614c6b614ccd565b8152602001614c09614ccd565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180604001604052806002906020820280368337509192915050565b6040518060600160405280614ce0614be9565b81526020016000614ca2565b60008082840360c0811215614d0057600080fd5b8335925060a0601f1982011215614d1657600080fd5b506020830190509250929050565b600060208284031215614d3657600080fd5b5035919050565b6001600160a01b0381168114610f2757600080fd5b600060208284031215614d6457600080fd5b813561324781614d3d565b8015158114610f2757600080fd5b60008060408385031215614d9057600080fd5b8235614d9b81614d3d565b91506020830135614dab81614d6f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614def57614def614db6565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614e1e57614e1e614db6565b604052919050565b60008060408385031215614e3957600080fd5b8235614e4481614d3d565b915060208381013567ffffffffffffffff80821115614e6257600080fd5b818601915086601f830112614e7657600080fd5b813581811115614e8857614e88614db6565b614e9a84601f19601f84011601614df5565b91508082528784828501011115614eb057600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c08284031215614ee057600080fd5b50919050565b6000806000806101208587031215614efd57600080fd5b8435935060208501359250614f158660408701614ece565b939692955092936101000135925050565b803567ffffffffffffffff8116811461110857600080fd5b600060208284031215614f5057600080fd5b61324782614f26565b600080828403610140811215614f6e57600080fd5b833567ffffffffffffffff811115614f8557600080fd5b84016103408187031215614f9857600080fd5b9250610120601f1982011215614d1657600080fd5b60008083601f840112614fbf57600080fd5b50813567ffffffffffffffff811115614fd757600080fd5b6020830191508360208260051b8501011115614ff257600080fd5b9250929050565b6000806020838503121561500c57600080fd5b823567ffffffffffffffff81111561502357600080fd5b61502f85828601614fad565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110610f2757634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff8084511683528060208501511660208401528060408501511660408401525060608301511515606083015260808301516150b981615051565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156150e757600080fd5b84359350610260601f19820112156150fe57600080fd5b5060208401915061028084013590509250925092565b60006020828403121561512657600080fd5b813561324781614d6f565b6000806000806040858703121561514757600080fd5b843567ffffffffffffffff8082111561515f57600080fd5b61516b88838901614fad565b9096509450602087013591508082111561518457600080fd5b5061519187828801614fad565b95989497509550505050565b60008060008061012085870312156151b457600080fd5b843593506151c58660208701614ece565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561520357600080fd5b815161324781614d6f565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261524357600080fd5b83018035915067ffffffffffffffff82111561525e57600080fd5b602001915036819003821315614ff257600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156152bb57600080fd5b5051919050565b600082601f8301126152d357600080fd5b6040516040810181811067ffffffffffffffff821117156152f6576152f6614db6565b806040525080604084018581111561530d57600080fd5b845b8181101561532e5761532081614f26565b83526020928301920161530f565b509195945050505050565b60006080828403121561534b57600080fd5b6040516040810181811067ffffffffffffffff8211171561536e5761536e614db6565b604052905080601f8301841361538357600080fd5b61538b614dcc565b80604085018681111561539d57600080fd5b855b818110156153b757803584526020938401930161539f565b508184526153c587826152c2565b60208501525050505092915050565b80356003811061110857600080fd5b600060c082840312156153f557600080fd5b6040516060810181811067ffffffffffffffff8211171561541857615418614db6565b6040526154258484615339565b8152615433608084016153d4565b602082015260a09290920135604083015250919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156110445761104461544a565b61547c81615051565b9052565b805180518360005b60028110156154a7578251825260209283019290910190600101615488565b505050602090810151906040840160005b60028110156154df57835167ffffffffffffffff16825292820192908201906001016154b8565b505082015190506154f36080840182615473565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c0860152505050602089015161557c60e0840182615480565b5060408901516155906101a0840182615480565b508761026083015286610280830152856102a0830152846102c08301526155c36102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b600060001982036155f3576155f361544a565b5060010190565b60006020828403121561560c57600080fd5b815161324781614d3d565b60005b8381101561563257818101518382015260200161561a565b50506000910152565b6000825161564d818460208701615617565b9190910192915050565b60006080828403121561566957600080fd5b6132478383615339565b60c081016110448284615480565b818103818111156110445761104461544a565b6000602082840312156156a657600080fd5b613247826153d4565b6040818337604082016040820160005b60028110156156f05767ffffffffffffffff6156da83614f26565b16835260209283019291909101906001016156bf565b5050506156ff608082016153d4565b61570881615051565b608083015260a090810135910152565b60006103208201905088358252602089013560208301526040890135604083015260608901356060830152608089013561575181614d3d565b6001600160a01b0316608083015261576b60a08a01614f26565b67ffffffffffffffff80821660a08501528061578960c08d01614f26565b1660c085015250506157a160e0830160e08b016156af565b6101a0615590818401828c016156af565b60208152600082518060208401526157d1816040850160208701615617565b601f01601f1916919091016040019291505056feea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4c494a42bb05232cca25fbebf38c4d04bf33c25cad10d90958d1c61d4236ada64736f6c63430008110033", } // RollupAdminLogicABI is the input ABI used to generate the binding from. @@ -12772,7 +14723,7 @@ func (_RollupAdminLogic *RollupAdminLogicFilterer) ParseUserWithdrawableFundsUpd // RollupCoreMetaData contains all meta data concerning the RollupCore contract. var RollupCoreMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // RollupCoreABI is the input ABI used to generate the binding from. @@ -15434,8 +17385,8 @@ func (_RollupCore *RollupCoreFilterer) ParseUserWithdrawableFundsUpdated(log typ // RollupCreatorMetaData contains all meta data concerning the RollupCreator contract. var RollupCreatorMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"rollupAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inboxAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"RollupCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TemplatesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeCreator\",\"outputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManagerTemplate\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchPoster\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validators\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"disableValidatorWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"maxDataSize\",\"type\":\"uint256\"}],\"name\":\"createRollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"osp\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupAdminLogic\",\"outputs\":[{\"internalType\":\"contractIRollupAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupUserLogic\",\"outputs\":[{\"internalType\":\"contractIRollupUser\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"_bridgeCreator\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"_osp\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"_challengeManagerLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupAdmin\",\"name\":\"_rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"_rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validatorWalletCreator\",\"type\":\"address\"}],\"name\":\"setTemplates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61460d8061007e6000396000f3fe60806040523480156200001157600080fd5b5060043610620000d95760003560e01c80639dba3241116200008b578063f2fde38b1162000062578063f2fde38b146200018e578063f860cefa14620001a5578063fab20def14620001b957600080fd5b80639dba32411462000152578063bc45e0ae1462000166578063f26a62c6146200017a57600080fd5b80638da5cb5b11620000c05780638da5cb5b14620001015780639c683d10146200012a5780639d4798e3146200013e57600080fd5b806301183c8914620000de578063715018a614620000f7575b600080fd5b620000f5620000ef36600462000e57565b620001d0565b005b620000f562000285565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6003546200010e906001600160a01b031681565b6005546200010e906001600160a01b031681565b6004546200010e906001600160a01b031681565b6006546200010e906001600160a01b031681565b6002546200010e906001600160a01b031681565b620000f56200019f36600462000ee6565b6200029d565b6001546200010e906001600160a01b031681565b6200010e620001ca36600462001323565b62000337565b620001da62000c20565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0389811691909117909255600280548216888416179055600380548216878416179055600480548216868416179055600580548216858416179055600680549091169183169190911790556040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a1505050505050565b6200028f62000c20565b6200029b600062000c7c565b565b620002a762000c20565b6001600160a01b038116620003295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b620003348162000c7c565b50565b600154604080517fe6027a8700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163e6027a879160048083019260209291908290030181865afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c191906200151b565b6001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042591906200153b565b8214620004755760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d4154434800000000000000604482015260640162000320565b600160009054906101000a90046001600160a01b03166001600160a01b0316637ba0e8576040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef91906200151b565b6001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200052d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055391906200153b565b8214620005a35760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d415443480000000000000000604482015260640162000320565b6040805161010081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e08201529051620005ee9062000e05565b604051809103906000f0801580156200060b573d6000803e3d6000fd5b506001600160a01b0390811660a0830181905260808901516040517ff2fde38b000000000000000000000000000000000000000000000000000000008152921660048301529063f2fde38b90602401600060405180830381600087803b1580156200067557600080fd5b505af11580156200068a573d6000803e3d6000fd5b505050508686868686604051602001620006a995949392919062001841565b60405160208183030381529060405280519060200120604051620006cd9062000e13565b8190604051809103906000f5905080158015620006ee573d6000803e3d6000fd5b506001600160a01b0390811680835260015460a08401516101208b01516040517f6c6e47c00000000000000000000000000000000000000000000000000000000081529290941693636c6e47c0936200074d939091906004016200188e565b60a0604051808303816000875af11580156200076d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007939190620018dd565b6001600160a01b0390811660e0870152908116608086015290811660208501529081166040840152166060820152805160a0820151620007d591908962000ce4565b6001600160a01b0390811660c08084019182526080808b01805130909152855160408051610120810182526060808a015189168252828a015189166020808401919091528a015189168284015260e0808b01518a1691830191909152858a01518916958201959095529551871660a087015260048054881695870195909552600554871693860193909352600654861661010086015291517f8c28809100000000000000000000000000000000000000000000000000000000815290949190911692638c28809192620008ac928d9291016200195d565b600060405180830381600087803b158015620008c757600080fd5b505af1158015620008dc573d6000803e3d6000fd5b505050506001600160a01b03871615620009745760408083015190517f6e7df3e70000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526001602483015290911690636e7df3e790604401600060405180830381600087803b1580156200095a57600080fd5b505af11580156200096f573d6000803e3d6000fd5b505050505b85511562000a94576000865167ffffffffffffffff8111156200099b576200099b62000f0d565b604051908082528060200260200182016040528015620009c5578160200160208202803683370190505b50905060005b875181101562000a11576001828281518110620009ec57620009ec62001a43565b911515602092830291909101909101528062000a088162001a59565b915050620009cb565b5082516040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a3ffb7729062000a5e908a90859060040162001aa0565b600060405180830381600087803b15801562000a7957600080fd5b505af115801562000a8e573d6000803e3d6000fd5b50505050505b84151560010362000b195781516040517fa2b4f1d800000000000000000000000000000000000000000000000000000000815286151560048201526001600160a01b039091169063a2b4f1d890602401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b505050505b81516040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906313af403590602401600060405180830381600087803b15801562000b7957600080fd5b505af115801562000b8e573d6000803e3d6000fd5b5050505081600001516001600160a01b03167f9376ee483c428b938c96990123ffefe7d47b059702b14e367c4d7a35582d1fc983602001518460a001518560400151866060015160405162000c0c94939291906001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b60405180910390a250519695505050505050565b6000546001600160a01b031633146200029b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000320565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60035460405160009182916001600160a01b0390911690859062000d089062000e21565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562000d4b573d6000803e3d6000fd5b509050806001600160a01b0316631a72d54c868560000151600260009054906101000a90046001600160a01b03168761014001518861016001518961018001518a602001518b608001518c61020001518d61010001516040518b63ffffffff1660e01b815260040162000dc89a9998979695949392919062001afd565b600060405180830381600087803b15801562000de357600080fd5b505af115801562000df8573d6000803e3d6000fd5b5092979650505050505050565b61080b8062001b7b83390190565b61137f806200238683390190565b610ed3806200370583390190565b6001600160a01b03811681146200033457600080fd5b803562000e528162000e2f565b919050565b60008060008060008060c0878903121562000e7157600080fd5b863562000e7e8162000e2f565b9550602087013562000e908162000e2f565b9450604087013562000ea28162000e2f565b9350606087013562000eb48162000e2f565b9250608087013562000ec68162000e2f565b915060a087013562000ed88162000e2f565b809150509295509295509295565b60006020828403121562000ef957600080fd5b813562000f068162000e2f565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171562000f495762000f4962000f0d565b60405290565b6040805190810167ffffffffffffffff8111828210171562000f495762000f4962000f0d565b604051610240810167ffffffffffffffff8111828210171562000f495762000f4962000f0d565b604051601f8201601f1916810167ffffffffffffffff8111828210171562000fc85762000fc862000f0d565b604052919050565b803567ffffffffffffffff8116811462000e5257600080fd5b600082601f83011262000ffb57600080fd5b813567ffffffffffffffff81111562001018576200101862000f0d565b6200102d6020601f19601f8401160162000f9c565b8181528460208386010111156200104357600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156200107d576200107d62000f0d565b5060051b60200190565b600082601f8301126200109957600080fd5b81356020620010b2620010ac8362001060565b62000f9c565b82815260059290921b84018101918181019086841115620010d257600080fd5b8286015b84811015620010ef5780358352918301918301620010d6565b509695505050505050565b6000608082840312156200110d57600080fd5b6040516080810181811067ffffffffffffffff8211171562001133576200113362000f0d565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f8301126200117657600080fd5b6200118062000f4f565b8060408401858111156200119357600080fd5b845b81811015620011b857620011a98162000fd0565b84526020938401930162001195565b509095945050505050565b80356003811062000e5257600080fd5b600081830360c0811215620011e757600080fd5b620011f162000f23565b915060808112156200120257600080fd5b506200120d62000f4f565b83601f8401126200121d57600080fd5b6200122762000f4f565b8060408501868111156200123a57600080fd5b855b81811015620012565780358452602093840193016200123c565b5081845262001266878262001164565b602085015250505081526200127e60808301620011c3565b602082015260a0820135604082015292915050565b803560ff8116811462000e5257600080fd5b600082601f830112620012b757600080fd5b81356020620012ca620010ac8362001060565b82815260059290921b84018101918181019086841115620012ea57600080fd5b8286015b84811015620010ef578035620013048162000e2f565b8352918301918301620012ee565b8035801515811462000e5257600080fd5b600080600080600060a086880312156200133c57600080fd5b853567ffffffffffffffff808211156200135557600080fd5b90870190610340828a0312156200136b57600080fd5b6200137562000f75565b620013808362000fd0565b8152620013906020840162000e45565b60208201526040830135604082015260608301356060820152620013b76080840162000e45565b6080820152620013ca60a0840162000e45565b60a082015260c083013560c082015260e083013582811115620013ec57600080fd5b620013fa8b82860162000fe9565b60e08301525061010080840135838111156200141557600080fd5b620014238c82870162001087565b8284015250506101206200143a8b828601620010fa565b908201526101a0838101356101408301526101c0808501356101608401526101e080860135610180850152610200620014768e828901620011d3565b848601526102c087013583860152620014936102e0880162000e45565b82860152620014a6610300880162001293565b8186015250505050620014bd610320840162000fd0565b6102208201529650620014d36020890162000e45565b95506040880135915080821115620014ea57600080fd5b50620014f988828901620012a5565b9350506200150a6060870162001312565b949793965091946080013592915050565b6000602082840312156200152e57600080fd5b815162000f068162000e2f565b6000602082840312156200154e57600080fd5b5051919050565b6000815180845260005b818110156200157d576020818501810151868301820152016200155f565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015620015cf57815187529582019590820190600101620015b1565b509495945050505050565b60038110620015f957634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b60028110156200162657825182526020928301929091019060010162001605565b505050602090810151906040840160005b60028110156200166057835167ffffffffffffffff168252928201929082019060010162001637565b50508201519050620016766080840182620015da565b506040015160a09190910152565b805167ffffffffffffffff16825260006103406020830151620016b260208601826001600160a01b03169052565b5060408301516040850152606083015160608501526080830151620016e260808601826001600160a01b03169052565b5060a0830151620016fe60a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e0860152620017228286018262001555565b91505061010080840151858303828701526200173f83826200159d565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e083818901528287015193506102009250620017bd83890185620015fd565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff81166103208601525b509392505050565b600081518084526020808501945080840160005b83811015620015cf5781516001600160a01b0316875295820195908201906001016200181a565b60a0815260006200185660a083018862001684565b6001600160a01b0387166020840152828103604084015262001879818762001806565b94151560608401525050608001529392505050565b6001600160a01b0384811682528316602082015260c08101620018d56040830184805182526020810151602083015260408101516040830152606081015160608301525050565b949350505050565b600080600080600060a08688031215620018f657600080fd5b8551620019038162000e2f565b6020870151909550620019168162000e2f565b6040870151909450620019298162000e2f565b60608701519093506200193c8162000e2f565b60808701519092506200194f8162000e2f565b809150509295509295909350565b6000610140808352620019738184018662001684565b9150506001600160a01b0383511660208301526020830151620019a160408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e083015161010062001a28818501836001600160a01b03169052565b8401516001600160a01b0381166101208501529050620017fe565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362001a9957634e487b7160e01b600052601160045260246000fd5b5060010190565b60408152600062001ab5604083018562001806565b82810360208481019190915284518083528582019282019060005b8181101562001af057845115158352938301939183019160010162001ad0565b5090979650505050505050565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff85166101008401528061012084015262001b69818401856200159d565b9d9c5050505050505050505050505056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122075dc18f0530f8604f75617173aef54eff4273ea9c9948c2ae06433e9db2a06dc64736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208e75a7328b65e58fd7ea02a120566dea67b99c9dd2d22fb1bbbedebcbe1a11a664736f6c63430008110033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"rollupAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inboxAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"upgradeExecutor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"name\":\"RollupCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TemplatesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridgeCreator\",\"outputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManagerTemplate\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"maxDataSize\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nativeToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"deployFactoriesToL2\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGasForRetryables\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"batchPosters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"batchPosterManager\",\"type\":\"address\"}],\"internalType\":\"structRollupCreator.RollupDeploymentParams\",\"name\":\"deployParams\",\"type\":\"tuple\"}],\"name\":\"createRollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2FactoriesDeployer\",\"outputs\":[{\"internalType\":\"contractDeployHelper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"osp\",\"outputs\":[{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupAdminLogic\",\"outputs\":[{\"internalType\":\"contractIRollupAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupUserLogic\",\"outputs\":[{\"internalType\":\"contractIRollupUser\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractBridgeCreator\",\"name\":\"_bridgeCreator\",\"type\":\"address\"},{\"internalType\":\"contractIOneStepProofEntry\",\"name\":\"_osp\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"_challengeManagerLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupAdmin\",\"name\":\"_rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"_rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeExecutor\",\"name\":\"_upgradeExecutorLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validatorWalletCreator\",\"type\":\"address\"},{\"internalType\":\"contractDeployHelper\",\"name\":\"_l2FactoriesDeployer\",\"type\":\"address\"}],\"name\":\"setTemplates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgradeExecutorLogic\",\"outputs\":[{\"internalType\":\"contractIUpgradeExecutor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6152d8806200007f6000396000f3fe608060405260043610620000e75760003560e01c8063ac0425bc1162000089578063f0dae4941162000060578063f0dae494146200022d578063f26a62c61462000252578063f2fde38b1462000274578063f860cefa146200029957600080fd5b8063ac0425bc14620001d2578063bc45e0ae14620001f4578063ca96e939146200021657600080fd5b80639c683d1011620000be5780639c683d10146200016c5780639d4798e3146200018e5780639dba324114620001b057600080fd5b8063030cb85e14620000f4578063715018a614620001325780638da5cb5b146200014c57600080fd5b36620000ef57005b600080fd5b3480156200010157600080fd5b5060065462000116906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b3480156200013f57600080fd5b506200014a620002bb565b005b3480156200015957600080fd5b506000546001600160a01b031662000116565b3480156200017957600080fd5b5060035462000116906001600160a01b031681565b3480156200019b57600080fd5b5060055462000116906001600160a01b031681565b348015620001bd57600080fd5b5060045462000116906001600160a01b031681565b348015620001df57600080fd5b5060085462000116906001600160a01b031681565b3480156200020157600080fd5b5060075462000116906001600160a01b031681565b620001166200022736600462001e40565b620002d3565b3480156200023a57600080fd5b506200014a6200024c36600462001f51565b62000d7b565b3480156200025f57600080fd5b5060025462000116906001600160a01b031681565b3480156200028157600080fd5b506200014a620002933660046200200b565b62000e4a565b348015620002a657600080fd5b5060015462000116906001600160a01b031681565b620002c562000ee0565b620002d1600062000f3c565b565b6000806000600160009054906101000a90046001600160a01b03166001600160a01b03166311f022276040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035291906200202b565b50509250925050816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be9190620020ab565b846040015114620004165760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d415443480000000000000060448201526064015b60405180910390fd5b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047b9190620020ab565b846040015114620004cf5760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d41544348000000000000000060448201526064016200040d565b600080600160009054906101000a90046001600160a01b03166001600160a01b03166376768ab96040518163ffffffff1660e01b815260040160a060405180830381865afa15801562000526573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054c91906200202b565b50509250925050816001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000592573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b89190620020ab565b8660400151146200060c5760405162461bcd60e51b815260206004820152601960248201527f53495f4d41585f444154415f53495a455f4d49534d415443480000000000000060448201526064016200040d565b806001600160a01b031663e8eb1dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200064b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006719190620020ab565b866040015114620006c55760405162461bcd60e51b815260206004820152601860248201527f495f4d41585f444154415f53495a455f4d49534d41544348000000000000000060448201526064016200040d565b505050506000604051620006d99062001827565b604051809103906000f080158015620006f6573d6000803e3d6000fd5b5090506000836040516020016200070e9190620023bd565b60405160208183030381529060405280519060200120604051620007329062001835565b8190604051809103906000f590508015801562000753573d6000803e3d6000fd5b506001546060860151865161012001516040517fb4a5cc340000000000000000000000000000000000000000000000000000000081529394506000936001600160a01b039093169263b4a5cc3492620007b59288928892919060040162002485565b60a0604051808303816000875af1158015620007d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fb9190620024dd565b90506000620008108385886000015162000fa4565b905060006200082887600001516080015186620010c7565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192509086169063f2fde38b90602401600060405180830381600087803b1580156200088957600080fd5b505af11580156200089e573d6000803e3d6000fd5b50508851306080918201528951604080516101208101825288516001600160a01b0390811682526020808b0151821690830152898301518116828401528985015181166060808401919091528a015181169482019490945287841660a082015260048054851660c0830152600554851660e0830152600754851661010083015291517f8c288091000000000000000000000000000000000000000000000000000000008152938a169550638c28809194506200095d9390910162002583565b600060405180830381600087803b1580156200097857600080fd5b505af11580156200098d573d6000803e3d6000fd5b5050505060005b8760c001515181101562000a695783602001516001600160a01b0316636e7df3e78960c001518381518110620009ce57620009ce62002669565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801562000a3a57600080fd5b505af115801562000a4f573d6000803e3d6000fd5b50505050808062000a60906200267f565b91505062000994565b5060e08701516001600160a01b03161562000aff57602083015160e08801516040517f1ff647900000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911690631ff6479090602401600060405180830381600087803b15801562000ae557600080fd5b505af115801562000afa573d6000803e3d6000fd5b505050505b6020870151511562000c2c57600087602001515167ffffffffffffffff81111562000b2e5762000b2e62001851565b60405190808252806020026020018201604052801562000b58578160200160208202803683370190505b50905060005b88602001515181101562000ba857600182828151811062000b835762000b8362002669565b911515602092830291909101909101528062000b9f816200267f565b91505062000b5e565b5060208801516040517fa3ffb7720000000000000000000000000000000000000000000000000000000081526001600160a01b0387169163a3ffb7729162000bf691908590600401620026c6565b600060405180830381600087803b15801562000c1157600080fd5b505af115801562000c26573d6000803e3d6000fd5b50505050505b6040517f13af40350000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528516906313af403590602401600060405180830381600087803b15801562000c8957600080fd5b505af115801562000c9e573d6000803e3d6000fd5b5050505086608001511562000cc65762000cc6836040015188606001518960a00151620011f6565b606087810151604085810151608080880151888601516020808b01518b5160075488516001600160a01b03988916815295881693860193909352928616848801528a8616988401989098528c85169383019390935295831660a082015294821660c086015285821660e08601528116610100850152905191811692908716917fd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d918190036101200190a3509195945050505050565b62000d8562000ee0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b038b8116919091179092556002805482168a8416179055600380548216898416179055600480548216888416179055600580548216878416179055600680548216868416179055600780548216858416179055600880549091169183169190911790556040517fc9d3947d22fa124aaec4c7e8c919f79016e2d7b48eee10568375d98b86460d1b90600090a15050505050505050565b62000e5462000ee0565b6001600160a01b03811662000ed25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200040d565b62000edd8162000f3c565b50565b6000546001600160a01b03163314620002d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200040d565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60035460405160009182916001600160a01b0390911690859062000fc89062001843565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200100b573d6000803e3d6000fd5b509050806001600160a01b0316631a72d54c868560000151600260009054906101000a90046001600160a01b03168761014001518861016001518961018001518a602001518b608001518c61020001518d61010001516040518b63ffffffff1660e01b8152600401620010889a9998979695949392919062002723565b600060405180830381600087803b158015620010a357600080fd5b505af1158015620010b8573d6000803e3d6000fd5b509293505050505b9392505050565b6006546040805160208101825260008082529151919283926001600160a01b03909116918591620010f89062001843565b6200110693929190620027a0565b604051809103906000f08015801562001123573d6000803e3d6000fd5b506040805160018082528183019092529192506000919060208083019080368337019050509050848160008151811062001161576200116162002669565b6001600160a01b0392831660209182029290920101526040517f946d92040000000000000000000000000000000000000000000000000000000081529083169063946d920490620011b99085908590600401620027ce565b600060405180830381600087803b158015620011d457600080fd5b505af1158015620011e9573d6000803e3d6000fd5b5093979650505050505050565b6001600160a01b038216620013c7576008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa15801562001271573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012979190620020ab565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905292935091169063d7c641e79083906064016000604051808303818588803b1580156200130a57600080fd5b505af11580156200131f573d6000803e3d6000fd5b5050604051600093503392504791508381818185875af1925050503d806000811462001368576040519150601f19603f3d011682016040523d82523d6000602084013e6200136d565b606091505b5050905080620013c05760405162461bcd60e51b815260206004820152600d60248201527f526566756e64206661696c65640000000000000000000000000000000000000060448201526064016200040d565b5050505050565b6008546040517facd7d02a0000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201849052600092169063acd7d02a90604401602060405180830381865afa15801562001433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014599190620020ab565b9050620014726001600160a01b03841633868462001502565b6008546040517fd7c641e70000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301528581166024830152604482018590529091169063d7c641e790606401600060405180830381600087803b158015620014e257600080fd5b505af1158015620014f7573d6000803e3d6000fd5b50505050505b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526200158c90859062001592565b50505050565b6000620015e9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200167e9092919063ffffffff16565b805190915015620014fd57808060200190518101906200160a9190620027f2565b620014fd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200040d565b60606200168f848460008562001697565b949350505050565b606082471015620017115760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200040d565b6001600160a01b0385163b6200176a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200040d565b600080866001600160a01b0316858760405162001788919062002812565b60006040518083038185875af1925050503d8060008114620017c7576040519150601f19603f3d011682016040523d82523d6000602084013e620017cc565b606091505b5091509150620017de828286620017e9565b979650505050505050565b60608315620017fa575081620010c0565b8251156200180b5782518084602001fd5b8160405162461bcd60e51b81526004016200040d919062002830565b61080b806200284683390190565b61137f806200305183390190565b610ed380620043d083390190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156200188d576200188d62001851565b60405290565b6040805190810167ffffffffffffffff811182821017156200188d576200188d62001851565b604051610240810167ffffffffffffffff811182821017156200188d576200188d62001851565b604051610100810167ffffffffffffffff811182821017156200188d576200188d62001851565b604051601f8201601f1916810167ffffffffffffffff8111828210171562001933576200193362001851565b604052919050565b803567ffffffffffffffff811681146200195457600080fd5b919050565b6001600160a01b038116811462000edd57600080fd5b8035620019548162001959565b600082601f8301126200198e57600080fd5b813567ffffffffffffffff811115620019ab57620019ab62001851565b620019c06020601f19601f8401160162001907565b818152846020838601011115620019d657600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111562001a105762001a1062001851565b5060051b60200190565b600082601f83011262001a2c57600080fd5b8135602062001a4562001a3f83620019f3565b62001907565b82815260059290921b8401810191818101908684111562001a6557600080fd5b8286015b8481101562001a82578035835291830191830162001a69565b509695505050505050565b60006080828403121562001aa057600080fd5b6040516080810181811067ffffffffffffffff8211171562001ac65762001ac662001851565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f83011262001b0957600080fd5b62001b1362001893565b80604084018581111562001b2657600080fd5b845b8181101562001b4b5762001b3c816200193b565b84526020938401930162001b28565b509095945050505050565b8035600381106200195457600080fd5b600081830360c081121562001b7a57600080fd5b62001b8462001867565b9150608081121562001b9557600080fd5b5062001ba062001893565b83601f84011262001bb057600080fd5b62001bba62001893565b80604085018681111562001bcd57600080fd5b855b8181101562001be957803584526020938401930162001bcf565b5081845262001bf9878262001af7565b6020850152505050815262001c116080830162001b56565b602082015260a0820135604082015292915050565b803560ff811681146200195457600080fd5b6000610340828403121562001c4c57600080fd5b62001c56620018b9565b905062001c63826200193b565b815262001c73602083016200196f565b6020820152604082013560408201526060820135606082015262001c9a608083016200196f565b608082015262001cad60a083016200196f565b60a082015260c082013560c082015260e082013567ffffffffffffffff8082111562001cd857600080fd5b62001ce6858386016200197c565b60e08401526101009150818401358181111562001d0257600080fd5b62001d108682870162001a1a565b8385015250505061012062001d288482850162001a8d565b908201526101a0828101356101408301526101c0808401356101608401526101e08085013561018085015261020062001d648782880162001b66565b848601526102c08601358386015262001d816102e087016200196f565b8286015262001d94610300870162001c26565b818601525050505062001dab61032083016200193b565b61022082015292915050565b600082601f83011262001dc957600080fd5b8135602062001ddc62001a3f83620019f3565b82815260059290921b8401810191818101908684111562001dfc57600080fd5b8286015b8481101562001a8257803562001e168162001959565b835291830191830162001e00565b801515811462000edd57600080fd5b8035620019548162001e24565b60006020828403121562001e5357600080fd5b813567ffffffffffffffff8082111562001e6c57600080fd5b90830190610100828603121562001e8257600080fd5b62001e8c620018e0565b82358281111562001e9c57600080fd5b62001eaa8782860162001c38565b82525060208301358281111562001ec057600080fd5b62001ece8782860162001db7565b6020830152506040830135604082015262001eec606084016200196f565b606082015262001eff6080840162001e33565b608082015260a083013560a082015260c08301358281111562001f2157600080fd5b62001f2f8782860162001db7565b60c08301525062001f4360e084016200196f565b60e082015295945050505050565b600080600080600080600080610100898b03121562001f6f57600080fd5b883562001f7c8162001959565b9750602089013562001f8e8162001959565b9650604089013562001fa08162001959565b9550606089013562001fb28162001959565b9450608089013562001fc48162001959565b935060a089013562001fd68162001959565b925060c089013562001fe88162001959565b915060e089013562001ffa8162001959565b809150509295985092959890939650565b6000602082840312156200201e57600080fd5b8135620010c08162001959565b600080600080600060a086880312156200204457600080fd5b8551620020518162001959565b6020870151909550620020648162001959565b6040870151909450620020778162001959565b60608701519093506200208a8162001959565b60808701519092506200209d8162001959565b809150509295509295909350565b600060208284031215620020be57600080fd5b5051919050565b60005b83811015620020e2578181015183820152602001620020c8565b50506000910152565b6000815180845262002105816020860160208601620020c5565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156200214b578151875295820195908201906001016200212d565b509495945050505050565b600381106200217557634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015620021a257825182526020928301929091019060010162002181565b505050602090810151906040840160005b6002811015620021dc57835167ffffffffffffffff1682529282019290820190600101620021b3565b50508201519050620021f2608084018262002156565b506040015160a09190910152565b805167ffffffffffffffff168252600061034060208301516200222e60208601826001600160a01b03169052565b50604083015160408501526060830151606085015260808301516200225e60808601826001600160a01b03169052565b5060a08301516200227a60a08601826001600160a01b03169052565b5060c083015160c085015260e08301518160e08601526200229e82860182620020eb565b9150506101008084015185830382870152620022bb838262002119565b6101208681015180518983015260208101516101408a015260408101516101608a015260608101516101808a01529194509250905050506101408301516101a0818187015261016085015191506101c0828188015261018086015192506101e083818901528287015193506102009250620023398389018562002179565b908601516102c08801528501516001600160a01b03166102e087015284015160ff166103008601525061022083015167ffffffffffffffff81166103208601525b509392505050565b600081518084526020808501945080840160005b838110156200214b5781516001600160a01b03168752958201959082019060010162002396565b6020815260008251610100806020850152620023de61012085018362002200565b91506020850151601f1980868503016040870152620023fe848362002382565b935060408701516060870152606087015191506200242760808701836001600160a01b03169052565b608087015180151560a0880152915060a087015160c087015260c08701519150808685030160e0870152506200245e838262002382565b92505060e08501516200247b828601826001600160a01b03169052565b5090949350505050565b6001600160a01b03858116825284811660208301528316604082015260e08101620024d46060830184805182526020810151602083015260408101516040830152606081015160608301525050565b95945050505050565b600060a08284031215620024f057600080fd5b60405160a0810181811067ffffffffffffffff8211171562002516576200251662001851565b6040528251620025268162001959565b81526020830151620025388162001959565b602082015260408301516200254d8162001959565b60408201526060830151620025628162001959565b60608201526080830151620025778162001959565b60808201529392505050565b6000610140808352620025998184018662002200565b9150506001600160a01b0383511660208301526020830151620025c760408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e08301516101006200264e818501836001600160a01b03169052565b8401516001600160a01b03811661012085015290506200237a565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620026bf57634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000620026db604083018562002382565b82810360208481019190915284518083528582019282019060005b8181101562002716578451151583529383019391830191600101620026f6565b5090979650505050505050565b60006101406001600160a01b03808e16845267ffffffffffffffff8d166020850152808c1660408501528a60608501528960808501528860a085015280881660c085015280871660e08501525060ff8516610100840152806101208401526200278f8184018562002119565b9d9c50505050505050505050505050565b60006001600160a01b03808616835280851660208401525060606040830152620024d46060830184620020eb565b6001600160a01b03831681526040602082015260006200168f604083018462002382565b6000602082840312156200280557600080fd5b8151620010c08162001e24565b6000825162002826818460208701620020c5565b9190910192915050565b602081526000620010c06020830184620020eb56fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eb324ac237cee282d01c9b8eb285ad23578068c2023bb2eae5e324660dc7623964736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122024ca31a7bb4e862d8cc57895426fc2af16a4157c15358d72dd6ad233e4a6677764736f6c63430008110033", } // RollupCreatorABI is the input ABI used to generate the binding from. @@ -15667,6 +17618,37 @@ func (_RollupCreator *RollupCreatorCallerSession) ChallengeManagerTemplate() (co return _RollupCreator.Contract.ChallengeManagerTemplate(&_RollupCreator.CallOpts) } +// L2FactoriesDeployer is a free data retrieval call binding the contract method 0xac0425bc. +// +// Solidity: function l2FactoriesDeployer() view returns(address) +func (_RollupCreator *RollupCreatorCaller) L2FactoriesDeployer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RollupCreator.contract.Call(opts, &out, "l2FactoriesDeployer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2FactoriesDeployer is a free data retrieval call binding the contract method 0xac0425bc. +// +// Solidity: function l2FactoriesDeployer() view returns(address) +func (_RollupCreator *RollupCreatorSession) L2FactoriesDeployer() (common.Address, error) { + return _RollupCreator.Contract.L2FactoriesDeployer(&_RollupCreator.CallOpts) +} + +// L2FactoriesDeployer is a free data retrieval call binding the contract method 0xac0425bc. +// +// Solidity: function l2FactoriesDeployer() view returns(address) +func (_RollupCreator *RollupCreatorCallerSession) L2FactoriesDeployer() (common.Address, error) { + return _RollupCreator.Contract.L2FactoriesDeployer(&_RollupCreator.CallOpts) +} + // Osp is a free data retrieval call binding the contract method 0xf26a62c6. // // Solidity: function osp() view returns(address) @@ -15791,6 +17773,37 @@ func (_RollupCreator *RollupCreatorCallerSession) RollupUserLogic() (common.Addr return _RollupCreator.Contract.RollupUserLogic(&_RollupCreator.CallOpts) } +// UpgradeExecutorLogic is a free data retrieval call binding the contract method 0x030cb85e. +// +// Solidity: function upgradeExecutorLogic() view returns(address) +func (_RollupCreator *RollupCreatorCaller) UpgradeExecutorLogic(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RollupCreator.contract.Call(opts, &out, "upgradeExecutorLogic") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UpgradeExecutorLogic is a free data retrieval call binding the contract method 0x030cb85e. +// +// Solidity: function upgradeExecutorLogic() view returns(address) +func (_RollupCreator *RollupCreatorSession) UpgradeExecutorLogic() (common.Address, error) { + return _RollupCreator.Contract.UpgradeExecutorLogic(&_RollupCreator.CallOpts) +} + +// UpgradeExecutorLogic is a free data retrieval call binding the contract method 0x030cb85e. +// +// Solidity: function upgradeExecutorLogic() view returns(address) +func (_RollupCreator *RollupCreatorCallerSession) UpgradeExecutorLogic() (common.Address, error) { + return _RollupCreator.Contract.UpgradeExecutorLogic(&_RollupCreator.CallOpts) +} + // ValidatorWalletCreator is a free data retrieval call binding the contract method 0xbc45e0ae. // // Solidity: function validatorWalletCreator() view returns(address) @@ -15822,25 +17835,25 @@ func (_RollupCreator *RollupCreatorCallerSession) ValidatorWalletCreator() (comm return _RollupCreator.Contract.ValidatorWalletCreator(&_RollupCreator.CallOpts) } -// CreateRollup is a paid mutator transaction binding the contract method 0xfab20def. +// CreateRollup is a paid mutator transaction binding the contract method 0xca96e939. // -// Solidity: function createRollup((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64) config, address _batchPoster, address[] _validators, bool disableValidatorWhitelist, uint256 maxDataSize) returns(address) -func (_RollupCreator *RollupCreatorTransactor) CreateRollup(opts *bind.TransactOpts, config Config, _batchPoster common.Address, _validators []common.Address, disableValidatorWhitelist bool, maxDataSize *big.Int) (*types.Transaction, error) { - return _RollupCreator.contract.Transact(opts, "createRollup", config, _batchPoster, _validators, disableValidatorWhitelist, maxDataSize) +// Solidity: function createRollup(((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64),address[],uint256,address,bool,uint256,address[],address) deployParams) payable returns(address) +func (_RollupCreator *RollupCreatorTransactor) CreateRollup(opts *bind.TransactOpts, deployParams RollupCreatorRollupDeploymentParams) (*types.Transaction, error) { + return _RollupCreator.contract.Transact(opts, "createRollup", deployParams) } -// CreateRollup is a paid mutator transaction binding the contract method 0xfab20def. +// CreateRollup is a paid mutator transaction binding the contract method 0xca96e939. // -// Solidity: function createRollup((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64) config, address _batchPoster, address[] _validators, bool disableValidatorWhitelist, uint256 maxDataSize) returns(address) -func (_RollupCreator *RollupCreatorSession) CreateRollup(config Config, _batchPoster common.Address, _validators []common.Address, disableValidatorWhitelist bool, maxDataSize *big.Int) (*types.Transaction, error) { - return _RollupCreator.Contract.CreateRollup(&_RollupCreator.TransactOpts, config, _batchPoster, _validators, disableValidatorWhitelist, maxDataSize) +// Solidity: function createRollup(((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64),address[],uint256,address,bool,uint256,address[],address) deployParams) payable returns(address) +func (_RollupCreator *RollupCreatorSession) CreateRollup(deployParams RollupCreatorRollupDeploymentParams) (*types.Transaction, error) { + return _RollupCreator.Contract.CreateRollup(&_RollupCreator.TransactOpts, deployParams) } -// CreateRollup is a paid mutator transaction binding the contract method 0xfab20def. +// CreateRollup is a paid mutator transaction binding the contract method 0xca96e939. // -// Solidity: function createRollup((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64) config, address _batchPoster, address[] _validators, bool disableValidatorWhitelist, uint256 maxDataSize) returns(address) -func (_RollupCreator *RollupCreatorTransactorSession) CreateRollup(config Config, _batchPoster common.Address, _validators []common.Address, disableValidatorWhitelist bool, maxDataSize *big.Int) (*types.Transaction, error) { - return _RollupCreator.Contract.CreateRollup(&_RollupCreator.TransactOpts, config, _batchPoster, _validators, disableValidatorWhitelist, maxDataSize) +// Solidity: function createRollup(((uint64,address,uint256,bytes32,address,address,uint256,string,uint256[],(uint256,uint256,uint256,uint256),uint256,uint256,uint256,((bytes32[2],uint64[2]),uint8,bytes32),uint256,address,uint8,uint64),address[],uint256,address,bool,uint256,address[],address) deployParams) payable returns(address) +func (_RollupCreator *RollupCreatorTransactorSession) CreateRollup(deployParams RollupCreatorRollupDeploymentParams) (*types.Transaction, error) { + return _RollupCreator.Contract.CreateRollup(&_RollupCreator.TransactOpts, deployParams) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -15864,25 +17877,25 @@ func (_RollupCreator *RollupCreatorTransactorSession) RenounceOwnership() (*type return _RollupCreator.Contract.RenounceOwnership(&_RollupCreator.TransactOpts) } -// SetTemplates is a paid mutator transaction binding the contract method 0x01183c89. +// SetTemplates is a paid mutator transaction binding the contract method 0xf0dae494. // -// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _validatorWalletCreator) returns() -func (_RollupCreator *RollupCreatorTransactor) SetTemplates(opts *bind.TransactOpts, _bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _validatorWalletCreator common.Address) (*types.Transaction, error) { - return _RollupCreator.contract.Transact(opts, "setTemplates", _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _validatorWalletCreator) +// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _upgradeExecutorLogic, address _validatorWalletCreator, address _l2FactoriesDeployer) returns() +func (_RollupCreator *RollupCreatorTransactor) SetTemplates(opts *bind.TransactOpts, _bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _upgradeExecutorLogic common.Address, _validatorWalletCreator common.Address, _l2FactoriesDeployer common.Address) (*types.Transaction, error) { + return _RollupCreator.contract.Transact(opts, "setTemplates", _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _upgradeExecutorLogic, _validatorWalletCreator, _l2FactoriesDeployer) } -// SetTemplates is a paid mutator transaction binding the contract method 0x01183c89. +// SetTemplates is a paid mutator transaction binding the contract method 0xf0dae494. // -// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _validatorWalletCreator) returns() -func (_RollupCreator *RollupCreatorSession) SetTemplates(_bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _validatorWalletCreator common.Address) (*types.Transaction, error) { - return _RollupCreator.Contract.SetTemplates(&_RollupCreator.TransactOpts, _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _validatorWalletCreator) +// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _upgradeExecutorLogic, address _validatorWalletCreator, address _l2FactoriesDeployer) returns() +func (_RollupCreator *RollupCreatorSession) SetTemplates(_bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _upgradeExecutorLogic common.Address, _validatorWalletCreator common.Address, _l2FactoriesDeployer common.Address) (*types.Transaction, error) { + return _RollupCreator.Contract.SetTemplates(&_RollupCreator.TransactOpts, _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _upgradeExecutorLogic, _validatorWalletCreator, _l2FactoriesDeployer) } -// SetTemplates is a paid mutator transaction binding the contract method 0x01183c89. +// SetTemplates is a paid mutator transaction binding the contract method 0xf0dae494. // -// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _validatorWalletCreator) returns() -func (_RollupCreator *RollupCreatorTransactorSession) SetTemplates(_bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _validatorWalletCreator common.Address) (*types.Transaction, error) { - return _RollupCreator.Contract.SetTemplates(&_RollupCreator.TransactOpts, _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _validatorWalletCreator) +// Solidity: function setTemplates(address _bridgeCreator, address _osp, address _challengeManagerLogic, address _rollupAdminLogic, address _rollupUserLogic, address _upgradeExecutorLogic, address _validatorWalletCreator, address _l2FactoriesDeployer) returns() +func (_RollupCreator *RollupCreatorTransactorSession) SetTemplates(_bridgeCreator common.Address, _osp common.Address, _challengeManagerLogic common.Address, _rollupAdminLogic common.Address, _rollupUserLogic common.Address, _upgradeExecutorLogic common.Address, _validatorWalletCreator common.Address, _l2FactoriesDeployer common.Address) (*types.Transaction, error) { + return _RollupCreator.Contract.SetTemplates(&_RollupCreator.TransactOpts, _bridgeCreator, _osp, _challengeManagerLogic, _rollupAdminLogic, _rollupUserLogic, _upgradeExecutorLogic, _validatorWalletCreator, _l2FactoriesDeployer) } // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. @@ -15906,6 +17919,27 @@ func (_RollupCreator *RollupCreatorTransactorSession) TransferOwnership(newOwner return _RollupCreator.Contract.TransferOwnership(&_RollupCreator.TransactOpts, newOwner) } +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RollupCreator *RollupCreatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RollupCreator.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RollupCreator *RollupCreatorSession) Receive() (*types.Transaction, error) { + return _RollupCreator.Contract.Receive(&_RollupCreator.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RollupCreator *RollupCreatorTransactorSession) Receive() (*types.Transaction, error) { + return _RollupCreator.Contract.Receive(&_RollupCreator.TransactOpts) +} + // RollupCreatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RollupCreator contract. type RollupCreatorOwnershipTransferredIterator struct { Event *RollupCreatorOwnershipTransferred // Event containing the contract specifics and raw log @@ -16128,42 +18162,56 @@ func (it *RollupCreatorRollupCreatedIterator) Close() error { // RollupCreatorRollupCreated represents a RollupCreated event raised by the RollupCreator contract. type RollupCreatorRollupCreated struct { - RollupAddress common.Address - InboxAddress common.Address - AdminProxy common.Address - SequencerInbox common.Address - Bridge common.Address - Raw types.Log // Blockchain specific contextual infos + RollupAddress common.Address + NativeToken common.Address + InboxAddress common.Address + Outbox common.Address + RollupEventInbox common.Address + ChallengeManager common.Address + AdminProxy common.Address + SequencerInbox common.Address + Bridge common.Address + UpgradeExecutor common.Address + ValidatorWalletCreator common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterRollupCreated is a free log retrieval operation binding the contract event 0x9376ee483c428b938c96990123ffefe7d47b059702b14e367c4d7a35582d1fc9. +// FilterRollupCreated is a free log retrieval operation binding the contract event 0xd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d. // -// Solidity: event RollupCreated(address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge) -func (_RollupCreator *RollupCreatorFilterer) FilterRollupCreated(opts *bind.FilterOpts, rollupAddress []common.Address) (*RollupCreatorRollupCreatedIterator, error) { +// Solidity: event RollupCreated(address indexed rollupAddress, address indexed nativeToken, address inboxAddress, address outbox, address rollupEventInbox, address challengeManager, address adminProxy, address sequencerInbox, address bridge, address upgradeExecutor, address validatorWalletCreator) +func (_RollupCreator *RollupCreatorFilterer) FilterRollupCreated(opts *bind.FilterOpts, rollupAddress []common.Address, nativeToken []common.Address) (*RollupCreatorRollupCreatedIterator, error) { var rollupAddressRule []interface{} for _, rollupAddressItem := range rollupAddress { rollupAddressRule = append(rollupAddressRule, rollupAddressItem) } + var nativeTokenRule []interface{} + for _, nativeTokenItem := range nativeToken { + nativeTokenRule = append(nativeTokenRule, nativeTokenItem) + } - logs, sub, err := _RollupCreator.contract.FilterLogs(opts, "RollupCreated", rollupAddressRule) + logs, sub, err := _RollupCreator.contract.FilterLogs(opts, "RollupCreated", rollupAddressRule, nativeTokenRule) if err != nil { return nil, err } return &RollupCreatorRollupCreatedIterator{contract: _RollupCreator.contract, event: "RollupCreated", logs: logs, sub: sub}, nil } -// WatchRollupCreated is a free log subscription operation binding the contract event 0x9376ee483c428b938c96990123ffefe7d47b059702b14e367c4d7a35582d1fc9. +// WatchRollupCreated is a free log subscription operation binding the contract event 0xd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d. // -// Solidity: event RollupCreated(address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge) -func (_RollupCreator *RollupCreatorFilterer) WatchRollupCreated(opts *bind.WatchOpts, sink chan<- *RollupCreatorRollupCreated, rollupAddress []common.Address) (event.Subscription, error) { +// Solidity: event RollupCreated(address indexed rollupAddress, address indexed nativeToken, address inboxAddress, address outbox, address rollupEventInbox, address challengeManager, address adminProxy, address sequencerInbox, address bridge, address upgradeExecutor, address validatorWalletCreator) +func (_RollupCreator *RollupCreatorFilterer) WatchRollupCreated(opts *bind.WatchOpts, sink chan<- *RollupCreatorRollupCreated, rollupAddress []common.Address, nativeToken []common.Address) (event.Subscription, error) { var rollupAddressRule []interface{} for _, rollupAddressItem := range rollupAddress { rollupAddressRule = append(rollupAddressRule, rollupAddressItem) } + var nativeTokenRule []interface{} + for _, nativeTokenItem := range nativeToken { + nativeTokenRule = append(nativeTokenRule, nativeTokenItem) + } - logs, sub, err := _RollupCreator.contract.WatchLogs(opts, "RollupCreated", rollupAddressRule) + logs, sub, err := _RollupCreator.contract.WatchLogs(opts, "RollupCreated", rollupAddressRule, nativeTokenRule) if err != nil { return nil, err } @@ -16195,9 +18243,9 @@ func (_RollupCreator *RollupCreatorFilterer) WatchRollupCreated(opts *bind.Watch }), nil } -// ParseRollupCreated is a log parse operation binding the contract event 0x9376ee483c428b938c96990123ffefe7d47b059702b14e367c4d7a35582d1fc9. +// ParseRollupCreated is a log parse operation binding the contract event 0xd9bfd3bb3012f0caa103d1ba172692464d2de5c7b75877ce255c72147086a79d. // -// Solidity: event RollupCreated(address indexed rollupAddress, address inboxAddress, address adminProxy, address sequencerInbox, address bridge) +// Solidity: event RollupCreated(address indexed rollupAddress, address indexed nativeToken, address inboxAddress, address outbox, address rollupEventInbox, address challengeManager, address adminProxy, address sequencerInbox, address bridge, address upgradeExecutor, address validatorWalletCreator) func (_RollupCreator *RollupCreatorFilterer) ParseRollupCreated(log types.Log) (*RollupCreatorRollupCreated, error) { event := new(RollupCreatorRollupCreated) if err := _RollupCreator.contract.UnpackLog(event, "RollupCreated", log); err != nil { @@ -16342,8 +18390,8 @@ func (_RollupCreator *RollupCreatorFilterer) ParseTemplatesUpdated(log types.Log // RollupEventInboxMetaData contains all meta data concerning the RollupEventInbox contract. var RollupEventInboxMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516109ae6100366000396000818160e801526102a701526109ae6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b6100746100843660046107a2565b61029d565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c63660046107c6565b610491565b60005461009c906001600160a01b031681565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036101815760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084015b60405180910390fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146101f7576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610178565b60008054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c9190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361033b5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610178565b6000546001600160a01b03161561037e576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166103be576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa15801561043d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104619190610842565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b031633146104eb5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610178565b806105385760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610178565b6001486105436106c4565b156105b857606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab919061085f565b6105b59082610878565b90505b600085838387876040516020016105d39594939291906108b8565b60408051808303601f190181529082905260008054825160208401207f8db5993b000000000000000000000000000000000000000000000000000000008552600b6004860152602485018390526044850152919350916001600160a01b0390911690638db5993b906064016020604051808303816000875af115801561065d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610681919061085f565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b39190610929565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491610730919061095c565b600060405180830381855afa9150503d806000811461076b576040519150601f19603f3d011682016040523d82523d6000602084013e610770565b606091505b5091509150818015610783575080516020145b9250505090565b6001600160a01b038116811461079f57600080fd5b50565b6000602082840312156107b457600080fd5b81356107bf8161078a565b9392505050565b6000806000604084860312156107db57600080fd5b83359250602084013567ffffffffffffffff808211156107fa57600080fd5b818601915086601f83011261080e57600080fd5b81358181111561081d57600080fd5b87602082850101111561082f57600080fd5b6020830194508093505050509250925092565b60006020828403121561085457600080fd5b81516107bf8161078a565b60006020828403121561087157600080fd5b5051919050565b808201808211156108b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b83811015610920578181015183820152602001610908565b50506000910152565b6020815260008251806020840152610948816040850160208701610905565b601f01601f19169190910160400192915050565b6000825161096e818460208701610905565b919091019291505056fea26469706673582212206dac08f48f4d7695476a9905fc98e80e1d29104caa21b58fff1336d7b803524c64736f6c63430008110033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HadZeroInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RollupNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"InboxMessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageNum\",\"type\":\"uint256\"}],\"name\":\"InboxMessageDeliveredFromOrigin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"}],\"name\":\"rollupInitialized\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b50608051610a6a61003060003960006103380152610a6a6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063cb23bcb511610050578063cb23bcb514610089578063cf8d56d6146100b8578063e78cea92146100cb57600080fd5b80636ae71f121461006c578063c4d66de814610076575b600080fd5b6100746100de565b005b610074610084366004610846565b61032e565b60015461009c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100746100c636600461086a565b610522565b60005461009c906001600160a01b031681565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015591906108e6565b6001600160a01b0316336001600160a01b03161461023d57600154604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156101cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f391906108e6565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b591906108e6565b6001549091506001600160a01b038083169116036102ff576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103cc5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610234565b6000546001600160a01b03161561040f576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661044f576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906108e6565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b6001546001600160a01b0316331461057c5760405162461bcd60e51b815260206004820152600b60248201527f4f4e4c595f524f4c4c55500000000000000000000000000000000000000000006044820152606401610234565b806105c95760405162461bcd60e51b815260206004820152601260248201527f454d5054595f434841494e5f434f4e46494700000000000000000000000000006044820152606401610234565b6001486105d46106c3565b1561064957606c6001600160a01b031663f5d6ded76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190610903565b610646908261091c565b90505b60008583838787604051602001610664959493929190610956565b6040516020818303038152906040529050600061068082610789565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b836040516106b291906109c7565b60405180910390a250505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f20000000000000000000000000000000000000000000000000000000017905290516000918291829160649161072f9190610a18565b600060405180830381855afa9150503d806000811461076a576040519150601f19603f3d011682016040523d82523d6000602084013e61076f565b606091505b5091509150818015610782575080516020145b9250505090565b60008054825160208401206040517f8db5993b000000000000000000000000000000000000000000000000000000008152600b60048201526024810184905260448101919091526001600160a01b0390911690638db5993b906064016020604051808303816000875af1158015610804573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108289190610903565b92915050565b6001600160a01b038116811461084357600080fd5b50565b60006020828403121561085857600080fd5b81356108638161082e565b9392505050565b60008060006040848603121561087f57600080fd5b83359250602084013567ffffffffffffffff8082111561089e57600080fd5b818601915086601f8301126108b257600080fd5b8135818111156108c157600080fd5b8760208285010111156108d357600080fd5b6020830194508093505050509250925092565b6000602082840312156108f857600080fd5b81516108638161082e565b60006020828403121561091557600080fd5b5051919050565b80820180821115610828577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8581527fff000000000000000000000000000000000000000000000000000000000000008560f81b1660208201528360218201528183604183013760009101604101908152949350505050565b60005b838110156109be5781810151838201526020016109a6565b50506000910152565b60208152600082518060208401526109e68160408501602087016109a3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008251610a2a8184602087016109a3565b919091019291505056fea2646970667358221220e92410af920472135ea4276234b097c655d9f73707bbbeb3b3701b3b2fc3811a64736f6c63430008110033", } // RollupEventInboxABI is the input ABI used to generate the binding from. @@ -16930,7 +18978,7 @@ func (_RollupEventInbox *RollupEventInboxFilterer) ParseInboxMessageDeliveredFro // RollupLibMetaData contains all meta data concerning the RollupLib contract. var RollupLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220519d317a2d5f85ae08a4f0487a1c955de8a7f7ebd7ed5ae7ec8413f1e84f37ab64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202baa7bf237e9c2f88b71f2b7305b103ff1c64870e779d8acee635f9656a04aff64736f6c63430008110033", } // RollupLibABI is the input ABI used to generate the binding from. @@ -17102,8 +19150,8 @@ func (_RollupLib *RollupLibTransactorRaw) Transact(opts *bind.TransactOpts, meth // RollupProxyMetaData contains all meta data concerning the RollupProxy contract. var RollupProxyMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInbox\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initializeProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122075dc18f0530f8604f75617173aef54eff4273ea9c9948c2ae06433e9db2a06dc64736f6c63430008110033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"stakeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseStake\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loserStakeEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainConfig\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"miniStakeValues\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delaySeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureSeconds\",\"type\":\"uint256\"}],\"internalType\":\"structISequencerInbox.MaxTimeVariation\",\"name\":\"sequencerInboxMaxTimeVariation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBlockEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroBigStepEdgeHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"layerZeroSmallStepEdgeHeight\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"genesisAssertionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"genesisInboxCount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"anyTrustFastConfirmer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numBigStepLevel\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"challengeGracePeriodBlocks\",\"type\":\"uint64\"}],\"internalType\":\"structConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIBridge\",\"name\":\"bridge\",\"type\":\"address\"},{\"internalType\":\"contractISequencerInbox\",\"name\":\"sequencerInbox\",\"type\":\"address\"},{\"internalType\":\"contractIInboxBase\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"contractIOutbox\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"rollupEventInbox\",\"type\":\"address\"},{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollupAdminLogic\",\"type\":\"address\"},{\"internalType\":\"contractIRollupUser\",\"name\":\"rollupUserLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validatorWalletCreator\",\"type\":\"address\"}],\"internalType\":\"structContractDependencies\",\"name\":\"connectedContracts\",\"type\":\"tuple\"}],\"name\":\"initializeProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b5061135f806100206000396000f3fe6080604052600436106100225760003560e01c80638c2880911461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f610054366004610d46565b61006b565b6100696100646101bd565b6102a1565b565b60006100756102ca565b6001600160a01b031614801561009b575060006100906102fd565b6001600160a01b0316145b80156100b7575060006100ac610325565b6001600160a01b0316145b156101b5576101b18160c0015183836040516024016100d79291906110da565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6f62fdfd0000000000000000000000000000000000000000000000000000000017905260e08601519087015191516001600160a01b0390921660248301529060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052608087015161034d565b5050565b6101b1610059565b600060043610156102155760405162461bcd60e51b815260206004820152600b60248201527f4e4f5f46554e435f53494700000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000336102206102ca565b6001600160a01b03160361023b576102366102fd565b610243565b610243610325565b90506001600160a01b0381163b61029c5760405162461bcd60e51b815260206004820152601360248201527f5441524745545f4e4f545f434f4e545241435400000000000000000000000000604482015260640161020c565b919050565b3660008037600080366000845af43d6000803e8080156102c0573d6000f35b3d6000fd5b505050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6102ee565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6102ee565b61037860017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610461129c565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146103a6576103a66112bd565b6103d160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61129c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146103ff576103ff6112bd565b61042a60017f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546e61129c565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d14610458576104586112bd565b61046181610480565b61046d858560006104d7565b61047983836000610502565b5050505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a96102ca565b604080516001600160a01b03928316815291841660208301520160405180910390a16104d48161050b565b50565b6104e0836105e3565b6000825111806104ed5750805b156102c5576104fc8383610623565b50505050565b6104e083610651565b6001600160a01b0381166105875760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161020c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6105ec81610691565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610648838360405180606001604052806027815260200161130360279139610735565b90505b92915050565b61065a8161082b565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b6001600160a01b0381163b61070e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161020c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105aa565b60606001600160a01b0384163b6107b45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161020c565b600080856001600160a01b0316856040516107cf91906112d3565b600060405180830381855af49150503d806000811461080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b509150915061081f8282866108cf565b925050505b9392505050565b6001600160a01b0381163b6108a85760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161020c565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6105aa565b606083156108de575081610824565b8251156108ee5782518084602001fd5b8160405162461bcd60e51b815260040161020c91906112ef565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561094157610941610908565b60405290565b6040805190810167ffffffffffffffff8111828210171561094157610941610908565b604051610120810167ffffffffffffffff8111828210171561094157610941610908565b604051610240810167ffffffffffffffff8111828210171561094157610941610908565b604051601f8201601f1916810167ffffffffffffffff811182821017156109db576109db610908565b604052919050565b803567ffffffffffffffff8116811461029c57600080fd5b80356001600160a01b038116811461029c57600080fd5b600082601f830112610a2357600080fd5b813567ffffffffffffffff811115610a3d57610a3d610908565b610a506020601f19601f840116016109b2565b818152846020838601011115610a6557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610a9357600080fd5b8135602067ffffffffffffffff821115610aaf57610aaf610908565b8160051b610abe8282016109b2565b9283528481018201928281019087851115610ad857600080fd5b83870192505b84831015610af757823582529183019190830190610ade565b979650505050505050565b600060808284031215610b1457600080fd5b6040516080810181811067ffffffffffffffff82111715610b3757610b37610908565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201525092915050565b600082601f830112610b7957600080fd5b610b81610947565b806040840185811115610b9357600080fd5b845b81811015610bb457610ba6816109e3565b845260209384019301610b95565b509095945050505050565b80356003811061029c57600080fd5b600081830360c0811215610be157600080fd5b610be961091e565b91506080811215610bf957600080fd5b50610c02610947565b83601f840112610c1157600080fd5b610c19610947565b806040850186811115610c2b57600080fd5b855b81811015610c45578035845260209384019301610c2d565b50818452610c538782610b68565b60208501525050508152610c6960808301610bbf565b602082015260a0820135604082015292915050565b803560ff8116811461029c57600080fd5b60006101208284031215610ca257600080fd5b610caa61096a565b9050610cb5826109fb565b8152610cc3602083016109fb565b6020820152610cd4604083016109fb565b6040820152610ce5606083016109fb565b6060820152610cf6608083016109fb565b6080820152610d0760a083016109fb565b60a0820152610d1860c083016109fb565b60c0820152610d2960e083016109fb565b60e0820152610100610d3c8184016109fb565b9082015292915050565b600080610140808486031215610d5b57600080fd5b833567ffffffffffffffff80821115610d7357600080fd5b908501906103408288031215610d8857600080fd5b610d9061098e565b610d99836109e3565b8152610da7602084016109fb565b60208201526040830135604082015260608301356060820152610dcc608084016109fb565b6080820152610ddd60a084016109fb565b60a082015260c083013560c082015260e083013582811115610dfe57600080fd5b610e0a89828601610a12565b60e0830152506101008084013583811115610e2457600080fd5b610e308a828701610a82565b8284015250506101209150610e4788838501610b02565b828201526101a0915081830135848201526101c09350838301356101608201526101e080840135610180830152610200610e838a828701610bce565b848401526102c085013586840152610e9e6102e086016109fb565b82840152610eaf6103008601610c7e565b9083015250610ec161032084016109e3565b61022082015280955050505050610edb8460208501610c8f565b90509250929050565b60005b83811015610eff578181015183820152602001610ee7565b50506000910152565b60008151808452610f20816020860160208601610ee4565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610f6457815187529582019590820190600101610f48565b509495945050505050565b60038110610f8d57634e487b7160e01b600052602160045260246000fd5b9052565b805180518360005b6002811015610fb8578251825260209283019290910190600101610f99565b505050602090810151906040840160005b6002811015610ff057835167ffffffffffffffff1682529282019290820190600101610fc9565b505082015190506110046080840182610f6f565b506040015160a09190910152565b6001600160a01b0380825116835280602083015116602084015280604083015116604084015250606081015161105360608401826001600160a01b03169052565b50608081015161106e60808401826001600160a01b03169052565b5060a081015161108960a08401826001600160a01b03169052565b5060c08101516110a460c08401826001600160a01b03169052565b5060e08101516110bf60e08401826001600160a01b03169052565b50610100818101516001600160a01b038116848301526104fc565b60006101408083526110f8818401865167ffffffffffffffff169052565b6020850151610160611114818601836001600160a01b03169052565b604087015191506101808281870152606088015192506101a08381880152608089015193506101c0611150818901866001600160a01b03169052565b60a08a015194506101e061116e818a01876001600160a01b03169052565b60c08b0151955061020086818b015260e08c0151965061034061022081818d015261119d6104808d018a610f08565b98506101008e01517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08d8b03016102408e01526111da8a82610f34565b9950506101208e01516112126102608e0182805182526020810151602083015260408101516040830152606081015160608301525050565b50988d01516102e08c0152868d01516103008c0152858d01516103208c0152848d015198611242828d018b610f91565b938d01516104008c015250908b01516001600160a01b03166104208a01528a015160ff1661044089015289015167ffffffffffffffff8116610460890152945061128b92505050565b915061082490506020830184611012565b8181038181111561064b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082516112e5818460208701610ee4565b9190910192915050565b6020815260006106486020830184610f0856fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eb324ac237cee282d01c9b8eb285ad23578068c2023bb2eae5e324660dc7623964736f6c63430008110033", } // RollupProxyABI is the input ABI used to generate the binding from. @@ -17906,7 +19954,7 @@ func (_RollupProxy *RollupProxyFilterer) ParseUpgradedSecondary(log types.Log) ( // RollupReaderMetaData contains all meta data concerning the RollupReader contract. var RollupReaderMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"_rollup\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nodeNum\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentNodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"nodeHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"executionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"afterState\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"numBlocks\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structIOldRollup.Assertion\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"NodeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nodeNum\",\"type\":\"uint64\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"confirmData\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"prevNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"deadlineBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"noChildConfirmedBeforeBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"childStakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"latestChildNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nodeHash\",\"type\":\"bytes32\"}],\"internalType\":\"structNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"latestStakedNode\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"currentChallenge\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structOldStaker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOldRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea264697066735822122079c9e0981fcc52051d716a6a035fb63d6568479a0dc3d17d6cabeebef346cc3d64736f6c63430008110033", + Bin: "0x60a060405234801561001057600080fd5b50604051610be3380380610be383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610b206100c3600039600081816101a5015281816101f6015281816102b601528181610333015281816104500152818161051b0152818161058a0152818161060e01526106a50152610b206000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063a23c44b111610076578063cb23bcb51161005b578063cb23bcb5146101a0578063dff69787146101c7578063facd743b146101cf57600080fd5b8063a23c44b11461012f578063bc45e0ae1461019857600080fd5b806365f7f80d146100a85780636ddd3744146100ce5780638ee1a126146100f957806392c8134c1461010f575b600080fd5b6100b06101f2565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100e16100dc36600461072b565b61027b565b6040516001600160a01b0390911681526020016100c5565b61010161032f565b6040519081526020016100c5565b61012261011d36600461072b565b6103b3565b6040516100c5919061074f565b61014261013d366004610868565b6104bc565b6040516100c59190600060a08201905082518252602083015167ffffffffffffffff8082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b6100e1610586565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6100b061060a565b6101e26101dd366004610868565b61066a565b60405190151581526020016100c5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166365f7f80d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102769190610895565b905090565b6040517f6ddd374400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636ddd374490602401602060405180830381865afa158015610305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032991906108b2565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ee1a1266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561038f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108cf565b6040805161018081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101208201819052610140820181905261016082015290517f92c8134c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906392c8134c9060240161018060405180830381865afa158015610498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610939565b6040805160a08101825260008082526020820181905281830181905260608201819052608082015290517fa23c44b10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a23c44b19060240160a060405180830381865afa158015610562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610a1b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc45e0ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027691906108b2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dff697876040518163ffffffff1660e01b8152600401602060405180830381865afa158015610252573d6000803e3d6000fd5b6040517ffacd743b0000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063facd743b90602401602060405180830381865afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103299190610acf565b67ffffffffffffffff8116811461072857600080fd5b50565b60006020828403121561073d57600080fd5b813561074881610712565b9392505050565b600061018082019050825182526020830151602083015260408301516040830152606083015161078b606084018267ffffffffffffffff169052565b5060808301516107a7608084018267ffffffffffffffff169052565b5060a08301516107c360a084018267ffffffffffffffff169052565b5060c08301516107df60c084018267ffffffffffffffff169052565b5060e08301516107fb60e084018267ffffffffffffffff169052565b506101008381015167ffffffffffffffff81168483015250506101208381015167ffffffffffffffff81168483015250506101408381015167ffffffffffffffff811684830152505061016092830151919092015290565b6001600160a01b038116811461072857600080fd5b60006020828403121561087a57600080fd5b813561074881610853565b805161089081610712565b919050565b6000602082840312156108a757600080fd5b815161074881610712565b6000602082840312156108c457600080fd5b815161074881610853565b6000602082840312156108e157600080fd5b5051919050565b604051610180810167ffffffffffffffff81118282101715610933577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000610180828403121561094c57600080fd5b6109546108e8565b82518152602083015160208201526040830151604082015261097860608401610885565b606082015261098960808401610885565b608082015261099a60a08401610885565b60a08201526109ab60c08401610885565b60c08201526109bc60e08401610885565b60e08201526101006109cf818501610885565b908201526101206109e1848201610885565b908201526101406109f3848201610885565b90820152610160928301519281019290925250919050565b8051801515811461089057600080fd5b600060a08284031215610a2d57600080fd5b60405160a0810181811067ffffffffffffffff82111715610a77577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526020830151610a8c81610712565b60208201526040830151610a9f81610712565b60408201526060830151610ab281610712565b6060820152610ac360808401610a0b565b60808201529392505050565b600060208284031215610ae157600080fd5b61074882610a0b56fea26469706673582212205e257ad4386cb97c913f69806e0d6838d107ffb4d1a2d411805f098e07201f3c64736f6c63430008110033", } // RollupReaderABI is the input ABI used to generate the binding from. @@ -18524,8 +20572,8 @@ func (_RollupReader *RollupReaderFilterer) ParseNodeCreated(log types.Log) (*Rol // RollupUserLogicMetaData contains all meta data concerning the RollupUserLogic contract. var RollupUserLogicMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VALIDATOR_AFK_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"addToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"computeAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"winningEdgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"confirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakeToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"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\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"}],\"name\":\"reduceDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterValidatorAfk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOldDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"stakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e0604052620000196200003a60201b62001cef1760201c565b15156080523060a0524660c0523480156200003357600080fd5b5062000108565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b1790529051600091829182916064916200007a9190620000d7565b600060405180830381855afa9150503d8060008114620000b7576040519150601f19603f3d011682016040523d82523d6000602084013e620000bc565b606091505b5091509150818015620000d0575080516020145b9250505090565b6000825160005b81811015620000fa5760208186018101518583015201620000de565b506000920191825250919050565b60805160a05160c0516145786200014d60003960006119490152600081816113b5015281816119bf0152611a55015260008181610d020152612de201526145786000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c80636177fd18116101d3578063c2c2e68e11610104578063e8bd4922116100a2578063f065de3f1161007c578063f065de3f14610885578063f3f0a03e14610898578063facd743b146108ab578063fb0e722b146108ce57600080fd5b8063e8bd4922146107dd578063ee35f32714610854578063ef40a6701461085c57600080fd5b8063dff69787116100de578063dff697871461079c578063e51019a6146107a4578063e531d8c7146107b7578063e78cea92146107ca57600080fd5b8063c2c2e68e1461076e578063c4d66de814610776578063ce11e6ab1461078957600080fd5b806388302884116101715780639a8a05921161014b5780639a8a05921461066f578063a23c44b114610678578063aa38a6e714610748578063bc45e0ae1461075b57600080fd5b8063883028841461063e5780638da5cb5b1461065e5780638ee1a1261461066657600080fd5b80636ddd3744116101ad5780636ddd37441461060657806371ef232c146106195780637300201c1461062257806376e7e23b1461063557600080fd5b80636177fd18146105b55780636420fb9f146105eb57806365f7f80d146105fe57600080fd5b806333635fc2116102ad57806352d1902d1161024b57806357ef4ab91161022557806357ef4ab9146105875780635c975abb1461058f5780636096686d1461059a57806361373919146105ad57600080fd5b806352d1902d1461055457806355840a581461055c57806356bbc9e61461057457600080fd5b80633be680ea116102875780633be680ea1461050257806345e38b641461052e5780634ceccfe51461053757806351ed6a301461054157600080fd5b806333635fc2146104d4578063353325e0146104e75780633b86de19146104ef57600080fd5b806318baaab91161031a5780632abdd230116102f45780632abdd230146104585780632e7acfa6146104845780632f30cabd1461049857806330836228146104c157600080fd5b806318baaab9146104345780631b1689e91461043c5780631e83d30f1461044557600080fd5b8063117155851161034b57806311715585146103ca57806312ab3d3b146103f657806313c56ca71461041357600080fd5b8063023a96fe1461037257806304972af9146103a257806310b98a35146103b7575b600080fd5b606954610385906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103b56103b0366004613b89565b6108e1565b005b6103b56103c5366004613bc8565b6108fb565b6103dd6103d8366004613c26565b610ce2565b60405167ffffffffffffffff9091168152602001610399565b607a546104039060ff1681565b6040519015158152602001610399565b610426610421366004613c26565b610cfe565b604051908152602001610399565b6103b5610e46565b61042660795481565b6103b5610453366004613c26565b610f1a565b610426610466366004613c54565b6001600160a01b031660009081526076602052604090206001015490565b6066546103dd9067ffffffffffffffff1681565b6104266104a6366004613c54565b6001600160a01b031660009081526077602052604090205490565b6104036104cf366004613c26565b610f91565b6104266104e2366004613c71565b610fad565b610426610fd2565b6103b56104fd366004613cbb565b61100e565b6069546103dd9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61042660715481565b6104266203138081565b607054610385906001600160a01b031681565b6104266113a8565b607a546103859061010090046001600160a01b031681565b6103dd610582366004613c26565b61146d565b6103b5611490565b60335460ff16610403565b6103b56105a8366004613ce8565b611508565b610426611581565b6104036105c3366004613c54565b6001600160a01b0316600090815260766020526040902060020154600160401b900460ff1690565b6103b56105f9366004613cbb565b611604565b607354610426565b610385610614366004613d3e565b6117c2565b61042660785481565b6103b5610630366004613d5b565b6117fc565b61042660675481565b61065161064c366004613c26565b61181d565b6040516103999190613dc7565b6103856118e9565b61042660685481565b61042660655481565b610709610686366004613c54565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152607660209081526040918290208251608081018452815481526001820154928101929092526002015467ffffffffffffffff811692820192909252600160401b90910460ff161515606082015290565b6040516103999190815181526020808301519082015260408083015167ffffffffffffffff169082015260609182015115159181019190915260800190565b606d54610385906001600160a01b031681565b606e54610385906001600160a01b031681565b6103b56118f3565b6103b5610784366004613c54565b6119b5565b606c54610385906001600160a01b031681565b6075546103dd565b6103b56107b2366004613e28565b611b5a565b6104036107c5366004613c26565b611bc1565b606b54610385906001600160a01b031681565b6108226107eb366004613c54565b60766020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b900460ff1684565b6040516103999493929190938452602084019290925267ffffffffffffffff1660408301521515606082015260800190565b610385611bf1565b61042661086a366004613c54565b6001600160a01b031660009081526076602052604090205490565b606f54610385906001600160a01b031681565b6103b56108a6366004613e66565b611c78565b6104036108b9366004613c54565b60726020526000908152604090205460ff1681565b606a54610385906001600160a01b031681565b6108f7816108ee84611db5565b60010154611e16565b5050565b3360009081526072602052604090205460ff168061091b5750607a5460ff165b61095c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b60448201526064015b60405180910390fd5b610964611f1b565b600061096f87611db5565b9050600061097c87611db5565b905061098c848260010154611e16565b61099c6080850160608601613d3e565b82546109b99190600160801b900467ffffffffffffffff16613ea8565b67ffffffffffffffff16431015610a125760405162461bcd60e51b815260206004820152600f60248201527f4245464f52455f444541444c494e4500000000000000000000000000000000006044820152606401610953565b6073548714610a635760405162461bcd60e51b815260206004820152601960248201527f505245565f4e4f545f4c41544553545f434f4e4649524d4544000000000000006044820152606401610953565b8054600160401b900467ffffffffffffffff1615610ccc576000610a8d6060860160408701613c54565b6001600160a01b031663fda2892e876040518263ffffffff1660e01b8152600401610aba91815260200190565b6101e060405180830381865afa158015610ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc9190613f72565b9050888160e0015114610b515760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f57494e4e4552000000000000000000000000000000000000000000006044820152606401610953565b60018161016001516001811115610b6a57610b6a613d93565b14610bb75760405162461bcd60e51b815260206004820152601260248201527f454447455f4e4f545f434f4e4649524d454400000000000000000000000000006044820152606401610953565b80610140015167ffffffffffffffff16600003610c165760405162461bcd60e51b815260206004820152601760248201527f5a45524f5f434f4e4649524d45445f41545f424c4f434b0000000000000000006044820152606401610953565b606954610140820151610c4b9174010000000000000000000000000000000000000000900467ffffffffffffffff1690613ea8565b67ffffffffffffffff16431015610cca5760405162461bcd60e51b815260206004820152602160248201527f4348414c4c454e47455f47524143455f504552494f445f4e4f545f504153534560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610953565b505b610cd888888886611f6e565b5050505050505050565b6000610ced82611db5565b5467ffffffffffffffff1692915050565b60007f000000000000000000000000000000000000000000000000000000000000000015610d88576000828152607b602052604090205480610d825760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610953565b92915050565b6000610d9383611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b8304811615156060830152929350610e2992909184916080840191600160c81b9004166002811115610e0557610e05613d93565b6002811115610e1657610e16613d93565b8152602001600182015481525050612185565b54600160801b900467ffffffffffffffff1692915050565b919050565b607a5460ff1615610e995760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610953565b610ea16121ea565b610eed5760405162461bcd60e51b815260206004820152601160248201527f56414c494441544f525f4e4f545f41464b0000000000000000000000000000006044820152606401610953565b607a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3360009081526072602052604090205460ff1680610f3a5750607a5460ff165b610f765760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b610f7e611f1b565b610f87336122fa565b6108f733826123eb565b6000610f9c82611db5565b54600160c01b900460ff1692915050565b6000610fc884610fc23686900386018661417f565b846124bd565b90505b9392505050565b6000610fdc613b2e565b6040805160608101825282815260016020820152600091810182905290806110058184816124bd565b94505050505090565b3360009081526072602052604090205460ff168061102e5750607a5460ff165b61106a5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b611072611f1b565b8015806110a35750600061108582611db5565b54600160c81b900460ff1660028111156110a1576110a1613d93565b145b6110ef5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f5345454e0000000000000000006044820152606401610953565b33600090815260766020526040902060020154600160401b900460ff166111455760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b33600090815260766020526040902054606083013511156111a85760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f5354414b4500000000000000000000000000006044820152606401610953565b60006111cb83356111c136869003860160e0870161417f565b60208601356124bd565b90506112446111d982611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115610e0557610e05613d93565b33600090815260766020526040902060010154818114806112785750600061126b82611db5565b5467ffffffffffffffff16115b6112c45760405162461bcd60e51b815260206004820152601860248201527f5354414b45445f4f4e5f414e4f544845525f4252414e434800000000000000006044820152606401610953565b6000806112d2868587612501565b33600090815260766020526040902060010182905590925090508061136e5760006112fc85611db5565b5461131890600160801b900467ffffffffffffffff16436141e6565b905060715481101561136c5760405162461bcd60e51b815260206004820152600a60248201527f54494d455f44454c5441000000000000000000000000000000000000000000006044820152606401610953565b505b61137782611db5565b54600160c01b900460ff166113a057606f546113a0906001600160a01b03166060880135612e85565b505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114485760405162461bcd60e51b815260206004820152603b60248201527f555550534e6f745570677261646561626c653a206d757374206e6f742062652060448201527f63616c6c6564207468726f7567682064656c656761746563616c6c00000000006064820152608401610953565b507f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d90565b600061147882611db5565b54600160401b900467ffffffffffffffff1692915050565b3360009081526072602052604090205460ff16806114b05750607a5460ff165b6114ec5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b6114f4611f1b565b6114fd336122fa565b61150633612f2a565b565b611510611f1b565b607a5461010090046001600160a01b0316331461156f5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f464153545f434f4e4649524d455200000000000000000000000000006044820152606401610953565b61157b84848484611f6e565b50505050565b600061158b611f1b565b600061159633612fa1565b9050600081116115e85760405162461bcd60e51b815260206004820152601460248201527f4e4f5f46554e44535f544f5f57495448445241570000000000000000000000006044820152606401610953565b6070546115ff906001600160a01b03163383613022565b905090565b61160c611f1b565b806116595760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f484153480000000000000000006044820152606401610953565b600061166482611db5565b54600160c81b900460ff1690506000611694843561168a36879003870160e0880161417f565b60208701356124bd565b90506116a26111d982611db5565b60008260028111156116b6576116b6613d93565b036116ff5760006116c8858386612501565b5090506116d481611db5565b54600160c01b900460ff166116fd57606f546116fd906001600160a01b03166060870135612e85565b505b606b5461157b90849083906101a08801906001600160a01b03166316bf55796001611737611732368d90038d01866141f9565b6130cb565b6117419190614215565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa15801561179e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a89190614236565b600060758267ffffffffffffffff16815481106117e1576117e161424f565b6000918252602090912001546001600160a01b031692915050565b611805836130e0565b61180f828261100e565b611818836131b8565b505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915261185882611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b9091041660028111156118c3576118c3613d93565b60028111156118d4576118d4613d93565b81526020016001820154815250509050919050565b60006115ff6131d0565b607a5460ff16156119465760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610953565b467f000000000000000000000000000000000000000000000000000000000000000003610eed5760405162461bcd60e51b815260206004820152601460248201527f434841494e5f49445f4e4f545f4348414e4745440000000000000000000000006044820152606401610953565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611a535760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610953565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a85613203565b6001600160a01b031614611b015760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610953565b6001600160a01b038116611b575760405162461bcd60e51b815260206004820152601060248201527f4e4545445f5354414b455f544f4b454e000000000000000000000000000000006044820152606401610953565b50565b611b7382611b6d3686900386018661417f565b836124bd565b841461157b5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610953565b60006001611bce83611db5565b54600160c81b900460ff166002811115611bea57611bea613d93565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190614265565b3360009081526072602052604090205460ff1680611c985750607a5460ff165b611cd45760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b611cdc611f1b565b611ce6828261322b565b6108f7816131b8565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491611d5b91906142a6565b600060405180830381855afa9150503d8060008114611d96576040519150601f19603f3d011682016040523d82523d6000602084013e611d9b565b606091505b5091509150818015611dae575080516020145b9250505090565b600081611e045760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610953565b50600090815260746020526040902090565b611ecd82356020840135611e306060860160408701613c54565b611e406080870160608801613d3e565b611e5060a0880160808901613d3e565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b81146108f75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610953565b60335460ff16156115065760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610953565b6000611f7985611db5565b905060018154600160c81b900460ff166002811115611f9a57611f9a613d93565b14611fe75760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610953565b611ffa84610fc23686900386018661417f565b85146120485760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610953565b600061206161205c368690038601866141f9565b6132f8565b9050600061207c612077368790038701876141f9565b613303565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505060738890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60008160800151600281111561219d5761219d613d93565b03611b575760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610953565b6000806121fe6121f960735490565b611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b90910416600281111561226957612269613d93565b600281111561227a5761227a613d93565b81526020016001820154815250509050806040015167ffffffffffffffff166000036122a857600091505090565b805167ffffffffffffffff16156122dc57805143906122d590620313809067ffffffffffffffff166142c2565b1091505090565b4362031380826040015167ffffffffffffffff166122d591906142c2565b6001600160a01b038116600090815260766020526040902060020154600160401b900460ff166123595760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b6001600160a01b0381166000908152607660205260408120600101546073549091908214908061238884611db5565b5467ffffffffffffffff16119050818061239f5750805b61157b5760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610953565b6001600160a01b03821660009081526076602052604081208054808411156124555760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610953565b600061246185836141e6565b85845590506124708682612e85565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b6000610fc8846124cc8561330f565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b600080612514604086016108ee86611db5565b6001612528610240870161022088016142d5565b600281111561253957612539613d93565b148061256757506002612554610240870161022088016142d5565b600281111561256557612565613d93565b145b6125b35760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610953565b836125d586356125cb36899003890160e08a0161417f565b60208901356124bd565b146126225760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610953565b6001612636610180870161016088016142d5565b600281111561264757612647613d93565b146126945760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610953565b600061269f85611db5565b90506000806101a0880160e08901826126b8838361333f565b12156127065760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610953565b600061272c61271b60e08d0160c08e01613d3e565b849067ffffffffffffffff1661344c565b9050600081131561277f5760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610953565b60026127936102408d016102208e016142d5565b60028111156127a4576127a4613d93565b141580156127b25750600081125b15612814576001965060006127c7848461333f565b136128145760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610953565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128999190614236565b905060006128a7858361344c565b13156128f55760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610953565b8061290660e08e0160c08f01613d3e565b67ffffffffffffffff16111561295e5760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610953565b6000612972611732368790038701876141f9565b67ffffffffffffffff169050818103612997576129908260016142c2565b965061299b565b8196505b806000036129eb5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610953565b606b546001600160a01b03166316bf5579612a076001846141e6565b6040518263ffffffff1660e01b8152600401612a2591815260200190565b602060405180830381865afa158015612a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a669190614236565b95505050505050612a8687896101a001803603810190611b6d919061417f565b945085851480612a94575085155b612ae05760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610953565b6000612aeb86611db5565b54600160c81b900460ff166002811115612b0757612b07613d93565b14612b545760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610953565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16838501527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116607486015288831b16607c85015280516064818603018152608485018083528151918701919091206101448601835260009182905260a4860182905260c4860182905260e4860182905261010486018290526101249095018190528151928301825280835294820185905267ffffffffffffffff43811691830191909152909416159084015260a08301526001608083015250612c52846134db565b60008681526074602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115612d5a57612d5a613d93565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff16604051612dd89796959493929190614368565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000015612e795760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e699190614236565b6000878152607b60205260409020555b50505050935093915050565b6001600160a01b03821660009081526077602052604081205490612ea983836142c2565b6001600160a01b0385166000908152607760205260408120829055607880549293508592909190612edb9084906142c2565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b6001600160a01b03811660009081526076602052604090208054612f4e8382612e85565b612f578361355f565b60408051828152600060208201526001600160a01b038516917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde691015b60405180910390a2505050565b6001600160a01b0381166000908152607760205260408120805490829055607880548291908490612fd39084906141e6565b909155505060408051828152600060208201526001600160a01b038516917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a292915050565b6040516001600160a01b0383166024820152604481018290526118189084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613747565b6020810151600090815b602002015192915050565b3360009081526072602052604090205460ff16806131005750607a5460ff165b61313c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b613144611f1b565b33600090815260766020526040902060020154600160401b900460ff16156131ae5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f5354414b45440000000000000000000000000000000000006044820152606401610953565b611b57338261382c565b607054611b57906001600160a01b0316333084613943565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6131f4565b3360009081526072602052604090205460ff168061324b5750607a5460ff165b6132875760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b61328f611f1b565b6001600160a01b038216600090815260766020526040902060020154600160401b900460ff166132ee5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b6108f78282613994565b8051600090816130d5565b805160009060016130d5565b6000816040516020016133229190614454565b604051602081830303815290604052805190602001209050919050565b600080613354611732368690038601866141f9565b9050600061336a611732368690038601866141f9565b90508067ffffffffffffffff168267ffffffffffffffff1610156133945760001992505050610d82565b8067ffffffffffffffff168267ffffffffffffffff1611156133bb57600192505050610d82565b60006133d46133cf368890038801886141f9565b613a0b565b905060006133ea6133cf368890038801886141f9565b90508067ffffffffffffffff168267ffffffffffffffff16101561341657600019945050505050610d82565b8067ffffffffffffffff168267ffffffffffffffff16111561343f576001945050505050610d82565b6000945050505050610d82565b600080613461611732368690038601866141f9565b9050828167ffffffffffffffff16101561348057600019915050610d82565b828167ffffffffffffffff16111561349c576001915050610d82565b60006134b06133cf368790038701876141f9565b67ffffffffffffffff1611156134ca576001915050610d82565b6000915050610d82565b5092915050565b805467ffffffffffffffff1660000361350b57805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff16600003611b575780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b6001600160a01b03811660009081526076602052604090206002810154600160401b900460ff166135bf5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b60028101546075805467ffffffffffffffff909216916135e1906001906141e6565b815481106135f1576135f161424f565b600091825260209091200154607580546001600160a01b039092169167ffffffffffffffff84169081106136275761362761424f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806076600060758467ffffffffffffffff16815481106136775761367761424f565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560758054806136d0576136d06144de565b60008281526020808220830160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b0394909416815260769093525050604081208181556001810191909155600201805468ffffffffffffffffff19169055565b600061379c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a1a9092919063ffffffff16565b80519091501561181857808060200190518101906137ba91906144f4565b6118185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610953565b6075805460018082019092557f9a8d93986a7b9e6294572ea6736696119c195c1a9f5eae642d3c5fcd44e49dea810180546001600160a01b0386167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051608081018252858152607354602082810191825267ffffffffffffffff80871684860190815260608501898152600088815260769094528684209551865593519885019890985596516002909301805492511515600160401b0268ffffffffffffffffff1990931693909716929092171790945551919290917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde691612f94918690918252602082015260400190565b6040516001600160a01b038085166024830152831660448201526064810182905261157b9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613067565b6001600160a01b0382166000908152607660205260408120805490916139ba84836142c2565b80845560408051848152602081018390529192506001600160a01b038716917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a25050505050565b602081015160009060016130d5565b6060610fc88484600085856001600160a01b0385163b613a7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610953565b600080866001600160a01b03168587604051613a9891906142a6565b60006040518083038185875af1925050503d8060008114613ad5576040519150601f19603f3d011682016040523d82523d6000602084013e613ada565b606091505b5091509150613aea828286613af5565b979650505050505050565b60608315613b04575081610fcb565b825115613b145782518084602001fd5b8160405162461bcd60e51b8152600401610953919061450f565b6040518060400160405280613b41613b53565b8152602001613b4e613b53565b905290565b60405180604001604052806002906020820280368337509192915050565b600060a08284031215613b8357600080fd5b50919050565b60008060c08385031215613b9c57600080fd5b82359150613bad8460208501613b71565b90509250929050565b600060c08284031215613b8357600080fd5b6000806000806000806101e08789031215613be257600080fd5b8635955060208701359450613bfa8860408901613bb6565b93506101008701359250613c12886101208901613b71565b91506101c087013590509295509295509295565b600060208284031215613c3857600080fd5b5035919050565b6001600160a01b0381168114611b5757600080fd5b600060208284031215613c6657600080fd5b8135610fcb81613c3f565b60008060006101008486031215613c8757600080fd5b83359250613c988560208601613bb6565b915060e084013590509250925092565b60006102608284031215613b8357600080fd5b6000806102808385031215613ccf57600080fd5b613cd98484613ca8565b94610260939093013593505050565b6000806000806101208587031215613cff57600080fd5b8435935060208501359250613d178660408701613bb6565b939692955092936101000135925050565b67ffffffffffffffff81168114611b5757600080fd5b600060208284031215613d5057600080fd5b8135610fcb81613d28565b60008060006102a08486031215613d7157600080fd5b83359250613d828560208601613ca8565b915061028084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b60038110611b5757634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff808451168352806020850151166020840152806040850151166040840152506060830151151560608301526080830151613e1181613da9565b8060808401525060a083015160a083015292915050565b6000806000806101208587031215613e3f57600080fd5b84359350613e508660208701613bb6565b939693955050505060e082013591610100013590565b60008060408385031215613e7957600080fd5b8235613e8481613c3f565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156134d4576134d4613e92565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613f0357613f03613ec9565b60405290565b6040805190810167ffffffffffffffff81118282101715613f0357613f03613ec9565b8051610e4181613c3f565b8051610e4181613d28565b805160028110610e4157600080fd5b805160ff81168114610e4157600080fd5b80518015158114610e4157600080fd5b60006101e08284031215613f8557600080fd5b613f8d613edf565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100613fe5818501613f2c565b90820152610120613ff7848201613f37565b90820152610140614009848201613f37565b9082015261016061401b848201613f42565b9082015261018061402d848201613f51565b908201526101a061403f848201613f62565b908201526101c0614051848201613f37565b908201529392505050565b600082601f83011261406d57600080fd5b6040516040810181811067ffffffffffffffff8211171561409057614090613ec9565b80604052508060408401858111156140a757600080fd5b845b818110156140ca5780356140bc81613d28565b8352602092830192016140a9565b509195945050505050565b6000608082840312156140e757600080fd5b6040516040810181811067ffffffffffffffff8211171561410a5761410a613ec9565b604052905080601f8301841361411f57600080fd5b614127613f09565b80604085018681111561413957600080fd5b855b8181101561415357803584526020938401930161413b565b50818452614161878261405c565b60208501525050505092915050565b803560038110610e4157600080fd5b600060c0828403121561419157600080fd5b6040516060810181811067ffffffffffffffff821117156141b4576141b4613ec9565b6040526141c184846140d5565b81526141cf60808401614170565b602082015260a09290920135604083015250919050565b81810381811115610d8257610d82613e92565b60006080828403121561420b57600080fd5b610fcb83836140d5565b67ffffffffffffffff8281168282160390808211156134d4576134d4613e92565b60006020828403121561424857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561427757600080fd5b8151610fcb81613c3f565b60005b8381101561429d578181015183820152602001614285565b50506000910152565b600082516142b8818460208701614282565b9190910192915050565b80820180821115610d8257610d82613e92565b6000602082840312156142e757600080fd5b610fcb82614170565b6142f981613da9565b9052565b6040818337604082016040820160005b600281101561434057813561432181613d28565b67ffffffffffffffff168352602092830192919091019060010161430d565b50505061434f60808201614170565b61435881613da9565b608083015260a090810135910152565b6000610320820190508835825260208901356020830152604089013560408301526060890135606083015260808901356143a181613c3f565b6001600160a01b0316608083015260a08901356143bd81613d28565b67ffffffffffffffff90811660a084015260c08a0135906143dd82613d28565b1660c08301526143f360e0808401908b016142fd565b6101a0614404818401828c016142fd565b508761026083015286610280830152856102a0830152846102c08301526144376102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b8151805160c0830191908360005b6002811015614481578251825260209283019290910190600101614462565b505050602090810151906040840160005b60028110156144b957835167ffffffffffffffff1682529282019290820190600101614492565b505084015190506144cd60808401826142f0565b50604083015160a083015292915050565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561450657600080fd5b610fcb82613f62565b602081526000825180602084015261452e816040850160208701614282565b601f01601f1916919091016040019291505056fea2646970667358221220f297513886131ed5527b24411ff0decae2a6dffca153ed85c9b9202debec0bde64736f6c63430008110033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"}],\"name\":\"AssertionConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"afterInboxBatchAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"}],\"name\":\"AssertionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"challengeIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asserter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"challengedAssertion\",\"type\":\"uint64\"}],\"name\":\"RollupChallengeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"machineHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"RollupInitialized\",\"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\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"UpgradedSecondary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserStakeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalBalance\",\"type\":\"uint256\"}],\"name\":\"UserWithdrawableFundsUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VALIDATOR_AFK_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_stakerMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stakerAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"addToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"amountStaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyTrustFastConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeGracePeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challengeManager\",\"outputs\":[{\"internalType\":\"contractIEdgeChallengeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"computeAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"winningEdgeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"prevConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"confirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confirmPeriodBlocks\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parentAssertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"confirmState\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"fastConfirmNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisAssertionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertion\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"secondChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isFirstChild\",\"type\":\"bool\"},{\"internalType\":\"enumAssertionStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configHash\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getAssertionCreationBlockForLogLookup\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getFirstChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"getSecondChildCreationBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountStaked\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"latestStakedAssertion\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isStaked\",\"type\":\"bool\"}],\"internalType\":\"structIRollupCore.Staker\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"stakerNum\",\"type\":\"uint64\"}],\"name\":\"getStakerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inbox\",\"outputs\":[{\"internalType\":\"contractIInboxBase\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakeToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isFirstChild\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"}],\"name\":\"isPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"isStaked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfirmed\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"staker\",\"type\":\"address\"}],\"name\":\"latestStakedAssertion\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loserStakeEscrow\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumAssertionPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"newStakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contractIOutbox\",\"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\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"target\",\"type\":\"uint256\"}],\"name\":\"reduceDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeWhitelistAfterValidatorAfk\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOldDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDeploymentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupEventInbox\",\"outputs\":[{\"internalType\":\"contractIRollupEventInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"contractISequencerInbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"prevPrevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sequencerBatchAcc\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"internalType\":\"structBeforeStateData\",\"name\":\"beforeStateData\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"beforeState\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"afterState\",\"type\":\"tuple\"}],\"internalType\":\"structAssertionInputs\",\"name\":\"assertion\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"expectedAssertionHash\",\"type\":\"bytes32\"}],\"name\":\"stakeOnNewAssertion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakerCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWithdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"endHistoryRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structAssertionState\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"prevAssertionHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"inboxAcc\",\"type\":\"bytes32\"}],\"name\":\"validateAssertionHash\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assertionHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"wasmModuleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"requiredStake\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"challengeManager\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"confirmPeriodBlocks\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nextInboxPosition\",\"type\":\"uint64\"}],\"internalType\":\"structConfigData\",\"name\":\"configData\",\"type\":\"tuple\"}],\"name\":\"validateConfig\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWalletCreator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorWhitelistDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasmModuleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"withdrawableFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e0604052620000196200003a60201b62001cef1760201c565b15156080523060a0524660c0523480156200003357600080fd5b5062000108565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b1790529051600091829182916064916200007a9190620000d7565b600060405180830381855afa9150503d8060008114620000b7576040519150601f19603f3d011682016040523d82523d6000602084013e620000bc565b606091505b5091509150818015620000d0575080516020145b9250505090565b6000825160005b81811015620000fa5760208186018101518583015201620000de565b506000920191825250919050565b60805160a05160c0516145786200014d60003960006119490152600081816113b5015281816119bf0152611a55015260008181610d020152612de201526145786000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c80636177fd18116101d3578063c2c2e68e11610104578063e8bd4922116100a2578063f065de3f1161007c578063f065de3f14610885578063f3f0a03e14610898578063facd743b146108ab578063fb0e722b146108ce57600080fd5b8063e8bd4922146107dd578063ee35f32714610854578063ef40a6701461085c57600080fd5b8063dff69787116100de578063dff697871461079c578063e51019a6146107a4578063e531d8c7146107b7578063e78cea92146107ca57600080fd5b8063c2c2e68e1461076e578063c4d66de814610776578063ce11e6ab1461078957600080fd5b806388302884116101715780639a8a05921161014b5780639a8a05921461066f578063a23c44b114610678578063aa38a6e714610748578063bc45e0ae1461075b57600080fd5b8063883028841461063e5780638da5cb5b1461065e5780638ee1a1261461066657600080fd5b80636ddd3744116101ad5780636ddd37441461060657806371ef232c146106195780637300201c1461062257806376e7e23b1461063557600080fd5b80636177fd18146105b55780636420fb9f146105eb57806365f7f80d146105fe57600080fd5b806333635fc2116102ad57806352d1902d1161024b57806357ef4ab91161022557806357ef4ab9146105875780635c975abb1461058f5780636096686d1461059a57806361373919146105ad57600080fd5b806352d1902d1461055457806355840a581461055c57806356bbc9e61461057457600080fd5b80633be680ea116102875780633be680ea1461050257806345e38b641461052e5780634ceccfe51461053757806351ed6a301461054157600080fd5b806333635fc2146104d4578063353325e0146104e75780633b86de19146104ef57600080fd5b806318baaab91161031a5780632abdd230116102f45780632abdd230146104585780632e7acfa6146104845780632f30cabd1461049857806330836228146104c157600080fd5b806318baaab9146104345780631b1689e91461043c5780631e83d30f1461044557600080fd5b8063117155851161034b57806311715585146103ca57806312ab3d3b146103f657806313c56ca71461041357600080fd5b8063023a96fe1461037257806304972af9146103a257806310b98a35146103b7575b600080fd5b606954610385906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103b56103b0366004613b89565b6108e1565b005b6103b56103c5366004613bc8565b6108fb565b6103dd6103d8366004613c26565b610ce2565b60405167ffffffffffffffff9091168152602001610399565b607a546104039060ff1681565b6040519015158152602001610399565b610426610421366004613c26565b610cfe565b604051908152602001610399565b6103b5610e46565b61042660795481565b6103b5610453366004613c26565b610f1a565b610426610466366004613c54565b6001600160a01b031660009081526076602052604090206001015490565b6066546103dd9067ffffffffffffffff1681565b6104266104a6366004613c54565b6001600160a01b031660009081526077602052604090205490565b6104036104cf366004613c26565b610f91565b6104266104e2366004613c71565b610fad565b610426610fd2565b6103b56104fd366004613cbb565b61100e565b6069546103dd9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b61042660715481565b6104266203138081565b607054610385906001600160a01b031681565b6104266113a8565b607a546103859061010090046001600160a01b031681565b6103dd610582366004613c26565b61146d565b6103b5611490565b60335460ff16610403565b6103b56105a8366004613ce8565b611508565b610426611581565b6104036105c3366004613c54565b6001600160a01b0316600090815260766020526040902060020154600160401b900460ff1690565b6103b56105f9366004613cbb565b611604565b607354610426565b610385610614366004613d3e565b6117c2565b61042660785481565b6103b5610630366004613d5b565b6117fc565b61042660675481565b61065161064c366004613c26565b61181d565b6040516103999190613dc7565b6103856118e9565b61042660685481565b61042660655481565b610709610686366004613c54565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152607660209081526040918290208251608081018452815481526001820154928101929092526002015467ffffffffffffffff811692820192909252600160401b90910460ff161515606082015290565b6040516103999190815181526020808301519082015260408083015167ffffffffffffffff169082015260609182015115159181019190915260800190565b606d54610385906001600160a01b031681565b606e54610385906001600160a01b031681565b6103b56118f3565b6103b5610784366004613c54565b6119b5565b606c54610385906001600160a01b031681565b6075546103dd565b6103b56107b2366004613e28565b611b5a565b6104036107c5366004613c26565b611bc1565b606b54610385906001600160a01b031681565b6108226107eb366004613c54565b60766020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b900460ff1684565b6040516103999493929190938452602084019290925267ffffffffffffffff1660408301521515606082015260800190565b610385611bf1565b61042661086a366004613c54565b6001600160a01b031660009081526076602052604090205490565b606f54610385906001600160a01b031681565b6103b56108a6366004613e66565b611c78565b6104036108b9366004613c54565b60726020526000908152604090205460ff1681565b606a54610385906001600160a01b031681565b6108f7816108ee84611db5565b60010154611e16565b5050565b3360009081526072602052604090205460ff168061091b5750607a5460ff165b61095c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b60448201526064015b60405180910390fd5b610964611f1b565b600061096f87611db5565b9050600061097c87611db5565b905061098c848260010154611e16565b61099c6080850160608601613d3e565b82546109b99190600160801b900467ffffffffffffffff16613ea8565b67ffffffffffffffff16431015610a125760405162461bcd60e51b815260206004820152600f60248201527f4245464f52455f444541444c494e4500000000000000000000000000000000006044820152606401610953565b6073548714610a635760405162461bcd60e51b815260206004820152601960248201527f505245565f4e4f545f4c41544553545f434f4e4649524d4544000000000000006044820152606401610953565b8054600160401b900467ffffffffffffffff1615610ccc576000610a8d6060860160408701613c54565b6001600160a01b031663fda2892e876040518263ffffffff1660e01b8152600401610aba91815260200190565b6101e060405180830381865afa158015610ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc9190613f72565b9050888160e0015114610b515760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f57494e4e4552000000000000000000000000000000000000000000006044820152606401610953565b60018161016001516001811115610b6a57610b6a613d93565b14610bb75760405162461bcd60e51b815260206004820152601260248201527f454447455f4e4f545f434f4e4649524d454400000000000000000000000000006044820152606401610953565b80610140015167ffffffffffffffff16600003610c165760405162461bcd60e51b815260206004820152601760248201527f5a45524f5f434f4e4649524d45445f41545f424c4f434b0000000000000000006044820152606401610953565b606954610140820151610c4b9174010000000000000000000000000000000000000000900467ffffffffffffffff1690613ea8565b67ffffffffffffffff16431015610cca5760405162461bcd60e51b815260206004820152602160248201527f4348414c4c454e47455f47524143455f504552494f445f4e4f545f504153534560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610953565b505b610cd888888886611f6e565b5050505050505050565b6000610ced82611db5565b5467ffffffffffffffff1692915050565b60007f000000000000000000000000000000000000000000000000000000000000000015610d88576000828152607b602052604090205480610d825760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610953565b92915050565b6000610d9383611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b8304811615156060830152929350610e2992909184916080840191600160c81b9004166002811115610e0557610e05613d93565b6002811115610e1657610e16613d93565b8152602001600182015481525050612185565b54600160801b900467ffffffffffffffff1692915050565b919050565b607a5460ff1615610e995760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610953565b610ea16121ea565b610eed5760405162461bcd60e51b815260206004820152601160248201527f56414c494441544f525f4e4f545f41464b0000000000000000000000000000006044820152606401610953565b607a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3360009081526072602052604090205460ff1680610f3a5750607a5460ff165b610f765760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b610f7e611f1b565b610f87336122fa565b6108f733826123eb565b6000610f9c82611db5565b54600160c01b900460ff1692915050565b6000610fc884610fc23686900386018661417f565b846124bd565b90505b9392505050565b6000610fdc613b2e565b6040805160608101825282815260016020820152600091810182905290806110058184816124bd565b94505050505090565b3360009081526072602052604090205460ff168061102e5750607a5460ff165b61106a5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b611072611f1b565b8015806110a35750600061108582611db5565b54600160c81b900460ff1660028111156110a1576110a1613d93565b145b6110ef5760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f5345454e0000000000000000006044820152606401610953565b33600090815260766020526040902060020154600160401b900460ff166111455760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b33600090815260766020526040902054606083013511156111a85760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f5354414b4500000000000000000000000000006044820152606401610953565b60006111cb83356111c136869003860160e0870161417f565b60208601356124bd565b90506112446111d982611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115610e0557610e05613d93565b33600090815260766020526040902060010154818114806112785750600061126b82611db5565b5467ffffffffffffffff16115b6112c45760405162461bcd60e51b815260206004820152601860248201527f5354414b45445f4f4e5f414e4f544845525f4252414e434800000000000000006044820152606401610953565b6000806112d2868587612501565b33600090815260766020526040902060010182905590925090508061136e5760006112fc85611db5565b5461131890600160801b900467ffffffffffffffff16436141e6565b905060715481101561136c5760405162461bcd60e51b815260206004820152600a60248201527f54494d455f44454c5441000000000000000000000000000000000000000000006044820152606401610953565b505b61137782611db5565b54600160c01b900460ff166113a057606f546113a0906001600160a01b03166060880135612e85565b505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114485760405162461bcd60e51b815260206004820152603b60248201527f555550534e6f745570677261646561626c653a206d757374206e6f742062652060448201527f63616c6c6564207468726f7567682064656c656761746563616c6c00000000006064820152608401610953565b507f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d90565b600061147882611db5565b54600160401b900467ffffffffffffffff1692915050565b3360009081526072602052604090205460ff16806114b05750607a5460ff165b6114ec5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b6114f4611f1b565b6114fd336122fa565b61150633612f2a565b565b611510611f1b565b607a5461010090046001600160a01b0316331461156f5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f464153545f434f4e4649524d455200000000000000000000000000006044820152606401610953565b61157b84848484611f6e565b50505050565b600061158b611f1b565b600061159633612fa1565b9050600081116115e85760405162461bcd60e51b815260206004820152601460248201527f4e4f5f46554e44535f544f5f57495448445241570000000000000000000000006044820152606401610953565b6070546115ff906001600160a01b03163383613022565b905090565b61160c611f1b565b806116595760405162461bcd60e51b815260206004820152601760248201527f45585045435445445f415353455254494f4e5f484153480000000000000000006044820152606401610953565b600061166482611db5565b54600160c81b900460ff1690506000611694843561168a36879003870160e0880161417f565b60208701356124bd565b90506116a26111d982611db5565b60008260028111156116b6576116b6613d93565b036116ff5760006116c8858386612501565b5090506116d481611db5565b54600160c01b900460ff166116fd57606f546116fd906001600160a01b03166060870135612e85565b505b606b5461157b90849083906101a08801906001600160a01b03166316bf55796001611737611732368d90038d01866141f9565b6130cb565b6117419190614215565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa15801561179e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a89190614236565b600060758267ffffffffffffffff16815481106117e1576117e161424f565b6000918252602090912001546001600160a01b031692915050565b611805836130e0565b61180f828261100e565b611818836131b8565b505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915261185882611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b9091041660028111156118c3576118c3613d93565b60028111156118d4576118d4613d93565b81526020016001820154815250509050919050565b60006115ff6131d0565b607a5460ff16156119465760405162461bcd60e51b815260206004820152601260248201527f57484954454c4953545f44495341424c454400000000000000000000000000006044820152606401610953565b467f000000000000000000000000000000000000000000000000000000000000000003610eed5760405162461bcd60e51b815260206004820152601460248201527f434841494e5f49445f4e4f545f4348414e4745440000000000000000000000006044820152606401610953565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611a535760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610953565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a85613203565b6001600160a01b031614611b015760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610953565b6001600160a01b038116611b575760405162461bcd60e51b815260206004820152601060248201527f4e4545445f5354414b455f544f4b454e000000000000000000000000000000006044820152606401610953565b50565b611b7382611b6d3686900386018661417f565b836124bd565b841461157b5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610953565b60006001611bce83611db5565b54600160c81b900460ff166002811115611bea57611bea613d93565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff9190614265565b3360009081526072602052604090205460ff1680611c985750607a5460ff165b611cd45760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b611cdc611f1b565b611ce6828261322b565b6108f7816131b8565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f200000000000000000000000000000000000000000000000000000000179052905160009182918291606491611d5b91906142a6565b600060405180830381855afa9150503d8060008114611d96576040519150601f19603f3d011682016040523d82523d6000602084013e611d9b565b606091505b5091509150818015611dae575080516020145b9250505090565b600081611e045760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610953565b50600090815260746020526040902090565b611ecd82356020840135611e306060860160408701613c54565b611e406080870160608801613d3e565b611e5060a0880160808901613d3e565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b81146108f75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610953565b60335460ff16156115065760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610953565b6000611f7985611db5565b905060018154600160c81b900460ff166002811115611f9a57611f9a613d93565b14611fe75760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610953565b611ffa84610fc23686900386018661417f565b85146120485760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610953565b600061206161205c368690038601866141f9565b6132f8565b9050600061207c612077368790038701876141f9565b613303565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505060738890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b60008160800151600281111561219d5761219d613d93565b03611b575760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610953565b6000806121fe6121f960735490565b611db5565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b90910416600281111561226957612269613d93565b600281111561227a5761227a613d93565b81526020016001820154815250509050806040015167ffffffffffffffff166000036122a857600091505090565b805167ffffffffffffffff16156122dc57805143906122d590620313809067ffffffffffffffff166142c2565b1091505090565b4362031380826040015167ffffffffffffffff166122d591906142c2565b6001600160a01b038116600090815260766020526040902060020154600160401b900460ff166123595760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b6001600160a01b0381166000908152607660205260408120600101546073549091908214908061238884611db5565b5467ffffffffffffffff16119050818061239f5750805b61157b5760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610953565b6001600160a01b03821660009081526076602052604081208054808411156124555760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610953565b600061246185836141e6565b85845590506124708682612e85565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b6000610fc8846124cc8561330f565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b600080612514604086016108ee86611db5565b6001612528610240870161022088016142d5565b600281111561253957612539613d93565b148061256757506002612554610240870161022088016142d5565b600281111561256557612565613d93565b145b6125b35760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610953565b836125d586356125cb36899003890160e08a0161417f565b60208901356124bd565b146126225760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610953565b6001612636610180870161016088016142d5565b600281111561264757612647613d93565b146126945760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610953565b600061269f85611db5565b90506000806101a0880160e08901826126b8838361333f565b12156127065760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610953565b600061272c61271b60e08d0160c08e01613d3e565b849067ffffffffffffffff1661344c565b9050600081131561277f5760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610953565b60026127936102408d016102208e016142d5565b60028111156127a4576127a4613d93565b141580156127b25750600081125b15612814576001965060006127c7848461333f565b136128145760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610953565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015612875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128999190614236565b905060006128a7858361344c565b13156128f55760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610953565b8061290660e08e0160c08f01613d3e565b67ffffffffffffffff16111561295e5760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610953565b6000612972611732368790038701876141f9565b67ffffffffffffffff169050818103612997576129908260016142c2565b965061299b565b8196505b806000036129eb5760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610953565b606b546001600160a01b03166316bf5579612a076001846141e6565b6040518263ffffffff1660e01b8152600401612a2591815260200190565b602060405180830381865afa158015612a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a669190614236565b95505050505050612a8687896101a001803603810190611b6d919061417f565b945085851480612a94575085155b612ae05760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610953565b6000612aeb86611db5565b54600160c81b900460ff166002811115612b0757612b07613d93565b14612b545760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610953565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16838501527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116607486015288831b16607c85015280516064818603018152608485018083528151918701919091206101448601835260009182905260a4860182905260c4860182905260e4860182905261010486018290526101249095018190528151928301825280835294820185905267ffffffffffffffff43811691830191909152909416159084015260a08301526001608083015250612c52846134db565b60008681526074602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115612d5a57612d5a613d93565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff16604051612dd89796959493929190614368565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000015612e795760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e699190614236565b6000878152607b60205260409020555b50505050935093915050565b6001600160a01b03821660009081526077602052604081205490612ea983836142c2565b6001600160a01b0385166000908152607760205260408120829055607880549293508592909190612edb9084906142c2565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b6001600160a01b03811660009081526076602052604090208054612f4e8382612e85565b612f578361355f565b60408051828152600060208201526001600160a01b038516917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde691015b60405180910390a2505050565b6001600160a01b0381166000908152607760205260408120805490829055607880548291908490612fd39084906141e6565b909155505060408051828152600060208201526001600160a01b038516917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a292915050565b6040516001600160a01b0383166024820152604481018290526118189084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613747565b6020810151600090815b602002015192915050565b3360009081526072602052604090205460ff16806131005750607a5460ff165b61313c5760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b613144611f1b565b33600090815260766020526040902060020154600160401b900460ff16156131ae5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f5354414b45440000000000000000000000000000000000006044820152606401610953565b611b57338261382c565b607054611b57906001600160a01b0316333084613943565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60007f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d6131f4565b3360009081526072602052604090205460ff168061324b5750607a5460ff165b6132875760405162461bcd60e51b815260206004820152600d60248201526c2727aa2fab20a624a220aa27a960991b6044820152606401610953565b61328f611f1b565b6001600160a01b038216600090815260766020526040902060020154600160401b900460ff166132ee5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b6108f78282613994565b8051600090816130d5565b805160009060016130d5565b6000816040516020016133229190614454565b604051602081830303815290604052805190602001209050919050565b600080613354611732368690038601866141f9565b9050600061336a611732368690038601866141f9565b90508067ffffffffffffffff168267ffffffffffffffff1610156133945760001992505050610d82565b8067ffffffffffffffff168267ffffffffffffffff1611156133bb57600192505050610d82565b60006133d46133cf368890038801886141f9565b613a0b565b905060006133ea6133cf368890038801886141f9565b90508067ffffffffffffffff168267ffffffffffffffff16101561341657600019945050505050610d82565b8067ffffffffffffffff168267ffffffffffffffff16111561343f576001945050505050610d82565b6000945050505050610d82565b600080613461611732368690038601866141f9565b9050828167ffffffffffffffff16101561348057600019915050610d82565b828167ffffffffffffffff16111561349c576001915050610d82565b60006134b06133cf368790038701876141f9565b67ffffffffffffffff1611156134ca576001915050610d82565b6000915050610d82565b5092915050565b805467ffffffffffffffff1660000361350b57805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff16600003611b575780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b6001600160a01b03811660009081526076602052604090206002810154600160401b900460ff166135bf5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610953565b60028101546075805467ffffffffffffffff909216916135e1906001906141e6565b815481106135f1576135f161424f565b600091825260209091200154607580546001600160a01b039092169167ffffffffffffffff84169081106136275761362761424f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806076600060758467ffffffffffffffff16815481106136775761367761424f565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560758054806136d0576136d06144de565b60008281526020808220830160001990810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b0394909416815260769093525050604081208181556001810191909155600201805468ffffffffffffffffff19169055565b600061379c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a1a9092919063ffffffff16565b80519091501561181857808060200190518101906137ba91906144f4565b6118185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610953565b6075805460018082019092557f9a8d93986a7b9e6294572ea6736696119c195c1a9f5eae642d3c5fcd44e49dea810180546001600160a01b0386167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051608081018252858152607354602082810191825267ffffffffffffffff80871684860190815260608501898152600088815260769094528684209551865593519885019890985596516002909301805492511515600160401b0268ffffffffffffffffff1990931693909716929092171790945551919290917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde691612f94918690918252602082015260400190565b6040516001600160a01b038085166024830152831660448201526064810182905261157b9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613067565b6001600160a01b0382166000908152607660205260408120805490916139ba84836142c2565b80845560408051848152602081018390529192506001600160a01b038716917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a25050505050565b602081015160009060016130d5565b6060610fc88484600085856001600160a01b0385163b613a7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610953565b600080866001600160a01b03168587604051613a9891906142a6565b60006040518083038185875af1925050503d8060008114613ad5576040519150601f19603f3d011682016040523d82523d6000602084013e613ada565b606091505b5091509150613aea828286613af5565b979650505050505050565b60608315613b04575081610fcb565b825115613b145782518084602001fd5b8160405162461bcd60e51b8152600401610953919061450f565b6040518060400160405280613b41613b53565b8152602001613b4e613b53565b905290565b60405180604001604052806002906020820280368337509192915050565b600060a08284031215613b8357600080fd5b50919050565b60008060c08385031215613b9c57600080fd5b82359150613bad8460208501613b71565b90509250929050565b600060c08284031215613b8357600080fd5b6000806000806000806101e08789031215613be257600080fd5b8635955060208701359450613bfa8860408901613bb6565b93506101008701359250613c12886101208901613b71565b91506101c087013590509295509295509295565b600060208284031215613c3857600080fd5b5035919050565b6001600160a01b0381168114611b5757600080fd5b600060208284031215613c6657600080fd5b8135610fcb81613c3f565b60008060006101008486031215613c8757600080fd5b83359250613c988560208601613bb6565b915060e084013590509250925092565b60006102608284031215613b8357600080fd5b6000806102808385031215613ccf57600080fd5b613cd98484613ca8565b94610260939093013593505050565b6000806000806101208587031215613cff57600080fd5b8435935060208501359250613d178660408701613bb6565b939692955092936101000135925050565b67ffffffffffffffff81168114611b5757600080fd5b600060208284031215613d5057600080fd5b8135610fcb81613d28565b60008060006102a08486031215613d7157600080fd5b83359250613d828560208601613ca8565b915061028084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b60038110611b5757634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff808451168352806020850151166020840152806040850151166040840152506060830151151560608301526080830151613e1181613da9565b8060808401525060a083015160a083015292915050565b6000806000806101208587031215613e3f57600080fd5b84359350613e508660208701613bb6565b939693955050505060e082013591610100013590565b60008060408385031215613e7957600080fd5b8235613e8481613c3f565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156134d4576134d4613e92565b634e487b7160e01b600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715613f0357613f03613ec9565b60405290565b6040805190810167ffffffffffffffff81118282101715613f0357613f03613ec9565b8051610e4181613c3f565b8051610e4181613d28565b805160028110610e4157600080fd5b805160ff81168114610e4157600080fd5b80518015158114610e4157600080fd5b60006101e08284031215613f8557600080fd5b613f8d613edf565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100613fe5818501613f2c565b90820152610120613ff7848201613f37565b90820152610140614009848201613f37565b9082015261016061401b848201613f42565b9082015261018061402d848201613f51565b908201526101a061403f848201613f62565b908201526101c0614051848201613f37565b908201529392505050565b600082601f83011261406d57600080fd5b6040516040810181811067ffffffffffffffff8211171561409057614090613ec9565b80604052508060408401858111156140a757600080fd5b845b818110156140ca5780356140bc81613d28565b8352602092830192016140a9565b509195945050505050565b6000608082840312156140e757600080fd5b6040516040810181811067ffffffffffffffff8211171561410a5761410a613ec9565b604052905080601f8301841361411f57600080fd5b614127613f09565b80604085018681111561413957600080fd5b855b8181101561415357803584526020938401930161413b565b50818452614161878261405c565b60208501525050505092915050565b803560038110610e4157600080fd5b600060c0828403121561419157600080fd5b6040516060810181811067ffffffffffffffff821117156141b4576141b4613ec9565b6040526141c184846140d5565b81526141cf60808401614170565b602082015260a09290920135604083015250919050565b81810381811115610d8257610d82613e92565b60006080828403121561420b57600080fd5b610fcb83836140d5565b67ffffffffffffffff8281168282160390808211156134d4576134d4613e92565b60006020828403121561424857600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561427757600080fd5b8151610fcb81613c3f565b60005b8381101561429d578181015183820152602001614285565b50506000910152565b600082516142b8818460208701614282565b9190910192915050565b80820180821115610d8257610d82613e92565b6000602082840312156142e757600080fd5b610fcb82614170565b6142f981613da9565b9052565b6040818337604082016040820160005b600281101561434057813561432181613d28565b67ffffffffffffffff168352602092830192919091019060010161430d565b50505061434f60808201614170565b61435881613da9565b608083015260a090810135910152565b6000610320820190508835825260208901356020830152604089013560408301526060890135606083015260808901356143a181613c3f565b6001600160a01b0316608083015260a08901356143bd81613d28565b67ffffffffffffffff90811660a084015260c08a0135906143dd82613d28565b1660c08301526143f360e0808401908b016142fd565b6101a0614404818401828c016142fd565b508761026083015286610280830152856102a0830152846102c08301526144376102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b8151805160c0830191908360005b6002811015614481578251825260209283019290910190600101614462565b505050602090810151906040840160005b60028110156144b957835167ffffffffffffffff1682529282019290820190600101614492565b505084015190506144cd60808401826142f0565b50604083015160a083015292915050565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561450657600080fd5b610fcb82613f62565b602081526000825180602084015261452e816040850160208701614282565b601f01601f1916919091016040019291505056fea26469706673582212207e5b0824160ecc02db504fb266cfb655ea6ef7125e04bf47ea8b60949c5dbcd664736f6c63430008110033", } // RollupUserLogicABI is the input ABI used to generate the binding from. @@ -22160,7 +24208,7 @@ func (_RollupUserLogic *RollupUserLogicFilterer) ParseUserWithdrawableFundsUpdat // StateHashPreImageLookupMetaData contains all meta data concerning the StateHashPreImageLookup contract. var StateHashPreImageLookupMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"HashSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"}],\"name\":\"get\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"h\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32[2]\",\"name\":\"bytes32Vals\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint64[2]\",\"name\":\"u64Vals\",\"type\":\"uint64[2]\"}],\"internalType\":\"structGlobalState\",\"name\":\"globalState\",\"type\":\"tuple\"},{\"internalType\":\"enumMachineStatus\",\"name\":\"machineStatus\",\"type\":\"uint8\"}],\"internalType\":\"structExecutionState\",\"name\":\"executionState\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"inboxMaxCount\",\"type\":\"uint256\"}],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea26469706673582212200d751c0c25a70581427a46e77b10aba2478daec5efbdf3c923f5fc2aa2fcd7ca64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50610a0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806331644130146100465780638eaa6ac01461006c578063945c94941461008d575b600080fd5b61005961005436600461041d565b6100a2565b6040519081526020015b60405180910390f35b61007f61007a366004610448565b610193565b604051610063929190610483565b6100a061009b36600461050a565b6102bf565b005b60006101526100b636859003850185610598565b8051805160209182015192820151805190830151604080517f476c6f62616c2073746174653a0000000000000000000000000000000000000081870152602d810194909452604d8401959095527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b8261016360a0860160808701610667565b6040516020016101759392919061068b565b60405160208183030381529060405280519060200120905092915050565b61019b6103ab565b600082815260208190526040812080546101b4906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101e0906106c9565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b50505050508060200190518101906102459190610766565b909250905060008190036102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f48617368206e6f7420796574207365740000000000000000000000000000000060448201526064015b60405180910390fd5b915091565b6102c982826100a2565b8314610331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c69642068617368000000000000000000000000000000000000000060448201526064016102b1565b818160405160200161034492919061088c565b60408051601f1981840301815291815260008581526020819052209061036a90826108f5565b507f14c0a6b8d81f5915dacfd85e41ae4798343ec29de408ac4c13360c7238ae0ad983838360405161039e939291906109b5565b60405180910390a1505050565b60405180604001604052806103be6103cb565b815260200160005b905290565b60405180604001604052806103de6103e7565b81526020016103c65b60405180604001604052806002906020820280368337509192915050565b600060a0828403121561041757600080fd5b50919050565b60008060c0838503121561043057600080fd5b61043a8484610405565b9460a0939093013593505050565b60006020828403121561045a57600080fd5b5035919050565b6003811061047f57634e487b7160e01b600052602160045260246000fd5b9052565b8251805160c0830191908360005b60028110156104b0578251825260209283019290910190600101610491565b505050602090810151906040840160005b60028110156104e857835167ffffffffffffffff16825292820192908201906001016104c1565b505085015190506104fc6080840182610461565b508260a08301529392505050565b600080600060e0848603121561051f57600080fd5b833592506105308560208601610405565b915060c084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561057957610579610540565b60405290565b67ffffffffffffffff8116811461059557600080fd5b50565b6000608082840312156105aa57600080fd5b6105b2610556565b83601f8401126105c157600080fd5b6105c9610556565b8060408501868111156105db57600080fd5b855b818110156105f55780358452602093840193016105dd565b5081845286605f87011261060857600080fd5b610610610556565b9250829150608086018781111561062657600080fd5b8082101561064b5781356106398161057f565b84526020938401939190910190610626565b50506020830152509392505050565b6003811061059557600080fd5b60006020828403121561067957600080fd5b81356106848161065a565b9392505050565b8381528260208201526000600383106106b457634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b600181811c908216806106dd57607f821691505b60208210810361041757634e487b7160e01b600052602260045260246000fd5b600082601f83011261070e57600080fd5b610716610556565b80604084018581111561072857600080fd5b845b8181101561074b57805161073d8161057f565b84526020938401930161072a565b509095945050505050565b80516107618161065a565b919050565b60008082840360c081121561077a57600080fd5b60a081121561078857600080fd5b610790610556565b608082121561079e57600080fd5b6107a6610556565b915085601f8601126107b757600080fd5b6107bf610556565b8060408701888111156107d157600080fd5b875b818110156107eb5780518452602093840193016107d3565b508185526107f989826106fd565b602086015250505081815261081060808601610756565b602082015260a094909401519395939450505050565b6040818337604082016040820160005b600281101561086957813561084a8161057f565b67ffffffffffffffff1683526020928301929190910190600101610836565b505050608081013561087a8161065a565b6108876080840182610461565b505050565b60c0810161089a8285610826565b8260a08301529392505050565b601f82111561088757600081815260208120601f850160051c810160208610156108ce5750805b601f850160051c820191505b818110156108ed578281556001016108da565b505050505050565b815167ffffffffffffffff81111561090f5761090f610540565b6109238161091d84546106c9565b846108a7565b602080601f83116001811461095857600084156109405750858301515b600019600386901b1c1916600185901b1785556108ed565b600085815260208120601f198616915b8281101561098757888601518255948401946001909101908401610968565b50858210156109a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b83815260e081016109c96020830185610826565b8260c083015294935050505056fea2646970667358221220a1f757a5902974df23daaa142a9d5301c059eb0eccd1b043081f7b8b6a2b1b0864736f6c63430008110033", } // StateHashPreImageLookupABI is the input ABI used to generate the binding from. @@ -22566,7 +24614,7 @@ func (_StateHashPreImageLookup *StateHashPreImageLookupFilterer) ParseHashSet(lo // ValidatorWalletMetaData contains all meta data concerning the ValidatorWallet contract. var ValidatorWalletMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"BadArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"actual\",\"type\":\"address\"}],\"name\":\"NotExecutorOrOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actual\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"OnlyOwnerDestination\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"WithdrawEthFail\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"name\":\"AllowedExecutorDestinationsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isExecutor\",\"type\":\"bool\"}],\"name\":\"ExecutorUpdated\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedExecutorDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"executeTransactionWithGasRefunder\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"address[]\",\"name\":\"destination\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"executeTransactions\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"address[]\",\"name\":\"destination\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amount\",\"type\":\"uint256[]\"}],\"name\":\"executeTransactionsWithGasRefunder\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"executors\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"initialExecutorAllowedDests\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"destinations\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"isSet\",\"type\":\"bool[]\"}],\"name\":\"setAllowedExecutorDestinations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newExecutors\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"isExecutor\",\"type\":\"bool[]\"}],\"name\":\"setExecutor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOldChallengeManager\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"challenges\",\"type\":\"uint64[]\"}],\"name\":\"timeoutChallenges\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIGasRefunder\",\"name\":\"gasRefunder\",\"type\":\"address\"},{\"internalType\":\"contractIOldChallengeManager\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"challenges\",\"type\":\"uint64[]\"}],\"name\":\"timeoutChallengesWithGasRefunder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"validateExecuteTransaction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b50608051611c4061003060003960006109520152611c406000f3fe6080604052600436106100f75760003560e01c80639ac2a0111161008a578063c179f1d911610059578063c179f1d91461029d578063ce1d571f146102b0578063d327821a146102c3578063f2fde38b146102e357600080fd5b80639ac2a0111461020d5780639be7bbd21461023d578063a158657c1461025d578063af1b9a071461027d57600080fd5b8063715018a6116100c6578063715018a61461019d57806372f45866146101b257806377a24f36146101c55780638da5cb5b146101e557600080fd5b8063097da1f8146101035780630a2435f814610118578063193c8edd146101385780633a7c721a1461017d57600080fd5b366100fe57005b600080fd5b6101166101113660046115be565b610303565b005b34801561012457600080fd5b50610116610133366004611673565b610580565b34801561014457600080fd5b506101686101533660046116df565b60666020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561018957600080fd5b50610116610198366004611673565b610703565b3480156101a957600080fd5b5061011661084d565b6101166101c0366004611703565b610861565b3480156101d157600080fd5b506101166101e036600461179d565b610879565b3480156101f157600080fd5b506033546040516001600160a01b039091168152602001610174565b34801561021957600080fd5b506101686102283660046116df565b60656020526000908152604090205460ff1681565b34801561024957600080fd5b506101166102583660046116df565b610b90565b34801561026957600080fd5b506101166102783660046117f6565b610c1b565b34801561028957600080fd5b50610116610298366004611826565b610cc0565b6101166102ab36600461187b565b610ccd565b6101166102be366004611928565b611058565b3480156102cf57600080fd5b506101166102de36600461179d565b61106c565b3480156102ef57600080fd5b506101166102fe3660046116df565b611309565b3360009081526065602052604090205460ff1615801561032e57506033546001600160a01b03163314155b1561037857335b6040517ff26aea8b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b8460005a905084156103db576001600160a01b0384163b6103db5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b6103e484610b90565b6000846001600160a01b0316848888604051610401929190611985565b60006040518083038185875af1925050503d806000811461043e576040519150601f19603f3d011682016040523d82523d6000602084013e610443565b606091505b5050905080610459576040513d806000833e8082fd5b506001600160a01b0382161561057757366000602061047983601f6119ab565b61048391906119c4565b9050610200610493600283611aca565b61049d91906119c4565b6104a8826006611ad9565b6104b291906119ab565b6104bc90846119ab565b92503332146104ca57600091505b836001600160a01b031663e3db8a49335a6104e59087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af115801561054f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105739190611b11565b5050505b50505050505050565b610588611396565b8281146105b25760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b67ffffffffffffffff81168411156106fc5782828267ffffffffffffffff168181106105e3576105e3611b2e565b90506020020160208101906105f89190611b44565b6065600087878567ffffffffffffffff1681811061061857610618611b2e565b905060200201602081019061062d91906116df565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055848467ffffffffffffffff831681811061067157610671611b2e565b905060200201602081019061068691906116df565b6001600160a01b03167f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea284848467ffffffffffffffff168181106106cc576106cc611b2e565b90506020020160208101906106e19190611b44565b604051901515815260200160405180910390a26001016105b5565b5050505050565b61070b611396565b8281146107355760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b838110156106fc5782828281811061075257610752611b2e565b90506020020160208101906107679190611b44565b6066600087878581811061077d5761077d611b2e565b905060200201602081019061079291906116df565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558484828181106107cc576107cc611b2e565b90506020020160208101906107e191906116df565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a484848481811061081d5761081d611b2e565b90506020020160208101906108329190611b44565b604051901515815260200160405180910390a2600101610738565b610855611396565b61085f60006113f0565b565b6108716000878787878787610ccd565b505050505050565b600054610100900460ff16158080156108995750600054600160ff909116105b806108b35750303b1580156108b3575060005460ff166001145b6109255760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036f565b6000805460ff191660011790558015610948576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109e65760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161036f565b6109ee61145a565b6109f784611309565b6001600160a01b038516600081815260656020908152604091829020805460ff1916600190811790915591519182527f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea2910160405180910390a260005b67ffffffffffffffff8116831115610b435760016066600086868567ffffffffffffffff16818110610a8857610a88611b2e565b9050602002016020810190610a9d91906116df565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838367ffffffffffffffff8316818110610ae157610ae1611b2e565b9050602002016020810190610af691906116df565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a46001604051610b33911515815260200190565b60405180910390a2600101610a54565b5080156106fc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6001600160a01b03811660009081526066602052604090205460ff16158015610bc457506033546001600160a01b03163314155b15610c18576033546040517f41fc6f8a0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152336024820152908216604482015260640161036f565b50565b610c23611396565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610cbb576040517f7edbb4980000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161036f565b505050565b610cbb600084848461106c565b3360009081526065602052604090205460ff16158015610cf857506033546001600160a01b03163314155b15610d035733610335565b8660005a905086858114610d345760405163088253c360e11b8152600481018290526024810187905260440161036f565b808414610d5e5760405163088253c360e11b8152600481018290526024810185905260440161036f565b60005b81811015610f2e5760008a8a83818110610d7d57610d7d611b2e565b9050602002810190610d8f9190611b61565b90501115610e1c57610dd0888883818110610dac57610dac611b2e565b9050602002016020810190610dc191906116df565b6001600160a01b03163b151590565b610e1c5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b610e46888883818110610e3157610e31611b2e565b905060200201602081019061025891906116df565b6000888883818110610e5a57610e5a611b2e565b9050602002016020810190610e6f91906116df565b6001600160a01b0316878784818110610e8a57610e8a611b2e565b905060200201358c8c85818110610ea357610ea3611b2e565b9050602002810190610eb59190611b61565b604051610ec3929190611985565b60006040518083038185875af1925050503d8060008114610f00576040519150601f19603f3d011682016040523d82523d6000602084013e610f05565b606091505b5050905080610f1b576040513d806000833e8082fd5b5080610f2681611bc6565b915050610d61565b50506001600160a01b0382161561104d573660006020610f4f83601f6119ab565b610f5991906119c4565b9050610200610f69600283611aca565b610f7391906119c4565b610f7e826006611ad9565b610f8891906119ab565b610f9290846119ab565b9250333214610fa057600091505b836001600160a01b031663e3db8a49335a610fbb9087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190611b11565b5050505b505050505050505050565b611066600085858585610303565b50505050565b3360009081526065602052604090205460ff1615801561109757506033546001600160a01b03163314155b156110a25733610335565b8360005a90508260005b818110156111ee57866001600160a01b0316631b45c86a8787848181106110d5576110d5611b2e565b90506020020160208101906110ea9190611be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b15801561114457600080fd5b505af1925050508015611155575060015b6111dc573d808015611183576040519150601f19603f3d011682016040523d82523d6000602084013e611188565b606091505b5080516000036111da5760405162461bcd60e51b815260206004820152600360248201527f4741530000000000000000000000000000000000000000000000000000000000604482015260640161036f565b505b806111e681611bc6565b9150506110ac565b50506001600160a01b0382161561087157366000602061120f83601f6119ab565b61121991906119c4565b9050610200611229600283611aca565b61123391906119c4565b61123e826006611ad9565b61124891906119ab565b61125290846119ab565b925033321461126057600091505b836001600160a01b031663e3db8a49335a61127b9087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af11580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d9190611b11565b611311611396565b6001600160a01b03811661138d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161036f565b610c18816113f0565b6033546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166114d75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b61085f600054610100900460ff166115575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b61085f336113f0565b6001600160a01b0381168114610c1857600080fd5b60008083601f84011261158757600080fd5b50813567ffffffffffffffff81111561159f57600080fd5b6020830191508360208285010111156115b757600080fd5b9250929050565b6000806000806000608086880312156115d657600080fd5b85356115e181611560565b9450602086013567ffffffffffffffff8111156115fd57600080fd5b61160988828901611575565b909550935050604086013561161d81611560565b949793965091946060013592915050565b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b6020830191508360208260051b85010111156115b757600080fd5b6000806000806040858703121561168957600080fd5b843567ffffffffffffffff808211156116a157600080fd5b6116ad8883890161162e565b909650945060208701359150808211156116c657600080fd5b506116d38782880161162e565b95989497509550505050565b6000602082840312156116f157600080fd5b81356116fc81611560565b9392505050565b6000806000806000806060878903121561171c57600080fd5b863567ffffffffffffffff8082111561173457600080fd5b6117408a838b0161162e565b9098509650602089013591508082111561175957600080fd5b6117658a838b0161162e565b9096509450604089013591508082111561177e57600080fd5b5061178b89828a0161162e565b979a9699509497509295939492505050565b600080600080606085870312156117b357600080fd5b84356117be81611560565b935060208501356117ce81611560565b9250604085013567ffffffffffffffff8111156117ea57600080fd5b6116d38782880161162e565b6000806040838503121561180957600080fd5b82359150602083013561181b81611560565b809150509250929050565b60008060006040848603121561183b57600080fd5b833561184681611560565b9250602084013567ffffffffffffffff81111561186257600080fd5b61186e8682870161162e565b9497909650939450505050565b60008060008060008060006080888a03121561189657600080fd5b87356118a181611560565b9650602088013567ffffffffffffffff808211156118be57600080fd5b6118ca8b838c0161162e565b909850965060408a01359150808211156118e357600080fd5b6118ef8b838c0161162e565b909650945060608a013591508082111561190857600080fd5b506119158a828b0161162e565b989b979a50959850939692959293505050565b6000806000806060858703121561193e57600080fd5b843567ffffffffffffffff81111561195557600080fd5b61196187828801611575565b909550935050602085013561197581611560565b9396929550929360400135925050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156119be576119be611995565b92915050565b6000826119e157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611a21578160001904821115611a0757611a07611995565b80851615611a1457918102915b93841c93908002906119eb565b509250929050565b600082611a38575060016119be565b81611a45575060006119be565b8160018114611a5b5760028114611a6557611a81565b60019150506119be565b60ff841115611a7657611a76611995565b50506001821b6119be565b5060208310610133831016604e8410600b8410161715611aa4575081810a6119be565b611aae83836119e6565b8060001904821115611ac257611ac2611995565b029392505050565b60006116fc60ff841683611a29565b80820281158282048414176119be576119be611995565b818103818111156119be576119be611995565b8015158114610c1857600080fd5b600060208284031215611b2357600080fd5b81516116fc81611b03565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b5657600080fd5b81356116fc81611b03565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b9657600080fd5b83018035915067ffffffffffffffff821115611bb157600080fd5b6020019150368190038213156115b757600080fd5b60006000198203611bd957611bd9611995565b5060010190565b600060208284031215611bf257600080fd5b813567ffffffffffffffff811681146116fc57600080fdfea26469706673582212209370c35a9402bf052c0cdf0814cdbeb274eb4aa4386444cb5b9c6b7b192a271564736f6c63430008110033", + Bin: "0x60c0604052306080526202000060a05234801561001b57600080fd5b5060805160a0516120e061004f600039600081816105b3015281816111c201526115bb01526000610a8b01526120e06000f3fe6080604052600436106100f75760003560e01c80639ac2a0111161008a578063c179f1d911610059578063c179f1d91461029d578063ce1d571f146102b0578063d327821a146102c3578063f2fde38b146102e357600080fd5b80639ac2a0111461020d5780639be7bbd21461023d578063a158657c1461025d578063af1b9a071461027d57600080fd5b8063715018a6116100c6578063715018a61461019d57806372f45866146101b257806377a24f36146101c55780638da5cb5b146101e557600080fd5b8063097da1f8146101035780630a2435f814610118578063193c8edd146101385780633a7c721a1461017d57600080fd5b366100fe57005b600080fd5b610116610111366004611971565b610303565b005b34801561012457600080fd5b50610116610133366004611a26565b6106b9565b34801561014457600080fd5b50610168610153366004611a92565b60666020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561018957600080fd5b50610116610198366004611a26565b61083c565b3480156101a957600080fd5b50610116610986565b6101166101c0366004611ab6565b61099a565b3480156101d157600080fd5b506101166101e0366004611b50565b6109b2565b3480156101f157600080fd5b506033546040516001600160a01b039091168152602001610174565b34801561021957600080fd5b50610168610228366004611a92565b60656020526000908152604090205460ff1681565b34801561024957600080fd5b50610116610258366004611a92565b610cc9565b34801561026957600080fd5b50610116610278366004611ba9565b610d54565b34801561028957600080fd5b50610116610298366004611bd9565b610df9565b6101166102ab366004611c2e565b610e06565b6101166102be366004611cdb565b6112ca565b3480156102cf57600080fd5b506101166102de366004611b50565b6112de565b3480156102ef57600080fd5b506101166102fe366004611a92565b6116bc565b3360009081526065602052604090205460ff1615801561032e57506033546001600160a01b03163314155b1561037857335b6040517ff26aea8b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b846000805a905085156103dc576001600160a01b0385163b6103dc5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b6103e585610cc9565b6000856001600160a01b0316858989604051610402929190611d38565b60006040518083038185875af1925050503d806000811461043f576040519150601f19603f3d011682016040523d82523d6000602084013e610444565b606091505b505090508061045a576040513d806000833e8082fd5b506001600160a01b038316156106af57366000602061047a83601f611d5e565b6104849190611d77565b9050610200610494600283611e7d565b61049e9190611d77565b6104a9826006611e8c565b6104b39190611d5e565b6104bd9084611d5e565b92503332146104cf5760009150610602565b6001600160a01b0384161561060257836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561053d57506040513d6000823e601f3d908101601f1916820160405261053a9190810190611eb9565b60015b1561060257805115610600576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ad9190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516105de9190611e8c565b6105e89190611e8c565b6105f29190611d77565b6105fc9086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a61061d9087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab9190611fb1565b5050505b5050505050505050565b6106c1611749565b8281146106eb5760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b67ffffffffffffffff81168411156108355782828267ffffffffffffffff1681811061071c5761071c611fce565b90506020020160208101906107319190611fe4565b6065600087878567ffffffffffffffff1681811061075157610751611fce565b90506020020160208101906107669190611a92565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055848467ffffffffffffffff83168181106107aa576107aa611fce565b90506020020160208101906107bf9190611a92565b6001600160a01b03167f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea284848467ffffffffffffffff1681811061080557610805611fce565b905060200201602081019061081a9190611fe4565b604051901515815260200160405180910390a26001016106ee565b5050505050565b610844611749565b82811461086e5760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b838110156108355782828281811061088b5761088b611fce565b90506020020160208101906108a09190611fe4565b606660008787858181106108b6576108b6611fce565b90506020020160208101906108cb9190611a92565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905584848281811061090557610905611fce565b905060200201602081019061091a9190611a92565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a484848481811061095657610956611fce565b905060200201602081019061096b9190611fe4565b604051901515815260200160405180910390a2600101610871565b61098e611749565b61099860006117a3565b565b6109aa6000878787878787610e06565b505050505050565b600054610100900460ff16158080156109d25750600054600160ff909116105b806109ec5750303b1580156109ec575060005460ff166001145b610a5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036f565b6000805460ff191660011790558015610a81576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b1f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161036f565b610b2761180d565b610b30846116bc565b6001600160a01b038516600081815260656020908152604091829020805460ff1916600190811790915591519182527f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea2910160405180910390a260005b67ffffffffffffffff8116831115610c7c5760016066600086868567ffffffffffffffff16818110610bc157610bc1611fce565b9050602002016020810190610bd69190611a92565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838367ffffffffffffffff8316818110610c1a57610c1a611fce565b9050602002016020810190610c2f9190611a92565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a46001604051610c6c911515815260200190565b60405180910390a2600101610b8d565b508015610835576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6001600160a01b03811660009081526066602052604090205460ff16158015610cfd57506033546001600160a01b03163314155b15610d51576033546040517f41fc6f8a0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152336024820152908216604482015260640161036f565b50565b610d5c611749565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610da9576040519150601f19603f3d011682016040523d82523d6000602084013e610dae565b606091505b5050905080610df4576040517f7edbb4980000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161036f565b505050565b610df460008484846112de565b3360009081526065602052604090205460ff16158015610e3157506033546001600160a01b03163314155b15610e3c5733610335565b866000805a905087868114610e6e5760405163088253c360e11b8152600481018290526024810188905260440161036f565b808514610e985760405163088253c360e11b8152600481018290526024810186905260440161036f565b60005b818110156110685760008b8b83818110610eb757610eb7611fce565b9050602002810190610ec99190612001565b90501115610f5657610f0a898983818110610ee657610ee6611fce565b9050602002016020810190610efb9190611a92565b6001600160a01b03163b151590565b610f565760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b610f80898983818110610f6b57610f6b611fce565b90506020020160208101906102589190611a92565b6000898983818110610f9457610f94611fce565b9050602002016020810190610fa99190611a92565b6001600160a01b0316888884818110610fc457610fc4611fce565b905060200201358d8d85818110610fdd57610fdd611fce565b9050602002810190610fef9190612001565b604051610ffd929190611d38565b60006040518083038185875af1925050503d806000811461103a576040519150601f19603f3d011682016040523d82523d6000602084013e61103f565b606091505b5050905080611055576040513d806000833e8082fd5b508061106081612066565b915050610e9b565b50506001600160a01b038316156112be57366000602061108983601f611d5e565b6110939190611d77565b90506102006110a3600283611e7d565b6110ad9190611d77565b6110b8826006611e8c565b6110c29190611d5e565b6110cc9084611d5e565b92503332146110de5760009150611211565b6001600160a01b0384161561121157836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561114c57506040513d6000823e601f3d908101601f191682016040526111499190810190611eb9565b60015b156112115780511561120f576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516111ed9190611e8c565b6111f79190611e8c565b6112019190611d77565b61120b9086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a61122c9087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190611fb1565b5050505b50505050505050505050565b6112d8600085858585610303565b50505050565b3360009081526065602052604090205460ff1615801561130957506033546001600160a01b03163314155b156113145733610335565b836000805a90508360005b8181101561146157876001600160a01b0316631b45c86a88888481811061134857611348611fce565b905060200201602081019061135d9190612080565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156113b757600080fd5b505af19250505080156113c8575060015b61144f573d8080156113f6576040519150601f19603f3d011682016040523d82523d6000602084013e6113fb565b606091505b50805160000361144d5760405162461bcd60e51b815260206004820152600360248201527f4741530000000000000000000000000000000000000000000000000000000000604482015260640161036f565b505b8061145981612066565b91505061131f565b50506001600160a01b038316156116b357366000602061148283601f611d5e565b61148c9190611d77565b905061020061149c600283611e7d565b6114a69190611d77565b6114b1826006611e8c565b6114bb9190611d5e565b6114c59084611d5e565b92503332146114d7576000915061160a565b6001600160a01b0384161561160a57836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561154557506040513d6000823e601f3d908101601f191682016040526115429190810190611eb9565b60015b1561160a57805115611608576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516115e69190611e8c565b6115f09190611e8c565b6115fa9190611d77565b6116049086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a6116259087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af115801561168f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112be9190611fb1565b50505050505050565b6116c4611749565b6001600160a01b0381166117405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161036f565b610d51816117a3565b6033546001600160a01b031633146109985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661188a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b610998600054610100900460ff1661190a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b610998336117a3565b6001600160a01b0381168114610d5157600080fd5b60008083601f84011261193a57600080fd5b50813567ffffffffffffffff81111561195257600080fd5b60208301915083602082850101111561196a57600080fd5b9250929050565b60008060008060006080868803121561198957600080fd5b853561199481611913565b9450602086013567ffffffffffffffff8111156119b057600080fd5b6119bc88828901611928565b90955093505060408601356119d081611913565b949793965091946060013592915050565b60008083601f8401126119f357600080fd5b50813567ffffffffffffffff811115611a0b57600080fd5b6020830191508360208260051b850101111561196a57600080fd5b60008060008060408587031215611a3c57600080fd5b843567ffffffffffffffff80821115611a5457600080fd5b611a60888389016119e1565b90965094506020870135915080821115611a7957600080fd5b50611a86878288016119e1565b95989497509550505050565b600060208284031215611aa457600080fd5b8135611aaf81611913565b9392505050565b60008060008060008060608789031215611acf57600080fd5b863567ffffffffffffffff80821115611ae757600080fd5b611af38a838b016119e1565b90985096506020890135915080821115611b0c57600080fd5b611b188a838b016119e1565b90965094506040890135915080821115611b3157600080fd5b50611b3e89828a016119e1565b979a9699509497509295939492505050565b60008060008060608587031215611b6657600080fd5b8435611b7181611913565b93506020850135611b8181611913565b9250604085013567ffffffffffffffff811115611b9d57600080fd5b611a86878288016119e1565b60008060408385031215611bbc57600080fd5b823591506020830135611bce81611913565b809150509250929050565b600080600060408486031215611bee57600080fd5b8335611bf981611913565b9250602084013567ffffffffffffffff811115611c1557600080fd5b611c21868287016119e1565b9497909650939450505050565b60008060008060008060006080888a031215611c4957600080fd5b8735611c5481611913565b9650602088013567ffffffffffffffff80821115611c7157600080fd5b611c7d8b838c016119e1565b909850965060408a0135915080821115611c9657600080fd5b611ca28b838c016119e1565b909650945060608a0135915080821115611cbb57600080fd5b50611cc88a828b016119e1565b989b979a50959850939692959293505050565b60008060008060608587031215611cf157600080fd5b843567ffffffffffffffff811115611d0857600080fd5b611d1487828801611928565b9095509350506020850135611d2881611913565b9396929550929360400135925050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611d7157611d71611d48565b92915050565b600082611d9457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611dd4578160001904821115611dba57611dba611d48565b80851615611dc757918102915b93841c9390800290611d9e565b509250929050565b600082611deb57506001611d71565b81611df857506000611d71565b8160018114611e0e5760028114611e1857611e34565b6001915050611d71565b60ff841115611e2957611e29611d48565b50506001821b611d71565b5060208310610133831016604e8410600b8410161715611e57575081810a611d71565b611e618383611d99565b8060001904821115611e7557611e75611d48565b029392505050565b6000611aaf60ff841683611ddc565b8082028115828204841417611d7157611d71611d48565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ecc57600080fd5b825167ffffffffffffffff80821115611ee457600080fd5b818501915085601f830112611ef857600080fd5b815181811115611f0a57611f0a611ea3565b8060051b604051601f19603f83011681018181108582111715611f2f57611f2f611ea3565b604052918252848201925083810185019188831115611f4d57600080fd5b938501935b82851015611f6b57845184529385019392850192611f52565b98975050505050505050565b600060208284031215611f8957600080fd5b5051919050565b81810381811115611d7157611d71611d48565b8015158114610d5157600080fd5b600060208284031215611fc357600080fd5b8151611aaf81611fa3565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ff657600080fd5b8135611aaf81611fa3565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261203657600080fd5b83018035915067ffffffffffffffff82111561205157600080fd5b60200191503681900382131561196a57600080fd5b6000600019820361207957612079611d48565b5060010190565b60006020828403121561209257600080fd5b813567ffffffffffffffff81168114611aaf57600080fdfea26469706673582212208ec068c31984a459a4dc66b5cfd749be16af0e7ca308f51c1b9e61c62c98e4db64736f6c63430008110033", } // ValidatorWalletABI is the input ABI used to generate the binding from. @@ -23711,7 +25759,7 @@ func (_ValidatorWallet *ValidatorWalletFilterer) ParseOwnershipTransferred(log t // ValidatorWalletCreatorMetaData contains all meta data concerning the ValidatorWalletCreator contract. var ValidatorWalletCreatorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":[],\"name\":\"TemplateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"walletAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executorAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adminProxy\",\"type\":\"address\"}],\"name\":\"WalletCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"initialExecutorAllowedDests\",\"type\":\"address[]\"}],\"name\":\"createWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_template\",\"type\":\"address\"}],\"name\":\"setTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"template\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a33610068565b604051610026906100b8565b604051809103906000f080158015610042573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100c5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c7080611e3b83390190565b611d67806100d46000396000f3fe60806040523480156200001157600080fd5b50600436106200007b5760003560e01c806389c716d1116200005657806389c716d114620000d35780638da5cb5b14620000ea578063f2fde38b14620000fc57600080fd5b80631cf89b4b14620000805780636f2ddd9314620000b3578063715018a614620000c7575b600080fd5b62000097620000913660046200052d565b62000113565b6040516001600160a01b03909116815260200160405180910390f35b60015462000097906001600160a01b031681565b620000d1620002fe565b005b620000d1620000e4366004620005c4565b62000316565b6000546001600160a01b031662000097565b620000d16200010d366004620005c4565b6200037f565b6040516000903390819083906200012a9062000511565b604051809103906000f08015801562000147573d6000803e3d6000fd5b506001546040519192506000916001600160a01b039091169083906200016d906200051f565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620001b0573d6000803e3d6000fd5b506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529192509083169063f2fde38b90602401600060405180830381600087803b1580156200021257600080fd5b505af115801562000227573d6000803e3d6000fd5b50506040517f77a24f360000000000000000000000000000000000000000000000000000000081526001600160a01b03841692506377a24f3691506200027890879087908c908c90600401620005e9565b600060405180830381600087803b1580156200029357600080fd5b505af1158015620002a8573d6000803e3d6000fd5b50506040516001600160a01b038581168252808716935087811692508416907f7a6fe39e62e2aeedf6430893f8ce67c6aa08c92d3c7d66c83706057ee178ee489060200160405180910390a49695505050505050565b6200030862000433565b620003146000620004a9565b565b6200032062000433565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f6eb26f176dd9180849dd4874d3530de0e5c1f62a6e6798d34e3abfc11f1db2cc90600090a150565b6200038962000433565b6001600160a01b03811662000425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6200043081620004a9565b50565b6000546001600160a01b0316331462000314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200041c565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61080b806200065483390190565b610ed38062000e5f83390190565b600080602083850312156200054157600080fd5b823567ffffffffffffffff808211156200055a57600080fd5b818501915085601f8301126200056f57600080fd5b8135818111156200057f57600080fd5b8660208260051b85010111156200059557600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114620005bf57600080fd5b919050565b600060208284031215620005d757600080fd5b620005e282620005a7565b9392505050565b6000606082016001600160a01b038088168452602081881681860152606060408601528286845260808601905087935060005b878110156200064557836200063186620005a7565b16825293820193908201906001016200061c565b50999850505050505050505056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ed60fd7e28875454ee9f633be7362b5983c579148daafea0dab96d68e1ee507264736f6c6343000811003360a06040523060805234801561001457600080fd5b50608051611c4061003060003960006109520152611c406000f3fe6080604052600436106100f75760003560e01c80639ac2a0111161008a578063c179f1d911610059578063c179f1d91461029d578063ce1d571f146102b0578063d327821a146102c3578063f2fde38b146102e357600080fd5b80639ac2a0111461020d5780639be7bbd21461023d578063a158657c1461025d578063af1b9a071461027d57600080fd5b8063715018a6116100c6578063715018a61461019d57806372f45866146101b257806377a24f36146101c55780638da5cb5b146101e557600080fd5b8063097da1f8146101035780630a2435f814610118578063193c8edd146101385780633a7c721a1461017d57600080fd5b366100fe57005b600080fd5b6101166101113660046115be565b610303565b005b34801561012457600080fd5b50610116610133366004611673565b610580565b34801561014457600080fd5b506101686101533660046116df565b60666020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561018957600080fd5b50610116610198366004611673565b610703565b3480156101a957600080fd5b5061011661084d565b6101166101c0366004611703565b610861565b3480156101d157600080fd5b506101166101e036600461179d565b610879565b3480156101f157600080fd5b506033546040516001600160a01b039091168152602001610174565b34801561021957600080fd5b506101686102283660046116df565b60656020526000908152604090205460ff1681565b34801561024957600080fd5b506101166102583660046116df565b610b90565b34801561026957600080fd5b506101166102783660046117f6565b610c1b565b34801561028957600080fd5b50610116610298366004611826565b610cc0565b6101166102ab36600461187b565b610ccd565b6101166102be366004611928565b611058565b3480156102cf57600080fd5b506101166102de36600461179d565b61106c565b3480156102ef57600080fd5b506101166102fe3660046116df565b611309565b3360009081526065602052604090205460ff1615801561032e57506033546001600160a01b03163314155b1561037857335b6040517ff26aea8b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b8460005a905084156103db576001600160a01b0384163b6103db5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b6103e484610b90565b6000846001600160a01b0316848888604051610401929190611985565b60006040518083038185875af1925050503d806000811461043e576040519150601f19603f3d011682016040523d82523d6000602084013e610443565b606091505b5050905080610459576040513d806000833e8082fd5b506001600160a01b0382161561057757366000602061047983601f6119ab565b61048391906119c4565b9050610200610493600283611aca565b61049d91906119c4565b6104a8826006611ad9565b6104b291906119ab565b6104bc90846119ab565b92503332146104ca57600091505b836001600160a01b031663e3db8a49335a6104e59087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af115801561054f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105739190611b11565b5050505b50505050505050565b610588611396565b8281146105b25760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b67ffffffffffffffff81168411156106fc5782828267ffffffffffffffff168181106105e3576105e3611b2e565b90506020020160208101906105f89190611b44565b6065600087878567ffffffffffffffff1681811061061857610618611b2e565b905060200201602081019061062d91906116df565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055848467ffffffffffffffff831681811061067157610671611b2e565b905060200201602081019061068691906116df565b6001600160a01b03167f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea284848467ffffffffffffffff168181106106cc576106cc611b2e565b90506020020160208101906106e19190611b44565b604051901515815260200160405180910390a26001016105b5565b5050505050565b61070b611396565b8281146107355760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b838110156106fc5782828281811061075257610752611b2e565b90506020020160208101906107679190611b44565b6066600087878581811061077d5761077d611b2e565b905060200201602081019061079291906116df565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558484828181106107cc576107cc611b2e565b90506020020160208101906107e191906116df565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a484848481811061081d5761081d611b2e565b90506020020160208101906108329190611b44565b604051901515815260200160405180910390a2600101610738565b610855611396565b61085f60006113f0565b565b6108716000878787878787610ccd565b505050505050565b600054610100900460ff16158080156108995750600054600160ff909116105b806108b35750303b1580156108b3575060005460ff166001145b6109255760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036f565b6000805460ff191660011790558015610948576000805461ff0019166101001790555b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109e65760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161036f565b6109ee61145a565b6109f784611309565b6001600160a01b038516600081815260656020908152604091829020805460ff1916600190811790915591519182527f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea2910160405180910390a260005b67ffffffffffffffff8116831115610b435760016066600086868567ffffffffffffffff16818110610a8857610a88611b2e565b9050602002016020810190610a9d91906116df565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838367ffffffffffffffff8316818110610ae157610ae1611b2e565b9050602002016020810190610af691906116df565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a46001604051610b33911515815260200190565b60405180910390a2600101610a54565b5080156106fc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6001600160a01b03811660009081526066602052604090205460ff16158015610bc457506033546001600160a01b03163314155b15610c18576033546040517f41fc6f8a0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152336024820152908216604482015260640161036f565b50565b610c23611396565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610cbb576040517f7edbb4980000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161036f565b505050565b610cbb600084848461106c565b3360009081526065602052604090205460ff16158015610cf857506033546001600160a01b03163314155b15610d035733610335565b8660005a905086858114610d345760405163088253c360e11b8152600481018290526024810187905260440161036f565b808414610d5e5760405163088253c360e11b8152600481018290526024810185905260440161036f565b60005b81811015610f2e5760008a8a83818110610d7d57610d7d611b2e565b9050602002810190610d8f9190611b61565b90501115610e1c57610dd0888883818110610dac57610dac611b2e565b9050602002016020810190610dc191906116df565b6001600160a01b03163b151590565b610e1c5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b610e46888883818110610e3157610e31611b2e565b905060200201602081019061025891906116df565b6000888883818110610e5a57610e5a611b2e565b9050602002016020810190610e6f91906116df565b6001600160a01b0316878784818110610e8a57610e8a611b2e565b905060200201358c8c85818110610ea357610ea3611b2e565b9050602002810190610eb59190611b61565b604051610ec3929190611985565b60006040518083038185875af1925050503d8060008114610f00576040519150601f19603f3d011682016040523d82523d6000602084013e610f05565b606091505b5050905080610f1b576040513d806000833e8082fd5b5080610f2681611bc6565b915050610d61565b50506001600160a01b0382161561104d573660006020610f4f83601f6119ab565b610f5991906119c4565b9050610200610f69600283611aca565b610f7391906119c4565b610f7e826006611ad9565b610f8891906119ab565b610f9290846119ab565b9250333214610fa057600091505b836001600160a01b031663e3db8a49335a610fbb9087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190611b11565b5050505b505050505050505050565b611066600085858585610303565b50505050565b3360009081526065602052604090205460ff1615801561109757506033546001600160a01b03163314155b156110a25733610335565b8360005a90508260005b818110156111ee57866001600160a01b0316631b45c86a8787848181106110d5576110d5611b2e565b90506020020160208101906110ea9190611be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b15801561114457600080fd5b505af1925050508015611155575060015b6111dc573d808015611183576040519150601f19603f3d011682016040523d82523d6000602084013e611188565b606091505b5080516000036111da5760405162461bcd60e51b815260206004820152600360248201527f4741530000000000000000000000000000000000000000000000000000000000604482015260640161036f565b505b806111e681611bc6565b9150506110ac565b50506001600160a01b0382161561087157366000602061120f83601f6119ab565b61121991906119c4565b9050610200611229600283611aca565b61123391906119c4565b61123e826006611ad9565b61124891906119ab565b61125290846119ab565b925033321461126057600091505b836001600160a01b031663e3db8a49335a61127b9087611af0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af11580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d9190611b11565b611311611396565b6001600160a01b03811661138d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161036f565b610c18816113f0565b6033546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166114d75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b61085f600054610100900460ff166115575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b61085f336113f0565b6001600160a01b0381168114610c1857600080fd5b60008083601f84011261158757600080fd5b50813567ffffffffffffffff81111561159f57600080fd5b6020830191508360208285010111156115b757600080fd5b9250929050565b6000806000806000608086880312156115d657600080fd5b85356115e181611560565b9450602086013567ffffffffffffffff8111156115fd57600080fd5b61160988828901611575565b909550935050604086013561161d81611560565b949793965091946060013592915050565b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b6020830191508360208260051b85010111156115b757600080fd5b6000806000806040858703121561168957600080fd5b843567ffffffffffffffff808211156116a157600080fd5b6116ad8883890161162e565b909650945060208701359150808211156116c657600080fd5b506116d38782880161162e565b95989497509550505050565b6000602082840312156116f157600080fd5b81356116fc81611560565b9392505050565b6000806000806000806060878903121561171c57600080fd5b863567ffffffffffffffff8082111561173457600080fd5b6117408a838b0161162e565b9098509650602089013591508082111561175957600080fd5b6117658a838b0161162e565b9096509450604089013591508082111561177e57600080fd5b5061178b89828a0161162e565b979a9699509497509295939492505050565b600080600080606085870312156117b357600080fd5b84356117be81611560565b935060208501356117ce81611560565b9250604085013567ffffffffffffffff8111156117ea57600080fd5b6116d38782880161162e565b6000806040838503121561180957600080fd5b82359150602083013561181b81611560565b809150509250929050565b60008060006040848603121561183b57600080fd5b833561184681611560565b9250602084013567ffffffffffffffff81111561186257600080fd5b61186e8682870161162e565b9497909650939450505050565b60008060008060008060006080888a03121561189657600080fd5b87356118a181611560565b9650602088013567ffffffffffffffff808211156118be57600080fd5b6118ca8b838c0161162e565b909850965060408a01359150808211156118e357600080fd5b6118ef8b838c0161162e565b909650945060608a013591508082111561190857600080fd5b506119158a828b0161162e565b989b979a50959850939692959293505050565b6000806000806060858703121561193e57600080fd5b843567ffffffffffffffff81111561195557600080fd5b61196187828801611575565b909550935050602085013561197581611560565b9396929550929360400135925050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156119be576119be611995565b92915050565b6000826119e157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611a21578160001904821115611a0757611a07611995565b80851615611a1457918102915b93841c93908002906119eb565b509250929050565b600082611a38575060016119be565b81611a45575060006119be565b8160018114611a5b5760028114611a6557611a81565b60019150506119be565b60ff841115611a7657611a76611995565b50506001821b6119be565b5060208310610133831016604e8410600b8410161715611aa4575081810a6119be565b611aae83836119e6565b8060001904821115611ac257611ac2611995565b029392505050565b60006116fc60ff841683611a29565b80820281158282048414176119be576119be611995565b818103818111156119be576119be611995565b8015158114610c1857600080fd5b600060208284031215611b2357600080fd5b81516116fc81611b03565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611b5657600080fd5b81356116fc81611b03565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b9657600080fd5b83018035915067ffffffffffffffff821115611bb157600080fd5b6020019150368190038213156115b757600080fd5b60006000198203611bd957611bd9611995565b5060010190565b600060208284031215611bf257600080fd5b813567ffffffffffffffff811681146116fc57600080fdfea26469706673582212209370c35a9402bf052c0cdf0814cdbeb274eb4aa4386444cb5b9c6b7b192a271564736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b5061001a33610068565b604051610026906100b8565b604051809103906000f080158015610042573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100c5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61212f80611e3b83390190565b611d67806100d46000396000f3fe60806040523480156200001157600080fd5b50600436106200007b5760003560e01c806389c716d1116200005657806389c716d114620000d35780638da5cb5b14620000ea578063f2fde38b14620000fc57600080fd5b80631cf89b4b14620000805780636f2ddd9314620000b3578063715018a614620000c7575b600080fd5b62000097620000913660046200052d565b62000113565b6040516001600160a01b03909116815260200160405180910390f35b60015462000097906001600160a01b031681565b620000d1620002fe565b005b620000d1620000e4366004620005c4565b62000316565b6000546001600160a01b031662000097565b620000d16200010d366004620005c4565b6200037f565b6040516000903390819083906200012a9062000511565b604051809103906000f08015801562000147573d6000803e3d6000fd5b506001546040519192506000916001600160a01b039091169083906200016d906200051f565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f080158015620001b0573d6000803e3d6000fd5b506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529192509083169063f2fde38b90602401600060405180830381600087803b1580156200021257600080fd5b505af115801562000227573d6000803e3d6000fd5b50506040517f77a24f360000000000000000000000000000000000000000000000000000000081526001600160a01b03841692506377a24f3691506200027890879087908c908c90600401620005e9565b600060405180830381600087803b1580156200029357600080fd5b505af1158015620002a8573d6000803e3d6000fd5b50506040516001600160a01b038581168252808716935087811692508416907f7a6fe39e62e2aeedf6430893f8ce67c6aa08c92d3c7d66c83706057ee178ee489060200160405180910390a49695505050505050565b6200030862000433565b620003146000620004a9565b565b6200032062000433565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040517f6eb26f176dd9180849dd4874d3530de0e5c1f62a6e6798d34e3abfc11f1db2cc90600090a150565b6200038962000433565b6001600160a01b03811662000425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6200043081620004a9565b50565b6000546001600160a01b0316331462000314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200041c565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61080b806200065483390190565b610ed38062000e5f83390190565b600080602083850312156200054157600080fd5b823567ffffffffffffffff808211156200055a57600080fd5b818501915085601f8301126200056f57600080fd5b8135818111156200057f57600080fd5b8660208260051b85010111156200059557600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114620005bf57600080fd5b919050565b600060208284031215620005d757600080fd5b620005e282620005a7565b9392505050565b6000606082016001600160a01b038088168452602081881681860152606060408601528286845260808601905087935060005b878110156200064557836200063186620005a7565b16825293820193908201906001016200061c565b50999850505050505050505056fe608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61078d8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610579565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee36600461059d565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610605565b6102c3565b34801561013057600080fd5b506100d161013f36600461059d565b61034b565b34801561015057600080fd5b506100d161015f366004610579565b61039a565b34801561017057600080fd5b506100a061017f366004610579565b610449565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106db565b949350505050565b610236610488565b61024060006104fc565b565b61024a610488565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb610488565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106f8565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b610353610488565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a2610488565b6001600160a01b03811661043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610446816104fc565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b03163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610434565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044657600080fd5b60006020828403121561058b57600080fd5b813561059681610564565b9392505050565b600080604083850312156105b057600080fd5b82356105bb81610564565b915060208301356105cb81610564565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561061a57600080fd5b833561062581610564565b9250602084013561063581610564565b9150604084013567ffffffffffffffff8082111561065257600080fd5b818601915086601f83011261066657600080fd5b813581811115610678576106786105d6565b604051601f8201601f19908116603f011681019083821181831017156106a0576106a06105d6565b816040528281528960208487010111156106b957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106ed57600080fd5b815161059681610564565b6001600160a01b038316815260006020604081840152835180604085015260005b8181101561073557858101830151858201606001528201610719565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b5f17b9b80290312697ad0c26141bee28c1a1e448364e9044054c3ec2b5708bd64736f6c63430008110033608060405260405162000ed338038062000ed3833981016040819052620000269162000487565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ba565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200023e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eac60279139620002f8565b9392505050565b60006200018060008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e8c83398151915260001b620003de60201b620001fa1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a81620003e160201b6200026a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b620003de60201b620001fa1760201c565b60606001600160a01b0384163b620003625760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001f1565b600080856001600160a01b0316856040516200037f919062000567565b600060405180830381855af49150503d8060008114620003bc576040519150601f19603f3d011682016040523d82523d6000602084013e620003c1565b606091505b509092509050620003d4828286620003f0565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620004015750816200014f565b825115620004125782518084602001fd5b8160405162461bcd60e51b8152600401620001f1919062000585565b80516001600160a01b03811681146200044657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200047e57818101518382015260200162000464565b50506000910152565b6000806000606084860312156200049d57600080fd5b620004a8846200042e565b9250620004b8602085016200042e565b60408501519092506001600160401b0380821115620004d657600080fd5b818601915086601f830112620004eb57600080fd5b8151818111156200050057620005006200044b565b604051601f8201601f19908116603f011681019083821181831017156200052b576200052b6200044b565b816040528281528960208487010111156200054557600080fd5b6200055883602083016020880162000461565b80955050505050509250925092565b600082516200057b81846020870162000461565b9190910192915050565b6020815260008251806020840152620005a681604085016020870162000461565b601f01601f19169190910160400192915050565b6108c280620005ca6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610736565b610128565b61006b6100a3366004610751565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610736565b6101fd565b34801561010557600080fd5b506100bd61021d565b610116610279565b610126610121610329565b610333565b565b610130610357565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061038a565b50565b61015a61010e565b61016d610357565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061038a915050565b505050565b6101bf61010e565b60006101d6610357565b6001600160a01b031633036101f2576101ed610329565b905090565b6101fa61010e565b90565b610205610357565b6001600160a01b0316330361015d5761015a816103b5565b6000610227610357565b6001600160a01b031633036101f2576101ed610357565b6060610263838360405180606001604052806027815260200161086660279139610409565b9392505050565b6001600160a01b03163b151590565b610281610357565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6104fd565b3660008037600080366000845af43d6000803e808015610352573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b61039383610525565b6000825111806103a05750805b156101bf576103af838361023e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103de610357565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610565565b60606001600160a01b0384163b6104885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610320565b600080856001600160a01b0316856040516104a391906107f8565b600060405180830381855af49150503d80600081146104de576040519150601f19603f3d011682016040523d82523d6000602084013e6104e3565b606091505b50915091506104f382828661063d565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61037b565b61052e81610676565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105e15760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610320565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060831561064c575081610263565b82511561065c5782518084602001fd5b8160405162461bcd60e51b81526004016103209190610814565b6001600160a01b0381163b6106f35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610320565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610604565b80356001600160a01b038116811461073157600080fd5b919050565b60006020828403121561074857600080fd5b6102638261071a565b60008060006040848603121561076657600080fd5b61076f8461071a565b9250602084013567ffffffffffffffff8082111561078c57600080fd5b818601915086601f8301126107a057600080fd5b8135818111156107af57600080fd5b8760208285010111156107c157600080fd5b6020830194508093505050509250925092565b60005b838110156107ef5781810151838201526020016107d7565b50506000910152565b6000825161080a8184602087016107d4565b9190910192915050565b60208152600082518060208401526108338160408501602087016107d4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c1888b421836e473bfc3e72d153dc5c76569ce769e37cfa444506490e142daa564736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220edf835d1aac43c320a46ecf7ea6c2caf47203f32d3b3237b063e326e131bc78664736f6c6343000811003360c0604052306080526202000060a05234801561001b57600080fd5b5060805160a0516120e061004f600039600081816105b3015281816111c201526115bb01526000610a8b01526120e06000f3fe6080604052600436106100f75760003560e01c80639ac2a0111161008a578063c179f1d911610059578063c179f1d91461029d578063ce1d571f146102b0578063d327821a146102c3578063f2fde38b146102e357600080fd5b80639ac2a0111461020d5780639be7bbd21461023d578063a158657c1461025d578063af1b9a071461027d57600080fd5b8063715018a6116100c6578063715018a61461019d57806372f45866146101b257806377a24f36146101c55780638da5cb5b146101e557600080fd5b8063097da1f8146101035780630a2435f814610118578063193c8edd146101385780633a7c721a1461017d57600080fd5b366100fe57005b600080fd5b610116610111366004611971565b610303565b005b34801561012457600080fd5b50610116610133366004611a26565b6106b9565b34801561014457600080fd5b50610168610153366004611a92565b60666020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561018957600080fd5b50610116610198366004611a26565b61083c565b3480156101a957600080fd5b50610116610986565b6101166101c0366004611ab6565b61099a565b3480156101d157600080fd5b506101166101e0366004611b50565b6109b2565b3480156101f157600080fd5b506033546040516001600160a01b039091168152602001610174565b34801561021957600080fd5b50610168610228366004611a92565b60656020526000908152604090205460ff1681565b34801561024957600080fd5b50610116610258366004611a92565b610cc9565b34801561026957600080fd5b50610116610278366004611ba9565b610d54565b34801561028957600080fd5b50610116610298366004611bd9565b610df9565b6101166102ab366004611c2e565b610e06565b6101166102be366004611cdb565b6112ca565b3480156102cf57600080fd5b506101166102de366004611b50565b6112de565b3480156102ef57600080fd5b506101166102fe366004611a92565b6116bc565b3360009081526065602052604090205460ff1615801561032e57506033546001600160a01b03163314155b1561037857335b6040517ff26aea8b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b846000805a905085156103dc576001600160a01b0385163b6103dc5760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b6103e585610cc9565b6000856001600160a01b0316858989604051610402929190611d38565b60006040518083038185875af1925050503d806000811461043f576040519150601f19603f3d011682016040523d82523d6000602084013e610444565b606091505b505090508061045a576040513d806000833e8082fd5b506001600160a01b038316156106af57366000602061047a83601f611d5e565b6104849190611d77565b9050610200610494600283611e7d565b61049e9190611d77565b6104a9826006611e8c565b6104b39190611d5e565b6104bd9084611d5e565b92503332146104cf5760009150610602565b6001600160a01b0384161561060257836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561053d57506040513d6000823e601f3d908101601f1916820160405261053a9190810190611eb9565b60015b1561060257805115610600576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ad9190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516105de9190611e8c565b6105e89190611e8c565b6105f29190611d77565b6105fc9086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a61061d9087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab9190611fb1565b5050505b5050505050505050565b6106c1611749565b8281146106eb5760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b67ffffffffffffffff81168411156108355782828267ffffffffffffffff1681811061071c5761071c611fce565b90506020020160208101906107319190611fe4565b6065600087878567ffffffffffffffff1681811061075157610751611fce565b90506020020160208101906107669190611a92565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055848467ffffffffffffffff83168181106107aa576107aa611fce565b90506020020160208101906107bf9190611a92565b6001600160a01b03167f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea284848467ffffffffffffffff1681811061080557610805611fce565b905060200201602081019061081a9190611fe4565b604051901515815260200160405180910390a26001016106ee565b5050505050565b610844611749565b82811461086e5760405163088253c360e11b8152600481018490526024810182905260440161036f565b60005b838110156108355782828281811061088b5761088b611fce565b90506020020160208101906108a09190611fe4565b606660008787858181106108b6576108b6611fce565b90506020020160208101906108cb9190611a92565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905584848281811061090557610905611fce565b905060200201602081019061091a9190611a92565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a484848481811061095657610956611fce565b905060200201602081019061096b9190611fe4565b604051901515815260200160405180910390a2600101610871565b61098e611749565b61099860006117a3565b565b6109aa6000878787878787610e06565b505050505050565b600054610100900460ff16158080156109d25750600054600160ff909116105b806109ec5750303b1580156109ec575060005460ff166001145b610a5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036f565b6000805460ff191660011790558015610a81576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b1f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161036f565b610b2761180d565b610b30846116bc565b6001600160a01b038516600081815260656020908152604091829020805460ff1916600190811790915591519182527f9fdbc2d48b8a0db2f62663bf9312ad02f5b1f6414ad600b55a247d09aeec3ea2910160405180910390a260005b67ffffffffffffffff8116831115610c7c5760016066600086868567ffffffffffffffff16818110610bc157610bc1611fce565b9050602002016020810190610bd69190611a92565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838367ffffffffffffffff8316818110610c1a57610c1a611fce565b9050602002016020810190610c2f9190611a92565b6001600160a01b03167fab063fe575c4df359aaf3733bcf10706bacfdd24557e670a2c1cba126ae4d8a46001604051610c6c911515815260200190565b60405180910390a2600101610b8d565b508015610835576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6001600160a01b03811660009081526066602052604090205460ff16158015610cfd57506033546001600160a01b03163314155b15610d51576033546040517f41fc6f8a0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152336024820152908216604482015260640161036f565b50565b610d5c611749565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610da9576040519150601f19603f3d011682016040523d82523d6000602084013e610dae565b606091505b5050905080610df4576040517f7edbb4980000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161036f565b505050565b610df460008484846112de565b3360009081526065602052604090205460ff16158015610e3157506033546001600160a01b03163314155b15610e3c5733610335565b866000805a905087868114610e6e5760405163088253c360e11b8152600481018290526024810188905260440161036f565b808514610e985760405163088253c360e11b8152600481018290526024810186905260440161036f565b60005b818110156110685760008b8b83818110610eb757610eb7611fce565b9050602002810190610ec99190612001565b90501115610f5657610f0a898983818110610ee657610ee6611fce565b9050602002016020810190610efb9190611a92565b6001600160a01b03163b151590565b610f565760405162461bcd60e51b815260206004820152600f60248201527f4e4f5f434f44455f41545f414444520000000000000000000000000000000000604482015260640161036f565b610f80898983818110610f6b57610f6b611fce565b90506020020160208101906102589190611a92565b6000898983818110610f9457610f94611fce565b9050602002016020810190610fa99190611a92565b6001600160a01b0316888884818110610fc457610fc4611fce565b905060200201358d8d85818110610fdd57610fdd611fce565b9050602002810190610fef9190612001565b604051610ffd929190611d38565b60006040518083038185875af1925050503d806000811461103a576040519150601f19603f3d011682016040523d82523d6000602084013e61103f565b606091505b5050905080611055576040513d806000833e8082fd5b508061106081612066565b915050610e9b565b50506001600160a01b038316156112be57366000602061108983601f611d5e565b6110939190611d77565b90506102006110a3600283611e7d565b6110ad9190611d77565b6110b8826006611e8c565b6110c29190611d5e565b6110cc9084611d5e565b92503332146110de5760009150611211565b6001600160a01b0384161561121157836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561114c57506040513d6000823e601f3d908101601f191682016040526111499190810190611eb9565b60015b156112115780511561120f576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516111ed9190611e8c565b6111f79190611e8c565b6112019190611d77565b61120b9086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a61122c9087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af1158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190611fb1565b5050505b50505050505050505050565b6112d8600085858585610303565b50505050565b3360009081526065602052604090205460ff1615801561130957506033546001600160a01b03163314155b156113145733610335565b836000805a90508360005b8181101561146157876001600160a01b0316631b45c86a88888481811061134857611348611fce565b905060200201602081019061135d9190612080565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815267ffffffffffffffff9091166004820152602401600060405180830381600087803b1580156113b757600080fd5b505af19250505080156113c8575060015b61144f573d8080156113f6576040519150601f19603f3d011682016040523d82523d6000602084013e6113fb565b606091505b50805160000361144d5760405162461bcd60e51b815260206004820152600360248201527f4741530000000000000000000000000000000000000000000000000000000000604482015260640161036f565b505b8061145981612066565b91505061131f565b50506001600160a01b038316156116b357366000602061148283601f611d5e565b61148c9190611d77565b905061020061149c600283611e7d565b6114a69190611d77565b6114b1826006611e8c565b6114bb9190611d5e565b6114c59084611d5e565b92503332146114d7576000915061160a565b6001600160a01b0384161561160a57836001600160a01b031663e83a2d826040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561154557506040513d6000823e601f3d908101601f191682016040526115429190810190611eb9565b60015b1561160a57805115611608576000856001600160a01b0316631f6d6ef76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b59190611f77565b905048817f000000000000000000000000000000000000000000000000000000000000000084516115e69190611e8c565b6115f09190611e8c565b6115fa9190611d77565b6116049086611d5e565b9450505b505b846001600160a01b031663e3db8a49335a6116259087611f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604481018590526064016020604051808303816000875af115801561168f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112be9190611fb1565b50505050505050565b6116c4611749565b6001600160a01b0381166117405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161036f565b610d51816117a3565b6033546001600160a01b031633146109985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036f565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661188a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b610998600054610100900460ff1661190a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036f565b610998336117a3565b6001600160a01b0381168114610d5157600080fd5b60008083601f84011261193a57600080fd5b50813567ffffffffffffffff81111561195257600080fd5b60208301915083602082850101111561196a57600080fd5b9250929050565b60008060008060006080868803121561198957600080fd5b853561199481611913565b9450602086013567ffffffffffffffff8111156119b057600080fd5b6119bc88828901611928565b90955093505060408601356119d081611913565b949793965091946060013592915050565b60008083601f8401126119f357600080fd5b50813567ffffffffffffffff811115611a0b57600080fd5b6020830191508360208260051b850101111561196a57600080fd5b60008060008060408587031215611a3c57600080fd5b843567ffffffffffffffff80821115611a5457600080fd5b611a60888389016119e1565b90965094506020870135915080821115611a7957600080fd5b50611a86878288016119e1565b95989497509550505050565b600060208284031215611aa457600080fd5b8135611aaf81611913565b9392505050565b60008060008060008060608789031215611acf57600080fd5b863567ffffffffffffffff80821115611ae757600080fd5b611af38a838b016119e1565b90985096506020890135915080821115611b0c57600080fd5b611b188a838b016119e1565b90965094506040890135915080821115611b3157600080fd5b50611b3e89828a016119e1565b979a9699509497509295939492505050565b60008060008060608587031215611b6657600080fd5b8435611b7181611913565b93506020850135611b8181611913565b9250604085013567ffffffffffffffff811115611b9d57600080fd5b611a86878288016119e1565b60008060408385031215611bbc57600080fd5b823591506020830135611bce81611913565b809150509250929050565b600080600060408486031215611bee57600080fd5b8335611bf981611913565b9250602084013567ffffffffffffffff811115611c1557600080fd5b611c21868287016119e1565b9497909650939450505050565b60008060008060008060006080888a031215611c4957600080fd5b8735611c5481611913565b9650602088013567ffffffffffffffff80821115611c7157600080fd5b611c7d8b838c016119e1565b909850965060408a0135915080821115611c9657600080fd5b611ca28b838c016119e1565b909650945060608a0135915080821115611cbb57600080fd5b50611cc88a828b016119e1565b989b979a50959850939692959293505050565b60008060008060608587031215611cf157600080fd5b843567ffffffffffffffff811115611d0857600080fd5b611d1487828801611928565b9095509350506020850135611d2881611913565b9396929550929360400135925050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611d7157611d71611d48565b92915050565b600082611d9457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611dd4578160001904821115611dba57611dba611d48565b80851615611dc757918102915b93841c9390800290611d9e565b509250929050565b600082611deb57506001611d71565b81611df857506000611d71565b8160018114611e0e5760028114611e1857611e34565b6001915050611d71565b60ff841115611e2957611e29611d48565b50506001821b611d71565b5060208310610133831016604e8410600b8410161715611e57575081810a611d71565b611e618383611d99565b8060001904821115611e7557611e75611d48565b029392505050565b6000611aaf60ff841683611ddc565b8082028115828204841417611d7157611d71611d48565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ecc57600080fd5b825167ffffffffffffffff80821115611ee457600080fd5b818501915085601f830112611ef857600080fd5b815181811115611f0a57611f0a611ea3565b8060051b604051601f19603f83011681018181108582111715611f2f57611f2f611ea3565b604052918252848201925083810185019188831115611f4d57600080fd5b938501935b82851015611f6b57845184529385019392850192611f52565b98975050505050505050565b600060208284031215611f8957600080fd5b5051919050565b81810381811115611d7157611d71611d48565b8015158114610d5157600080fd5b600060208284031215611fc357600080fd5b8151611aaf81611fa3565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ff657600080fd5b8135611aaf81611fa3565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261203657600080fd5b83018035915067ffffffffffffffff82111561205157600080fd5b60200191503681900382131561196a57600080fd5b6000600019820361207957612079611d48565b5060010190565b60006020828403121561209257600080fd5b813567ffffffffffffffff81168114611aaf57600080fdfea26469706673582212208ec068c31984a459a4dc66b5cfd749be16af0e7ca308f51c1b9e61c62c98e4db64736f6c63430008110033", } // ValidatorWalletCreatorABI is the input ABI used to generate the binding from. diff --git a/solgen/go/stategen/stategen.go b/solgen/go/stategen/stategen.go index 9e4e8c7bc..18c34bee0 100644 --- a/solgen/go/stategen/stategen.go +++ b/solgen/go/stategen/stategen.go @@ -32,7 +32,7 @@ var ( // DeserializeMetaData contains all meta data concerning the Deserialize contract. var DeserializeMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dff3c34a7d1ef24c47d1f8e8a7073251e621887dcb5e75b7b346ca806906e57b64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069e1712ec42668bc2f5693362f9cd23756dc8ced8778475190b4cbc61177c48764736f6c63430008110033", } // DeserializeABI is the input ABI used to generate the binding from. @@ -205,7 +205,7 @@ func (_Deserialize *DeserializeTransactorRaw) Transact(opts *bind.TransactOpts, // GlobalStateLibMetaData contains all meta data concerning the GlobalStateLib contract. var GlobalStateLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209055400a8cd8aeb2319aa9920d498359277b54ccdbe4b15da2351e73699cef2664736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d98fed73ef0a1f84db8e72e67fc1d858690396e7564a4490c47cda1449b533d064736f6c63430008110033", } // GlobalStateLibABI is the input ABI used to generate the binding from. @@ -378,7 +378,7 @@ func (_GlobalStateLib *GlobalStateLibTransactorRaw) Transact(opts *bind.Transact // InstructionsMetaData contains all meta data concerning the Instructions contract. var InstructionsMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220be6777b2f67e89eb017575060a83fa93e42d63180773d5f409680a291a522c5564736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207567c902b1841b1dd6bc9a2bcb05f8fa87785974d1e17dd1898e05756f89f71564736f6c63430008110033", } // InstructionsABI is the input ABI used to generate the binding from. @@ -551,7 +551,7 @@ func (_Instructions *InstructionsTransactorRaw) Transact(opts *bind.TransactOpts // MachineLibMetaData contains all meta data concerning the MachineLib contract. var MachineLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202fa6b9edbf7460862f1e3684d4c7c5d75397fa1872c81bcacc8c2841992cedbf64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220429587a60fc965d36c300d315187eb48508f715a5eb82a168d7cc9ab2a07bbcf64736f6c63430008110033", } // MachineLibABI is the input ABI used to generate the binding from. @@ -724,7 +724,7 @@ func (_MachineLib *MachineLibTransactorRaw) Transact(opts *bind.TransactOpts, me // MerkleProofLibMetaData contains all meta data concerning the MerkleProofLib contract. var MerkleProofLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122036614e5cac0a4df8bbcd50c73c0b1b4ba56f31c8dcee78c46a1e2d371f8d435564736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a4efd863927f057cb645f9177078336a5024c0b8662f55aa56a0f2516715098864736f6c63430008110033", } // MerkleProofLibABI is the input ABI used to generate the binding from. @@ -897,7 +897,7 @@ func (_MerkleProofLib *MerkleProofLibTransactorRaw) Transact(opts *bind.Transact // ModuleLibMetaData contains all meta data concerning the ModuleLib contract. var ModuleLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122002e341cfc3ee108b2f0a399e4dc3307fe261cd643459a0730ff381c85bdc5c1864736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209618a9cee94d64889e5b3796adb0f066f1efa46e0c2801e8f865ea8b07d250eb64736f6c63430008110033", } // ModuleLibABI is the input ABI used to generate the binding from. @@ -1070,7 +1070,7 @@ func (_ModuleLib *ModuleLibTransactorRaw) Transact(opts *bind.TransactOpts, meth // ModuleMemoryCompactLibMetaData contains all meta data concerning the ModuleMemoryCompactLib contract. var ModuleMemoryCompactLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122043941c0e703138d54a507818ae810844fc6748ff0523e82316f54887e7b0c51164736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209b3f783462018ab63c3cf93540eab2692b1748a4a0ad3515dd3a13481d4a105464736f6c63430008110033", } // ModuleMemoryCompactLibABI is the input ABI used to generate the binding from. @@ -1243,7 +1243,7 @@ func (_ModuleMemoryCompactLib *ModuleMemoryCompactLibTransactorRaw) Transact(opt // ModuleMemoryLibMetaData contains all meta data concerning the ModuleMemoryLib contract. var ModuleMemoryLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d563b78ebe91f3247b55d28aa50277ff3e79cfb06fc854dc57ee15f9cf572aee64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122053e030ed925a5a6b1a1570cf60b03f7cd499b1efdcc5ff48cb205ca3883edd9864736f6c63430008110033", } // ModuleMemoryLibABI is the input ABI used to generate the binding from. @@ -1416,7 +1416,7 @@ func (_ModuleMemoryLib *ModuleMemoryLibTransactorRaw) Transact(opts *bind.Transa // PcArrayLibMetaData contains all meta data concerning the PcArrayLib contract. var PcArrayLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fc0ff68454f60baa7f6495a9d471d3fa292a85c5eeb6162a388f1aea0a3b17b964736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e3dc270b6b90bfde6651dcd425c63985ef40e8fd37e14a5c513d95ce2d8d927364736f6c63430008110033", } // PcArrayLibABI is the input ABI used to generate the binding from. @@ -1589,7 +1589,7 @@ func (_PcArrayLib *PcArrayLibTransactorRaw) Transact(opts *bind.TransactOpts, me // StackFrameLibMetaData contains all meta data concerning the StackFrameLib contract. var StackFrameLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220243574188b7a26c30bb5e679f186ed2d172948e7444dd94e5cd46114c3661a3c64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203f8ac855c4ae365d29df964a3a703385c0c248f080c216ecb832ab774b4f9dce64736f6c63430008110033", } // StackFrameLibABI is the input ABI used to generate the binding from. @@ -1762,7 +1762,7 @@ func (_StackFrameLib *StackFrameLibTransactorRaw) Transact(opts *bind.TransactOp // ValueArrayLibMetaData contains all meta data concerning the ValueArrayLib contract. var ValueArrayLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bd47d0f241bed2cda2b804be29f633242caca030d7203afa8b5ad21a34251ef464736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220937b82a9610181a406abb82ca46d06598397cc7cdb7573f47f9f7e9a6d06143364736f6c63430008110033", } // ValueArrayLibABI is the input ABI used to generate the binding from. @@ -1935,7 +1935,7 @@ func (_ValueArrayLib *ValueArrayLibTransactorRaw) Transact(opts *bind.TransactOp // ValueLibMetaData contains all meta data concerning the ValueLib contract. var ValueLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206e8af1e65a78e7f297ba48b3b7ee3d07e5a289af1cdca3511b7ba0356f3188ef64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208baecf25203fd437c2b3ce2fc1c4cf2981086079bce4c89f4ebeb347fc166f9964736f6c63430008110033", } // ValueLibABI is the input ABI used to generate the binding from. @@ -2108,7 +2108,7 @@ func (_ValueLib *ValueLibTransactorRaw) Transact(opts *bind.TransactOpts, method // ValueStackLibMetaData contains all meta data concerning the ValueStackLib contract. var ValueStackLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209088e2b855fa5fab4115385d0ed33443580429eaf6d2e24c5820232048d98b2c64736f6c63430008110033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220efba79b01bb02009583feecb889b2944a415c5e4fd1da85150fe7f497b0f9d2e64736f6c63430008110033", } // ValueStackLibABI is the input ABI used to generate the binding from. diff --git a/solgen/go/test_helpersgen/test_helpersgen.go b/solgen/go/test_helpersgen/test_helpersgen.go index c64b85437..457014930 100644 --- a/solgen/go/test_helpersgen/test_helpersgen.go +++ b/solgen/go/test_helpersgen/test_helpersgen.go @@ -31,8 +31,8 @@ var ( // BridgeTesterMetaData contains all meta data concerning the BridgeTester contract. var BridgeTesterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b50608051611624610030600039600061095901526116246000f3fe6080604052600436106101785760003560e01c80639e5d4c49116100cb578063cee3d7281161007f578063e77145f411610059578063e77145f414610234578063eca067ad14610464578063ee35f3271461047957600080fd5b8063cee3d72814610404578063d5719dc214610424578063e76f5c8d1461044457600080fd5b8063ae60bd13116100b0578063ae60bd1314610387578063c4d66de8146103c4578063cb23bcb5146103e457600080fd5b80639e5d4c4914610344578063ab5d89431461037257600080fd5b80635fca4a161161012d5780638db5993b116101075780638db5993b146102d9578063919cc706146102ec578063945e11471461030c57600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028f57600080fd5b8063413b35bd1161015e578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a857600080fd5b3661017f57005b600080fd5b34801561019057600080fd5b506009545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c3366004611325565b610499565b3480156101d457600080fd5b506102046101e3366004611356565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f36600461137a565b6104ba565b005b34801561024257600080fd5b50610234610251366004611356565b6107c0565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b506101956102873660046113b8565b600092915050565b34801561029b57600080fd5b506102b96102aa3660046113e4565b50600093849350839250829150565b60408051948552602085019390935291830152606082015260800161019f565b6101956102e7366004611416565b6108eb565b3480156102f857600080fd5b50610234610307366004611356565b61094f565b34801561031857600080fd5b5061032c610327366004611325565b610aae565b6040516001600160a01b03909116815260200161019f565b34801561035057600080fd5b5061036461035f36600461145d565b610ad8565b60405161019f9291906114e6565b34801561037e57600080fd5b5061032c610c85565b34801561039357600080fd5b506102046103a2366004611356565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103d057600080fd5b506102346103df366004611356565b610cd0565b3480156103f057600080fd5b5060065461032c906001600160a01b031681565b34801561041057600080fd5b5061023461041f36600461137a565b610e3c565b34801561043057600080fd5b5061019561043f366004611325565b61113d565b34801561045057600080fd5b5061032c61045f366004611325565b61114d565b34801561047057600080fd5b50600854610195565b34801561048557600080fd5b5060075461032c906001600160a01b031681565b600981815481106104a957600080fd5b600091825260209091200154905081565b6006546001600160a01b031633146105895760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053a919061153e565b9050336001600160a01b0382161461058757600654604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a2821515811515036105f55750505050565b821561069057604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107b9565b600380546106a09060019061155b565b815481106106b0576106b061157c565b6000918252602090912001548254600380546001600160a01b039093169290919081106106df576106df61157c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061072d5761072d61157c565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600380548061076357610763611592565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6006546001600160a01b0316331461088a5760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610840919061153e565b9050336001600160a01b0382161461088857600654604051630739600760e01b81523360048201526001600160a01b039182166024820152908216604482015260640161057e565b505b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b3360009081526001602081905260408220015460ff16610939576040517fb6c60ea300000000000000000000000000000000000000000000000000000000815233600482015260240161057e565b61094784844342488761115d565b949350505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161057e565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610a7d576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038216602482015260440161057e565b50506006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60048181548110610abe57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610b29576040517f32ea82ab00000000000000000000000000000000000000000000000000000000815233600482015260240161057e565b8215801590610b4057506001600160a01b0386163b155b15610b82576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260240161057e565b6005805473ffffffffffffffffffffffffffffffffffffffff19811633179091556040516001600160a01b03918216918816908790610bc490889088906115a8565b60006040518083038185875af1925050503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b506005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610c73908a908a908a906115b8565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000101610cc05750600090565b506005546001600160a01b031690565b600054610100900460ff1615808015610cf05750600054600160ff909116105b80610d0a5750303b158015610d0a575060005460ff166001145b610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161057e565b6000805460ff191660011790558015610db9576000805461ff0019166101001790555b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556006805490911691841691909117905580156107bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6006546001600160a01b03163314610f065760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebc919061153e565b9050336001600160a01b03821614610f0457600654604051630739600760e01b81523360048201526001600160a01b039182166024820152908216604482015260640161057e565b505b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a282151581151503610f735750505050565b821561100f57604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107b9565b6004805461101f9060019061155b565b8154811061102f5761102f61157c565b6000918252602090912001548254600480546001600160a01b0390931692909190811061105e5761105e61157c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600001546002600060048560000154815481106110ac576110ac61157c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806110e2576110e2611592565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600881815481106104a957600080fd5b60038181548110610abe57600080fd5b600854604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a59092019092528051910120600091906000821561125a57600861123c60018561155b565b8154811061124c5761124c61157c565b906000526020600020015490505b600861126682846112f6565b8154600181018355600092835260209283902001556040805133815260ff8d16928101929092526001600160a01b038b1682820152606082018790526080820188905267ffffffffffffffff891660a083015251829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe19181900360c00190a3509098975050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b60006020828403121561133757600080fd5b5035919050565b6001600160a01b038116811461135357600080fd5b50565b60006020828403121561136857600080fd5b81356113738161133e565b9392505050565b6000806040838503121561138d57600080fd5b82356113988161133e565b9150602083013580151581146113ad57600080fd5b809150509250929050565b600080604083850312156113cb57600080fd5b82356113d68161133e565b946020939093013593505050565b600080600080608085870312156113fa57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561142b57600080fd5b833560ff8116811461143c57600080fd5b9250602084013561144c8161133e565b929592945050506040919091013590565b6000806000806060858703121561147357600080fd5b843561147e8161133e565b935060208501359250604085013567ffffffffffffffff808211156114a257600080fd5b818701915087601f8301126114b657600080fd5b8135818111156114c557600080fd5b8860208285010111156114d757600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b8181101561151c57858101830151858201606001528201611500565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561155057600080fd5b81516113738161133e565b8181038181111561131f57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea264697066735822122055c39ab353ad75123f03831d624d3eb57f2e9986e10f87a095b0bbcd7e18bff264736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotDelayedInbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NotOutbox\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotRollupOrOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rollup\",\"type\":\"address\"}],\"name\":\"RollupUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptFundsFromOldBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOwnable\",\"name\":\"_rollup\",\"type\":\"address\"}],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5060805161151b61002d6000396000505061151b6000f3fe6080604052600436106101785760003560e01c80639e5d4c49116100cb578063cee3d7281161007f578063e77145f411610059578063e77145f414610234578063eca067ad1461048e578063ee35f327146104a357600080fd5b8063cee3d7281461042e578063d5719dc21461044e578063e76f5c8d1461046e57600080fd5b8063ae60bd13116100b0578063ae60bd13146103b1578063c4d66de8146103ee578063cb23bcb51461040e57600080fd5b80639e5d4c491461036e578063ab5d89431461039c57600080fd5b80635fca4a161161012d5780638db5993b116101075780638db5993b146102d9578063919cc706146102ec578063945e11471461033657600080fd5b80635fca4a16146102565780637a88b1071461026c57806386598a561461028f57600080fd5b8063413b35bd1161015e578063413b35bd146101c857806347fb24c5146102145780634f61f8501461023657600080fd5b806284120c1461018457806316bf5579146101a857600080fd5b3661017f57005b600080fd5b34801561019057600080fd5b506009545b6040519081526020015b60405180910390f35b3480156101b457600080fd5b506101956101c336600461121c565b6104c3565b3480156101d457600080fd5b506102046101e336600461124d565b6001600160a01b031660009081526002602052604090206001015460ff1690565b604051901515815260200161019f565b34801561022057600080fd5b5061023461022f366004611271565b6104e4565b005b34801561024257600080fd5b5061023461025136600461124d565b610800565b34801561026257600080fd5b50610195600a5481565b34801561027857600080fd5b506101956102873660046112af565b600092915050565b34801561029b57600080fd5b506102b96102aa3660046112db565b50600093849350839250829150565b60408051948552602085019390935291830152606082015260800161019f565b6101956102e736600461130d565b61092b565b3480156102f857600080fd5b5061023461030736600461124d565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b34801561034257600080fd5b5061035661035136600461121c565b61098f565b6040516001600160a01b03909116815260200161019f565b34801561037a57600080fd5b5061038e610389366004611354565b6109b9565b60405161019f9291906113dd565b3480156103a857600080fd5b50610356610b66565b3480156103bd57600080fd5b506102046103cc36600461124d565b6001600160a01b03166000908152600160208190526040909120015460ff1690565b3480156103fa57600080fd5b5061023461040936600461124d565b610bb1565b34801561041a57600080fd5b50600654610356906001600160a01b031681565b34801561043a57600080fd5b50610234610449366004611271565b610d1d565b34801561045a57600080fd5b5061019561046936600461121c565b611034565b34801561047a57600080fd5b5061035661048936600461121c565b611044565b34801561049a57600080fd5b50600854610195565b3480156104af57600080fd5b50600754610356906001600160a01b031681565b600981815481106104d357600080fd5b600091825260209091200154905081565b6006546001600160a01b031633146105b35760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105649190611435565b9050336001600160a01b038216146105b157600654604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064015b60405180910390fd5b505b6001600160a01b0382166000818152600160208181526040928390209182015492518515158152919360ff90931692917f6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521910160405180910390a28080156106185750825b8061062a57508015801561062a575082155b156106355750505050565b82156106d057604080518082018252600380548252600160208084018281526001600160a01b038a166000818152928490529582209451855551938201805460ff1916941515949094179093558154908101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107f9565b600380546106e090600190611452565b815481106106f0576106f0611473565b6000918252602090912001548254600380546001600160a01b0390931692909190811061071f5761071f611473565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816000015460016000600385600001548154811061076d5761076d611473565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560038054806107a3576107a3611489565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526001908190526040822091825501805460ff191690555b50505b5050565b6006546001600160a01b031633146108ca5760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190611435565b9050336001600160a01b038216146108c857600654604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105a8565b505b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a9060200160405180910390a150565b3360009081526001602081905260408220015460ff16610979576040517fb6c60ea30000000000000000000000000000000000000000000000000000000081523360048201526024016105a8565b610987848443424887611054565b949350505050565b6004818154811061099f57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526002602052604081206001015460609060ff16610a0a576040517f32ea82ab0000000000000000000000000000000000000000000000000000000081523360048201526024016105a8565b8215801590610a2157506001600160a01b0386163b155b15610a63576040517fb5cf5b8f0000000000000000000000000000000000000000000000000000000081526001600160a01b03871660048201526024016105a8565b6005805473ffffffffffffffffffffffffffffffffffffffff19811633179091556040516001600160a01b03918216918816908790610aa5908890889061149f565b60006040518083038185875af1925050503d8060008114610ae2576040519150601f19603f3d011682016040523d82523d6000602084013e610ae7565b606091505b506005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038581169190911790915560405192955090935088169033907f2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d46690610b54908a908a908a906114af565b60405180910390a35094509492505050565b6005546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000101610ba15750600090565b506005546001600160a01b031690565b600054610100900460ff1615808015610bd15750600054600160ff909116105b80610beb5750303b158015610beb575060005460ff166001145b610c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105a8565b6000805460ff191660011790558015610c9a576000805461ff0019166101001790555b600580546001600160a01b0373ffffffffffffffffffffffffffffffffffffffff1991821681179092556006805490911691841691909117905580156107fc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6006546001600160a01b03163314610de75760065460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d9190611435565b9050336001600160a01b03821614610de557600654604051630739600760e01b81523360048201526001600160a01b03918216602482015290821660448201526064016105a8565b505b6001600160a01b038216600081815260026020908152604091829020600181015492518515158152909360ff90931692917f49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa910160405180910390a2808015610e4d5750825b80610e5f575080158015610e5f575082155b15610e6a5750505050565b8215610f0657604080518082018252600480548252600160208084018281526001600160a01b038a16600081815260029093529582209451855551938201805460ff1916941515949094179093558154908101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff191690911790556107f9565b60048054610f1690600190611452565b81548110610f2657610f26611473565b6000918252602090912001548254600480546001600160a01b03909316929091908110610f5557610f55611473565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160000154600260006004856000015481548110610fa357610fa3611473565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610fd957610fd9611489565b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff191690559092019092556001600160a01b03861682526002905260408120908155600101805460ff1916905550505050565b600881815481106104d357600080fd5b6003818154811061099f57600080fd5b600854604080517fff0000000000000000000000000000000000000000000000000000000000000060f88a901b166020808301919091527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b1660218301527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b8216603585015288901b16603d830152604582018490526065820186905260858083018690528351808403909101815260a590920190925280519101206000919060008215611151576008611133600185611452565b8154811061114357611143611473565b906000526020600020015490505b600861115d82846111ed565b8154600181018355600092835260209283902001556040805133815260ff8d16928101929092526001600160a01b038b1682820152606082018790526080820188905267ffffffffffffffff891660a083015251829185917f5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe19181900360c00190a3509098975050505050505050565b604080516020808201859052818301849052825180830384018152606090920190925280519101205b92915050565b60006020828403121561122e57600080fd5b5035919050565b6001600160a01b038116811461124a57600080fd5b50565b60006020828403121561125f57600080fd5b813561126a81611235565b9392505050565b6000806040838503121561128457600080fd5b823561128f81611235565b9150602083013580151581146112a457600080fd5b809150509250929050565b600080604083850312156112c257600080fd5b82356112cd81611235565b946020939093013593505050565b600080600080608085870312156112f157600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561132257600080fd5b833560ff8116811461133357600080fd5b9250602084013561134381611235565b929592945050506040919091013590565b6000806000806060858703121561136a57600080fd5b843561137581611235565b935060208501359250604085013567ffffffffffffffff8082111561139957600080fd5b818701915087601f8301126113ad57600080fd5b8135818111156113bc57600080fd5b8860208285010111156113ce57600080fd5b95989497505060200194505050565b821515815260006020604081840152835180604085015260005b81811015611413578581018301518582016060015282016113f7565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561144757600080fd5b815161126a81611235565b8181038181111561121657634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b8183823760009101908152919050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220f9eac144052cfa31a65ec1c13a0e39703a67178b55fea7f07fd4e02c1fc5866664736f6c63430008110033", } // BridgeTesterABI is the input ABI used to generate the binding from. @@ -1543,6 +1543,140 @@ func (_BridgeTester *BridgeTesterFilterer) ParseOutboxToggle(log types.Log) (*Br return event, nil } +// BridgeTesterRollupUpdatedIterator is returned from FilterRollupUpdated and is used to iterate over the raw logs and unpacked data for RollupUpdated events raised by the BridgeTester contract. +type BridgeTesterRollupUpdatedIterator struct { + Event *BridgeTesterRollupUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BridgeTesterRollupUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BridgeTesterRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BridgeTesterRollupUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BridgeTesterRollupUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BridgeTesterRollupUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BridgeTesterRollupUpdated represents a RollupUpdated event raised by the BridgeTester contract. +type BridgeTesterRollupUpdated struct { + Rollup common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupUpdated is a free log retrieval operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeTester *BridgeTesterFilterer) FilterRollupUpdated(opts *bind.FilterOpts) (*BridgeTesterRollupUpdatedIterator, error) { + + logs, sub, err := _BridgeTester.contract.FilterLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return &BridgeTesterRollupUpdatedIterator{contract: _BridgeTester.contract, event: "RollupUpdated", logs: logs, sub: sub}, nil +} + +// WatchRollupUpdated is a free log subscription operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeTester *BridgeTesterFilterer) WatchRollupUpdated(opts *bind.WatchOpts, sink chan<- *BridgeTesterRollupUpdated) (event.Subscription, error) { + + logs, sub, err := _BridgeTester.contract.WatchLogs(opts, "RollupUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BridgeTesterRollupUpdated) + if err := _BridgeTester.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupUpdated is a log parse operation binding the contract event 0xae1f5aa15f6ff844896347ceca2a3c24c8d3a27785efdeacd581a0a95172784a. +// +// Solidity: event RollupUpdated(address rollup) +func (_BridgeTester *BridgeTesterFilterer) ParseRollupUpdated(log types.Log) (*BridgeTesterRollupUpdated, error) { + event := new(BridgeTesterRollupUpdated) + if err := _BridgeTester.contract.UnpackLog(event, "RollupUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // BridgeTesterSequencerInboxUpdatedIterator is returned from FilterSequencerInboxUpdated and is used to iterate over the raw logs and unpacked data for SequencerInboxUpdated events raised by the BridgeTester contract. type BridgeTesterSequencerInboxUpdatedIterator struct { Event *BridgeTesterSequencerInboxUpdated // Event containing the contract specifics and raw log @@ -1680,7 +1814,7 @@ func (_BridgeTester *BridgeTesterFilterer) ParseSequencerInboxUpdated(log types. // CryptographyPrimitivesTesterMetaData contains all meta data concerning the CryptographyPrimitivesTester contract. var CryptographyPrimitivesTesterMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint256[25]\",\"name\":\"input\",\"type\":\"uint256[25]\"}],\"name\":\"keccakF\",\"outputs\":[{\"internalType\":\"uint256[25]\",\"name\":\"\",\"type\":\"uint256[25]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"inputChunk\",\"type\":\"bytes32[2]\"},{\"internalType\":\"bytes32\",\"name\":\"hashState\",\"type\":\"bytes32\"}],\"name\":\"sha256Block\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x61173b61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063ac90ed4614610045578063e479f5321461006e575b600080fd5b610058610053366004611555565b61008f565b60405161006591906115e2565b60405180910390f35b61008161007c366004611614565b6100a6565b604051908152602001610065565b6100976114da565b6100a0826100e9565b92915050565b60006100e26040518060400160405280856000600281106100c9576100c96116a7565b6020908102919091015182528681015191015283610d35565b9392505050565b6100f16114da565b6100f96114f9565b6101016114f9565b6101096114da565b600060405180610300016040528060018152602001618082815260200167800000000000808a8152602001678000000080008000815260200161808b81526020016380000001815260200167800000008000808181526020016780000000000080098152602001608a81526020016088815260200163800080098152602001638000000a8152602001638000808b815260200167800000000000008b8152602001678000000000008089815260200167800000000000800381526020016780000000000080028152602001678000000000000080815260200161800a815260200167800000008000000a81526020016780000000800080818152602001678000000000008080815260200163800000018152602001678000000080008008815250905060005b6018811015610d2a576080878101516060808a01516040808c01516020808e01518e511890911890921890931889526101208b01516101008c015160e08d015160c08e015160a08f0151181818189089018190526101c08b01516101a08c01516101808d01516101608e01516101408f0151181818189289019283526102608b01516102408c01516102208d01516102008e01516101e08f015118181818918901919091526103008a01516102e08b01516102c08c01516102a08d01516102808e01511818181892880183905267ffffffffffffffff6002820216678000000000000000918290041790921886525104856002602002015160020267ffffffffffffffff16178560006020020151188460016020020152678000000000000000856003602002015181610364576103646116bd565b04856003602002015160020267ffffffffffffffff161785600160200201511884600260200201526780000000000000008560046020020151816103aa576103aa6116bd565b04856004602002015160020267ffffffffffffffff1617856002600581106103d4576103d46116a7565b6020020151186060850152845167800000000000000090865160608089015193909204600290910267ffffffffffffffff1617909118608086810191825286518a5118808b5287516020808d018051909218825289516040808f0180519092189091528a518e8801805190911890528a51948e0180519095189094528901805160a08e0180519091189052805160c08e0180519091189052805160e08e018051909118905280516101008e0180519091189052516101208d018051909118905291880180516101408d018051909118905280516101608d018051909118905280516101808d018051909118905280516101a08d0180519091189052516101c08c018051909118905292870180516101e08c018051909118905280516102008c018051909118905280516102208c018051909118905280516102408c0180519091189052516102608b018051909118905281516102808b018051909118905281516102a08b018051909118905281516102c08b018051909118905281516102e08b018051909118905290516103008a018051909118905290845251631000000090602089015167ffffffffffffffff6410000000009091021691900417610100840152604087015167200000000000000090604089015167ffffffffffffffff6008909102169190041761016084015260608701516280000090606089015167ffffffffffffffff65020000000000909102169190041761026084015260808701516540000000000090608089015167ffffffffffffffff6204000090910216919004176102c084015260a08701516780000000000000009004876005602002015160020267ffffffffffffffff161783600260198110610656576106566116a7565b602002015260c08701516210000081046510000000000090910267ffffffffffffffff9081169190911760a085015260e0880151664000000000000081046104009091028216176101a08501526101008801516208000081046520000000000090910282161761020085015261012088015160048082029092166740000000000000009091041761030085015261014088015161014089015167ffffffffffffffff674000000000000000909102169190041760808401526101608701516704000000000000009061016089015167ffffffffffffffff6040909102169190041760e0840152610180870151622000009061018089015167ffffffffffffffff6508000000000090910216919004176101408401526101a08701516602000000000000906101a089015167ffffffffffffffff61800090910216919004176102408401526101c08701516008906101c089015167ffffffffffffffff67200000000000000090910216919004176102a08401526101e0870151641000000000906101e089015167ffffffffffffffff6310000000909102169190041760208401526102008088015161020089015167ffffffffffffffff668000000000000090910216919004176101208401526102208701516480000000009061022089015167ffffffffffffffff63020000009091021691900417610180840152610240870151650800000000009061024089015167ffffffffffffffff6220000090910216919004176101e08401526102608701516101009061026089015167ffffffffffffffff67010000000000000090910216919004176102e08401526102808701516420000000009061028089015167ffffffffffffffff6308000000909102169190041760608401526102a087015165100000000000906102a089015167ffffffffffffffff62100000909102169190041760c08401526102c08701516302000000906102c089015167ffffffffffffffff64800000000090910216919004176101c08401526102e0870151670100000000000000906102e089015167ffffffffffffffff61010090910216919004176102208401526103008701516604000000000000900487601860200201516140000267ffffffffffffffff1617836014602002015282600a602002015183600560200201511916836000602002015118876000602002015282600b602002015183600660200201511916836001602002015118876001602002015282600c602002015183600760200201511916836002602002015118876002602002015282600d602002015183600860200201511916836003602002015118876003602002015282600e602002015183600960200201511916836004602002015118876004602002015282600f602002015183600a602002015119168360056020020151188760056020020152826010602002015183600b602002015119168360066020020151188760066020020152826011602002015183600c602002015119168360076020020151188760076020020152826012602002015183600d602002015119168360086020020151188760086020020152826013602002015183600e602002015119168360096020020151188760096020020152826014602002015183600f6020020151191683600a60200201511887600a602002015282601560200201518360106020020151191683600b60200201511887600b602002015282601660200201518360116020020151191683600c60200201511887600c602002015282601760200201518360126020020151191683600d60200201511887600d602002015282601860200201518360136020020151191683600e60200201511887600e602002015282600060200201518360146020020151191683600f60200201511887600f6020020152826001602002015183601560200201511916836010602002015118876010602002015282600260200201518360166020020151191683601160200201511887601160200201528260036020020151836017602002015119168360126020020151188760126020020152826004602002015183601860200201511916836013602002015118876013602002015282600560200201518360006020020151191683601460200201511887601460200201528260066020020151836001602002015119168360156020020151188760156020020152826007602002015183600260200201511916836016602002015118876016602002015282600860200201518360036020020151191683601760200201511887601760200201528260096020020151836004602002015119168360186020020151188760186020020152818160188110610d1857610d186116a7565b6020020151875118875260010161022f565b509495945050505050565b604080516108008101825263428a2f9881526371374491602082015263b5c0fbcf9181019190915263e9b5dba56060820152633956c25b60808201526359f111f160a082015263923f82a460c082015263ab1c5ed560e082015263d807aa986101008201526312835b0161012082015263243185be61014082015263550c7dc36101608201526372be5d746101808201526380deb1fe6101a0820152639bdc06a76101c082015263c19bf1746101e082015263e49b69c161020082015263efbe4786610220820152630fc19dc661024082015263240ca1cc610260820152632de92c6f610280820152634a7484aa6102a0820152635cb0a9dc6102c08201526376f988da6102e082015263983e515261030082015263a831c66d61032082015263b00327c861034082015263bf597fc761036082015263c6e00bf361038082015263d5a791476103a08201526306ca63516103c082015263142929676103e08201526327b70a85610400820152632e1b2138610420820152634d2c6dfc6104408201526353380d1361046082015263650a735461048082015263766a0abb6104a08201526381c2c92e6104c08201526392722c856104e082015263a2bfe8a161050082015263a81a664b61052082015263c24b8b7061054082015263c76c51a361056082015263d192e81961058082015263d69906246105a082015263f40e35856105c082015263106aa0706105e08201526319a4c116610600820152631e376c08610620820152632748774c6106408201526334b0bcb561066082015263391c0cb3610680820152634ed8aa4a6106a0820152635b9cca4f6106c082015263682e6ff36106e082015263748f82ee6107008201526378a5636f6107208201526384c87814610740820152638cc702086107608201526390befffa61078082015263a4506ceb6107a082015263bef9a3f76107c082015263c67178f26107e0820152600090611002611517565b60005b60088163ffffffff16101561109b5763ffffffff6020820260e003168660006020020151901c828263ffffffff1660408110611043576110436116a7565b63ffffffff92831660209182029290920191909152820260e003168660016020020151901c828260080163ffffffff1660408110611083576110836116a7565b63ffffffff9092166020929092020152600101611005565b5060106000805b60408363ffffffff16101561122d57600384600f850363ffffffff16604081106110ce576110ce6116a7565b602002015163ffffffff16901c61110585600f860363ffffffff16604081106110f9576110f96116a7565b602002015160126114a5565b61112f86600f870363ffffffff1660408110611123576111236116a7565b602002015160076114a5565b18189150600a846002850363ffffffff1660408110611150576111506116a7565b602002015163ffffffff16901c611187856002860363ffffffff166040811061117b5761117b6116a7565b602002015160136114a5565b6111b1866002870363ffffffff16604081106111a5576111a56116a7565b602002015160116114a5565b1818905080846007850363ffffffff16604081106111d1576111d16116a7565b602002015183866010870363ffffffff16604081106111f2576111f26116a7565b6020020151010101848463ffffffff1660408110611212576112126116a7565b63ffffffff90921660209290920201526001909201916110a2565b611235611536565b600093505b60088463ffffffff16101561128c578360200260e00363ffffffff1688901c818563ffffffff1660088110611271576112716116a7565b63ffffffff909216602092909202015260019093019261123a565b60008060008096505b60408763ffffffff1610156113e85760808401516112b49060196114a5565b60808501516112c490600b6114a5565b60808601516112d49060066114a5565b18189450878763ffffffff16604081106112f0576112f06116a7565b6020020151898863ffffffff166040811061130d5761130d6116a7565b6020020151608086015160a087015160c0880151821916911618878760076020020151010101019250611348846000602002015160166114a5565b845161135590600d6114a5565b85516113629060026114a5565b6040870180516020890180518a5160c08c01805163ffffffff90811660e08f015260a08e018051821690925260808e018051821690925260608e0180518e01821690925280861690915280831690955284811690925280831891909116911618929091189290921881810186810190931687526001999099019897509092509050611295565b600096505b60088763ffffffff161015611442578660200260e00363ffffffff168b901c848863ffffffff1660088110611424576114246116a7565b60200201805163ffffffff92019190911690526001909601956113ed565b60008097505b60088863ffffffff161015611495578760200260e00363ffffffff16858963ffffffff166008811061147c5761147c6116a7565b602002015160019099019863ffffffff16901b17611448565b9c9b505050505050505050505050565b60006114b28260206116d3565b63ffffffff168363ffffffff16901b8263ffffffff168463ffffffff16901c17905092915050565b6040518061032001604052806019906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b6040518061080001604052806040906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600061032080838503121561156957600080fd5b83601f84011261157857600080fd5b60405181810181811067ffffffffffffffff821117156115a857634e487b7160e01b600052604160045260246000fd5b6040529083019080858311156115bd57600080fd5b845b838110156115d75780358252602091820191016115bf565b509095945050505050565b6103208101818360005b601981101561160b5781518352602092830192909101906001016115ec565b50505092915050565b6000806060838503121561162757600080fd5b83601f84011261163657600080fd5b6040516040810181811067ffffffffffffffff8211171561166757634e487b7160e01b600052604160045260246000fd5b806040525080604085018681111561167e57600080fd5b855b81811015611698578035835260209283019201611680565b50919691359550909350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b63ffffffff8281168282160390808211156116fe57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220e85f8f1ad8770e74b68e54d7ae7cd46ac4d12065a1497c2f907303e52876d55464736f6c63430008110033", + Bin: "0x61173b61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063ac90ed4614610045578063e479f5321461006e575b600080fd5b610058610053366004611555565b61008f565b60405161006591906115e2565b60405180910390f35b61008161007c366004611614565b6100a6565b604051908152602001610065565b6100976114da565b6100a0826100e9565b92915050565b60006100e26040518060400160405280856000600281106100c9576100c96116a7565b6020908102919091015182528681015191015283610d35565b9392505050565b6100f16114da565b6100f96114f9565b6101016114f9565b6101096114da565b600060405180610300016040528060018152602001618082815260200167800000000000808a8152602001678000000080008000815260200161808b81526020016380000001815260200167800000008000808181526020016780000000000080098152602001608a81526020016088815260200163800080098152602001638000000a8152602001638000808b815260200167800000000000008b8152602001678000000000008089815260200167800000000000800381526020016780000000000080028152602001678000000000000080815260200161800a815260200167800000008000000a81526020016780000000800080818152602001678000000000008080815260200163800000018152602001678000000080008008815250905060005b6018811015610d2a576080878101516060808a01516040808c01516020808e01518e511890911890921890931889526101208b01516101008c015160e08d015160c08e015160a08f0151181818189089018190526101c08b01516101a08c01516101808d01516101608e01516101408f0151181818189289019283526102608b01516102408c01516102208d01516102008e01516101e08f015118181818918901919091526103008a01516102e08b01516102c08c01516102a08d01516102808e01511818181892880183905267ffffffffffffffff6002820216678000000000000000918290041790921886525104856002602002015160020267ffffffffffffffff16178560006020020151188460016020020152678000000000000000856003602002015181610364576103646116bd565b04856003602002015160020267ffffffffffffffff161785600160200201511884600260200201526780000000000000008560046020020151816103aa576103aa6116bd565b04856004602002015160020267ffffffffffffffff1617856002600581106103d4576103d46116a7565b6020020151186060850152845167800000000000000090865160608089015193909204600290910267ffffffffffffffff1617909118608086810191825286518a5118808b5287516020808d018051909218825289516040808f0180519092189091528a518e8801805190911890528a51948e0180519095189094528901805160a08e0180519091189052805160c08e0180519091189052805160e08e018051909118905280516101008e0180519091189052516101208d018051909118905291880180516101408d018051909118905280516101608d018051909118905280516101808d018051909118905280516101a08d0180519091189052516101c08c018051909118905292870180516101e08c018051909118905280516102008c018051909118905280516102208c018051909118905280516102408c0180519091189052516102608b018051909118905281516102808b018051909118905281516102a08b018051909118905281516102c08b018051909118905281516102e08b018051909118905290516103008a018051909118905290845251631000000090602089015167ffffffffffffffff6410000000009091021691900417610100840152604087015167200000000000000090604089015167ffffffffffffffff6008909102169190041761016084015260608701516280000090606089015167ffffffffffffffff65020000000000909102169190041761026084015260808701516540000000000090608089015167ffffffffffffffff6204000090910216919004176102c084015260a08701516780000000000000009004876005602002015160020267ffffffffffffffff161783600260198110610656576106566116a7565b602002015260c08701516210000081046510000000000090910267ffffffffffffffff9081169190911760a085015260e0880151664000000000000081046104009091028216176101a08501526101008801516208000081046520000000000090910282161761020085015261012088015160048082029092166740000000000000009091041761030085015261014088015161014089015167ffffffffffffffff674000000000000000909102169190041760808401526101608701516704000000000000009061016089015167ffffffffffffffff6040909102169190041760e0840152610180870151622000009061018089015167ffffffffffffffff6508000000000090910216919004176101408401526101a08701516602000000000000906101a089015167ffffffffffffffff61800090910216919004176102408401526101c08701516008906101c089015167ffffffffffffffff67200000000000000090910216919004176102a08401526101e0870151641000000000906101e089015167ffffffffffffffff6310000000909102169190041760208401526102008088015161020089015167ffffffffffffffff668000000000000090910216919004176101208401526102208701516480000000009061022089015167ffffffffffffffff63020000009091021691900417610180840152610240870151650800000000009061024089015167ffffffffffffffff6220000090910216919004176101e08401526102608701516101009061026089015167ffffffffffffffff67010000000000000090910216919004176102e08401526102808701516420000000009061028089015167ffffffffffffffff6308000000909102169190041760608401526102a087015165100000000000906102a089015167ffffffffffffffff62100000909102169190041760c08401526102c08701516302000000906102c089015167ffffffffffffffff64800000000090910216919004176101c08401526102e0870151670100000000000000906102e089015167ffffffffffffffff61010090910216919004176102208401526103008701516604000000000000900487601860200201516140000267ffffffffffffffff1617836014602002015282600a602002015183600560200201511916836000602002015118876000602002015282600b602002015183600660200201511916836001602002015118876001602002015282600c602002015183600760200201511916836002602002015118876002602002015282600d602002015183600860200201511916836003602002015118876003602002015282600e602002015183600960200201511916836004602002015118876004602002015282600f602002015183600a602002015119168360056020020151188760056020020152826010602002015183600b602002015119168360066020020151188760066020020152826011602002015183600c602002015119168360076020020151188760076020020152826012602002015183600d602002015119168360086020020151188760086020020152826013602002015183600e602002015119168360096020020151188760096020020152826014602002015183600f6020020151191683600a60200201511887600a602002015282601560200201518360106020020151191683600b60200201511887600b602002015282601660200201518360116020020151191683600c60200201511887600c602002015282601760200201518360126020020151191683600d60200201511887600d602002015282601860200201518360136020020151191683600e60200201511887600e602002015282600060200201518360146020020151191683600f60200201511887600f6020020152826001602002015183601560200201511916836010602002015118876010602002015282600260200201518360166020020151191683601160200201511887601160200201528260036020020151836017602002015119168360126020020151188760126020020152826004602002015183601860200201511916836013602002015118876013602002015282600560200201518360006020020151191683601460200201511887601460200201528260066020020151836001602002015119168360156020020151188760156020020152826007602002015183600260200201511916836016602002015118876016602002015282600860200201518360036020020151191683601760200201511887601760200201528260096020020151836004602002015119168360186020020151188760186020020152818160188110610d1857610d186116a7565b6020020151875118875260010161022f565b509495945050505050565b604080516108008101825263428a2f9881526371374491602082015263b5c0fbcf9181019190915263e9b5dba56060820152633956c25b60808201526359f111f160a082015263923f82a460c082015263ab1c5ed560e082015263d807aa986101008201526312835b0161012082015263243185be61014082015263550c7dc36101608201526372be5d746101808201526380deb1fe6101a0820152639bdc06a76101c082015263c19bf1746101e082015263e49b69c161020082015263efbe4786610220820152630fc19dc661024082015263240ca1cc610260820152632de92c6f610280820152634a7484aa6102a0820152635cb0a9dc6102c08201526376f988da6102e082015263983e515261030082015263a831c66d61032082015263b00327c861034082015263bf597fc761036082015263c6e00bf361038082015263d5a791476103a08201526306ca63516103c082015263142929676103e08201526327b70a85610400820152632e1b2138610420820152634d2c6dfc6104408201526353380d1361046082015263650a735461048082015263766a0abb6104a08201526381c2c92e6104c08201526392722c856104e082015263a2bfe8a161050082015263a81a664b61052082015263c24b8b7061054082015263c76c51a361056082015263d192e81961058082015263d69906246105a082015263f40e35856105c082015263106aa0706105e08201526319a4c116610600820152631e376c08610620820152632748774c6106408201526334b0bcb561066082015263391c0cb3610680820152634ed8aa4a6106a0820152635b9cca4f6106c082015263682e6ff36106e082015263748f82ee6107008201526378a5636f6107208201526384c87814610740820152638cc702086107608201526390befffa61078082015263a4506ceb6107a082015263bef9a3f76107c082015263c67178f26107e0820152600090611002611517565b60005b60088163ffffffff16101561109b5763ffffffff6020820260e003168660006020020151901c828263ffffffff1660408110611043576110436116a7565b63ffffffff92831660209182029290920191909152820260e003168660016020020151901c828260080163ffffffff1660408110611083576110836116a7565b63ffffffff9092166020929092020152600101611005565b5060106000805b60408363ffffffff16101561122d57600384600f850363ffffffff16604081106110ce576110ce6116a7565b602002015163ffffffff16901c61110585600f860363ffffffff16604081106110f9576110f96116a7565b602002015160126114a5565b61112f86600f870363ffffffff1660408110611123576111236116a7565b602002015160076114a5565b18189150600a846002850363ffffffff1660408110611150576111506116a7565b602002015163ffffffff16901c611187856002860363ffffffff166040811061117b5761117b6116a7565b602002015160136114a5565b6111b1866002870363ffffffff16604081106111a5576111a56116a7565b602002015160116114a5565b1818905080846007850363ffffffff16604081106111d1576111d16116a7565b602002015183866010870363ffffffff16604081106111f2576111f26116a7565b6020020151010101848463ffffffff1660408110611212576112126116a7565b63ffffffff90921660209290920201526001909201916110a2565b611235611536565b600093505b60088463ffffffff16101561128c578360200260e00363ffffffff1688901c818563ffffffff1660088110611271576112716116a7565b63ffffffff909216602092909202015260019093019261123a565b60008060008096505b60408763ffffffff1610156113e85760808401516112b49060196114a5565b60808501516112c490600b6114a5565b60808601516112d49060066114a5565b18189450878763ffffffff16604081106112f0576112f06116a7565b6020020151898863ffffffff166040811061130d5761130d6116a7565b6020020151608086015160a087015160c0880151821916911618878760076020020151010101019250611348846000602002015160166114a5565b845161135590600d6114a5565b85516113629060026114a5565b6040870180516020890180518a5160c08c01805163ffffffff90811660e08f015260a08e018051821690925260808e018051821690925260608e0180518e01821690925280861690915280831690955284811690925280831891909116911618929091189290921881810186810190931687526001999099019897509092509050611295565b600096505b60088763ffffffff161015611442578660200260e00363ffffffff168b901c848863ffffffff1660088110611424576114246116a7565b60200201805163ffffffff92019190911690526001909601956113ed565b60008097505b60088863ffffffff161015611495578760200260e00363ffffffff16858963ffffffff166008811061147c5761147c6116a7565b602002015160019099019863ffffffff16901b17611448565b9c9b505050505050505050505050565b60006114b28260206116d3565b63ffffffff168363ffffffff16901b8263ffffffff168463ffffffff16901c17905092915050565b6040518061032001604052806019906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b6040518061080001604052806040906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b600061032080838503121561156957600080fd5b83601f84011261157857600080fd5b60405181810181811067ffffffffffffffff821117156115a857634e487b7160e01b600052604160045260246000fd5b6040529083019080858311156115bd57600080fd5b845b838110156115d75780358252602091820191016115bf565b509095945050505050565b6103208101818360005b601981101561160b5781518352602092830192909101906001016115ec565b50505092915050565b6000806060838503121561162757600080fd5b83601f84011261163657600080fd5b6040516040810181811067ffffffffffffffff8211171561166757634e487b7160e01b600052604160045260246000fd5b806040525080604085018681111561167e57600080fd5b855b81811015611698578035835260209283019201611680565b50919691359550909350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b63ffffffff8281168282160390808211156116fe57634e487b7160e01b600052601160045260246000fd5b509291505056fea264697066735822122099b67cb168dcef4e82d8fbdadb227e1cb3d7d28070f5b9a4a7ec76385d134b9d64736f6c63430008110033", } // CryptographyPrimitivesTesterABI is the input ABI used to generate the binding from. @@ -1912,10 +2046,256 @@ func (_CryptographyPrimitivesTester *CryptographyPrimitivesTesterCallerSession) return _CryptographyPrimitivesTester.Contract.Sha256Block(&_CryptographyPrimitivesTester.CallOpts, inputChunk, hashState) } +// EthVaultMetaData contains all meta data concerning the EthVault contract. +var EthVaultMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"justRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_version\",\"type\":\"uint256\"}],\"name\":\"setVersion\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040526000805534801561001457600080fd5b50610127806100246000396000f3fe60806040526004361060305760003560e01c8063408def1e14603557806350b23fd214604757806354fd4d5014604d575b600080fd5b6045604036600460d9565b600055565b005b60456073565b348015605857600080fd5b50606160005481565b60405190815260200160405180910390f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f6279650000000000000000000000000000000000000000000000000000000000604482015260640160405180910390fd5b60006020828403121560ea57600080fd5b503591905056fea2646970667358221220e1d9ce9e406acb30a5ad7b5c6451d68e3651f071cba9865d6f61ca4a69e77a6864736f6c63430008110033", +} + +// EthVaultABI is the input ABI used to generate the binding from. +// Deprecated: Use EthVaultMetaData.ABI instead. +var EthVaultABI = EthVaultMetaData.ABI + +// EthVaultBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EthVaultMetaData.Bin instead. +var EthVaultBin = EthVaultMetaData.Bin + +// DeployEthVault deploys a new Ethereum contract, binding an instance of EthVault to it. +func DeployEthVault(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EthVault, error) { + parsed, err := EthVaultMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EthVaultBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EthVault{EthVaultCaller: EthVaultCaller{contract: contract}, EthVaultTransactor: EthVaultTransactor{contract: contract}, EthVaultFilterer: EthVaultFilterer{contract: contract}}, nil +} + +// EthVault is an auto generated Go binding around an Ethereum contract. +type EthVault struct { + EthVaultCaller // Read-only binding to the contract + EthVaultTransactor // Write-only binding to the contract + EthVaultFilterer // Log filterer for contract events +} + +// EthVaultCaller is an auto generated read-only Go binding around an Ethereum contract. +type EthVaultCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EthVaultTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EthVaultTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EthVaultFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EthVaultFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EthVaultSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EthVaultSession struct { + Contract *EthVault // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EthVaultCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EthVaultCallerSession struct { + Contract *EthVaultCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EthVaultTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EthVaultTransactorSession struct { + Contract *EthVaultTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EthVaultRaw is an auto generated low-level Go binding around an Ethereum contract. +type EthVaultRaw struct { + Contract *EthVault // Generic contract binding to access the raw methods on +} + +// EthVaultCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EthVaultCallerRaw struct { + Contract *EthVaultCaller // Generic read-only contract binding to access the raw methods on +} + +// EthVaultTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EthVaultTransactorRaw struct { + Contract *EthVaultTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEthVault creates a new instance of EthVault, bound to a specific deployed contract. +func NewEthVault(address common.Address, backend bind.ContractBackend) (*EthVault, error) { + contract, err := bindEthVault(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EthVault{EthVaultCaller: EthVaultCaller{contract: contract}, EthVaultTransactor: EthVaultTransactor{contract: contract}, EthVaultFilterer: EthVaultFilterer{contract: contract}}, nil +} + +// NewEthVaultCaller creates a new read-only instance of EthVault, bound to a specific deployed contract. +func NewEthVaultCaller(address common.Address, caller bind.ContractCaller) (*EthVaultCaller, error) { + contract, err := bindEthVault(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EthVaultCaller{contract: contract}, nil +} + +// NewEthVaultTransactor creates a new write-only instance of EthVault, bound to a specific deployed contract. +func NewEthVaultTransactor(address common.Address, transactor bind.ContractTransactor) (*EthVaultTransactor, error) { + contract, err := bindEthVault(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EthVaultTransactor{contract: contract}, nil +} + +// NewEthVaultFilterer creates a new log filterer instance of EthVault, bound to a specific deployed contract. +func NewEthVaultFilterer(address common.Address, filterer bind.ContractFilterer) (*EthVaultFilterer, error) { + contract, err := bindEthVault(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EthVaultFilterer{contract: contract}, nil +} + +// bindEthVault binds a generic wrapper to an already deployed contract. +func bindEthVault(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EthVaultMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_EthVault *EthVaultRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EthVault.Contract.EthVaultCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_EthVault *EthVaultRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EthVault.Contract.EthVaultTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EthVault *EthVaultRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EthVault.Contract.EthVaultTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_EthVault *EthVaultCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EthVault.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_EthVault *EthVaultTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EthVault.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EthVault *EthVaultTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EthVault.Contract.contract.Transact(opts, method, params...) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(uint256) +func (_EthVault *EthVaultCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EthVault.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(uint256) +func (_EthVault *EthVaultSession) Version() (*big.Int, error) { + return _EthVault.Contract.Version(&_EthVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(uint256) +func (_EthVault *EthVaultCallerSession) Version() (*big.Int, error) { + return _EthVault.Contract.Version(&_EthVault.CallOpts) +} + +// JustRevert is a paid mutator transaction binding the contract method 0x50b23fd2. +// +// Solidity: function justRevert() payable returns() +func (_EthVault *EthVaultTransactor) JustRevert(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EthVault.contract.Transact(opts, "justRevert") +} + +// JustRevert is a paid mutator transaction binding the contract method 0x50b23fd2. +// +// Solidity: function justRevert() payable returns() +func (_EthVault *EthVaultSession) JustRevert() (*types.Transaction, error) { + return _EthVault.Contract.JustRevert(&_EthVault.TransactOpts) +} + +// JustRevert is a paid mutator transaction binding the contract method 0x50b23fd2. +// +// Solidity: function justRevert() payable returns() +func (_EthVault *EthVaultTransactorSession) JustRevert() (*types.Transaction, error) { + return _EthVault.Contract.JustRevert(&_EthVault.TransactOpts) +} + +// SetVersion is a paid mutator transaction binding the contract method 0x408def1e. +// +// Solidity: function setVersion(uint256 _version) payable returns() +func (_EthVault *EthVaultTransactor) SetVersion(opts *bind.TransactOpts, _version *big.Int) (*types.Transaction, error) { + return _EthVault.contract.Transact(opts, "setVersion", _version) +} + +// SetVersion is a paid mutator transaction binding the contract method 0x408def1e. +// +// Solidity: function setVersion(uint256 _version) payable returns() +func (_EthVault *EthVaultSession) SetVersion(_version *big.Int) (*types.Transaction, error) { + return _EthVault.Contract.SetVersion(&_EthVault.TransactOpts, _version) +} + +// SetVersion is a paid mutator transaction binding the contract method 0x408def1e. +// +// Solidity: function setVersion(uint256 _version) payable returns() +func (_EthVault *EthVaultTransactorSession) SetVersion(_version *big.Int) (*types.Transaction, error) { + return _EthVault.Contract.SetVersion(&_EthVault.TransactOpts, _version) +} + // MessageTesterMetaData contains all meta data concerning the MessageTester contract. var MessageTesterMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"inbox\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"message\",\"type\":\"bytes32\"}],\"name\":\"accumulateInboxMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"messageType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"inboxSeqNum\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceL1\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"messageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610267806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638f3c79c01461003b578063bf00905214610087575b600080fd5b610075610049366004610160565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b60405190815260200160405180910390f35b61007561009536600461019f565b6040805160f89890981b7fff00000000000000000000000000000000000000000000000000000000000000166020808a019190915260609790971b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602189015260c095861b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358a01529490951b909316603d870152604586019190915260658501526085808501919091528151808503909101815260a59093019052815191012090565b6000806040838503121561017357600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461019a57600080fd5b919050565b600080600080600080600060e0888a0312156101ba57600080fd5b873560ff811681146101cb57600080fd5b9650602088013573ffffffffffffffffffffffffffffffffffffffff811681146101f457600080fd5b955061020260408901610182565b945061021060608901610182565b9699959850939660808101359560a0820135955060c090910135935091505056fea26469706673582212201d0e022d2f84790bf2a803422ec0c01010eb3da921305b374b53ba5ddcc5ca7b64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b50610267806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638f3c79c01461003b578063bf00905214610087575b600080fd5b610075610049366004610160565b604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b60405190815260200160405180910390f35b61007561009536600461019f565b6040805160f89890981b7fff00000000000000000000000000000000000000000000000000000000000000166020808a019190915260609790971b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602189015260c095861b7fffffffffffffffff00000000000000000000000000000000000000000000000090811660358a01529490951b909316603d870152604586019190915260658501526085808501919091528151808503909101815260a59093019052815191012090565b6000806040838503121561017357600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461019a57600080fd5b919050565b600080600080600080600060e0888a0312156101ba57600080fd5b873560ff811681146101cb57600080fd5b9650602088013573ffffffffffffffffffffffffffffffffffffffff811681146101f457600080fd5b955061020260408901610182565b945061021060608901610182565b9699959850939660808101359560a0820135955060c090910135935091505056fea26469706673582212204a63164fd4fd9289cd6d66ce0ab9481144fe89f3ba946aaa6b1bc08f3af415ea64736f6c63430008110033", } // MessageTesterABI is the input ABI used to generate the binding from. @@ -2149,8 +2529,8 @@ func (_MessageTester *MessageTesterCallerSession) MessageHash(messageType uint8, // OutboxWithoutOptTesterMetaData contains all meta data concerning the OutboxWithoutOptTester contract. var OutboxWithoutOptTesterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523060805234801561001457600080fd5b506080516114bc610030600039600061071301526114bc6000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638515bc6a116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb5146102d2578063d5b5cc23146102e5578063e78cea92146102f857600080fd5b8063c4d66de81461029f578063c75184df146102b257600080fd5b8063a04cee60116100b2578063a04cee601461025b578063ae6dead71461026e578063b0f305371461028e57600080fd5b80638515bc6a146102235780639f0c04bf1461024857600080fd5b806346547790116101245780636ae71f12116101095780636ae71f12146101ee57806372f2a8c7146101f657806380648b02146101fe57600080fd5b806346547790146101aa5780635a129efe146101bb57600080fd5b80627436d31461015557806308635a951461017b5780631198527114610190578063288e5b1014610197575b600080fd5b610168610163366004610e1c565b61030b565b6040519081526020015b60405180910390f35b61018e610189366004610f43565b610348565b005b6000610168565b61018e6101a5366004611038565b6106bc565b6004546001600160801b0316610168565b6101de6101c93660046110d4565b60026020526000908152604090205460ff1681565b6040519015158152602001610172565b61018e610709565b600654610168565b6007546001600160a01b03165b6040516001600160a01b039091168152602001610172565b60045470010000000000000000000000000000000090046001600160801b0316610168565b6101686102563660046110ed565b6108c5565b61018e61026936600461117c565b61090a565b61016861027c3660046110d4565b60036020526000908152604090205481565b6005546001600160801b0316610168565b61018e6102ad36600461119e565b610949565b6102ba600281565b6040516001600160801b039091168152602001610172565b60005461020b906001600160a01b031681565b6101686102f33660046110d4565b610a5f565b60015461020b906001600160a01b031681565b600061034084848460405160200161032591815260200190565b60405160208183030381529060405280519060200120610aaa565b949350505050565b60008061035b8a8a8a8a8a8a8a8a6108c5565b905061039d8d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f9250859150610b659050565b915060008a6001600160a01b03168a6001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648e6040516103e691815260200190565b60405180910390a450600060046040518060a00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016001820160009054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090506040518060a00160405280896001600160801b03168152602001886001600160801b03168152602001876001600160801b031681526020018381526020018b6001600160a01b0316815250600460008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555060408201518160010160006101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816002015560808201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050610615898686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610cea92505050565b805160208201516001600160801b0391821670010000000000000000000000000000000091831691909102176004556040820151600580547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016919092161790556060810151600655608001516007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055505050505050505050505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e6f7420696d706c656d656e746564000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107a75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610700565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b0382161461081d576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610700565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089491906111c2565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b600088888888888888886040516020016108e69897969594939291906111df565b60405160208183030381529060405280519060200120905098975050505050505050565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6001546001600160a01b03161561098c576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906111c2565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b60405162461bcd60e51b815260206004820152600e60248201527f4e4f545f494d504c454d455445440000000000000000000000000000000000006044820152600090606401610700565b8251600090610100811115610af6576040517ffdac331e000000000000000000000000000000000000000000000000000000008152600481018290526101006024820152604401610700565b8260005b82811015610b5b576000878281518110610b1657610b1661124b565b60200260200101519050816001901b8716600003610b4257826000528060205260406000209250610b52565b8060005282602052604060002092505b50600101610afa565b5095945050505050565b6000610100845110610ba85783516040517fab6a068300000000000000000000000000000000000000000000000000000000815260040161070091815260200190565b8351610bb590600261135d565b8310610c05578284516002610bca919061135d565b6040517f0b8a724b00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610700565b6000610c1285858561030b565b600081815260036020526040902054909150610c5d576040517f8730d7c800000000000000000000000000000000000000000000000000000000815260048101829052602401610700565b60008481526002602052604090205460ff1615610ca9576040517f9715b8d300000000000000000000000000000000000000000000000000000000815260048101859052602401610700565b5050600082815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055819392505050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c4990610d3c9088908890889060040161138d565b6000604051808303816000875af1158015610d5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8391908101906113d7565b9150915081610dce57805115610d9c5780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e1457610e14610dd5565b604052919050565b600080600060608486031215610e3157600080fd5b833567ffffffffffffffff80821115610e4957600080fd5b818601915086601f830112610e5d57600080fd5b8135602082821115610e7157610e71610dd5565b8160051b9250610e82818401610deb565b828152928401810192818101908a851115610e9c57600080fd5b948201945b84861015610eba57853582529482019490820190610ea1565b9a918901359950506040909701359695505050505050565b6001600160a01b0381168114610ee757600080fd5b50565b8035610ef581610ed2565b919050565b60008083601f840112610f0c57600080fd5b50813567ffffffffffffffff811115610f2457600080fd5b602083019150836020828501011115610f3c57600080fd5b9250929050565b60008060008060008060008060008060006101208c8e031215610f6557600080fd5b8b3567ffffffffffffffff80821115610f7d57600080fd5b818e0191508e601f830112610f9157600080fd5b813581811115610fa057600080fd5b8f60208260051b8501011115610fb557600080fd5b60208381019e50909c508e01359a50610fd060408f01610eea565b9950610fde60608f01610eea565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561101157600080fd5b5061101e8e828f01610efa565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561105757600080fd5b8935985060208a013561106981610ed2565b975060408a013561107981610ed2565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff8111156110b157600080fd5b6110bd8c828d01610efa565b915080935050809150509295985092959850929598565b6000602082840312156110e657600080fd5b5035919050565b60008060008060008060008060e0898b03121561110957600080fd5b883561111481610ed2565b9750602089013561112481610ed2565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561115c57600080fd5b6111688b828c01610efa565b999c989b5096995094979396929594505050565b6000806040838503121561118f57600080fd5b50508035926020909101359150565b6000602082840312156111b057600080fd5b81356111bb81610ed2565b9392505050565b6000602082840312156111d457600080fd5b81516111bb81610ed2565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156112b257816000190482111561129857611298611261565b808516156112a557918102915b93841c939080029061127c565b509250929050565b6000826112c957506001611357565b816112d657506000611357565b81600181146112ec57600281146112f657611312565b6001915050611357565b60ff84111561130757611307611261565b50506001821b611357565b5060208310610133831016604e8410600b8410161715611335575081810a611357565b61133f8383611277565b806000190482111561135357611353611261565b0290505b92915050565b60006111bb83836112ba565b60005b8381101561138457818101518382015260200161136c565b50506000910152565b6001600160a01b038416815282602082015260606040820152600082518060608401526113c1816080850160208701611369565b601f01601f191691909101608001949350505050565b600080604083850312156113ea57600080fd5b825180151581146113fa57600080fd5b602084015190925067ffffffffffffffff8082111561141857600080fd5b818501915085601f83011261142c57600080fd5b81518181111561143e5761143e610dd5565b6114516020601f19601f84011601610deb565b915080825286602082850101111561146857600080fd5b611479816020840160208601611369565b508092505050925092905056fea2646970667358221220f39e95ea18ba295499ca939a053629cfaf32a42e45682643d166f716635e790e64736f6c63430008110033", + ABI: "[{\"inputs\":[],\"name\":\"AlreadyInit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"AlreadySpent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeCallFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actualLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProofLength\",\"type\":\"uint256\"}],\"name\":\"MerkleProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NotOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxIndex\",\"type\":\"uint256\"}],\"name\":\"PathNotMinimal\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proofLength\",\"type\":\"uint256\"}],\"name\":\"ProofTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"UnknownRoot\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBridge\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1BatchNum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postUpgradeInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRollupAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a06040523060805234801561001457600080fd5b506080516114d7610030600039600061072e01526114d76000f3fe608060405234801561001057600080fd5b506004361061016b5760003560e01c806395fcea78116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb5146102ed578063d5b5cc2314610300578063e78cea921461031357600080fd5b8063c4d66de8146102ba578063c75184df146102cd57600080fd5b8063a04cee60116100b2578063a04cee6014610276578063ae6dead714610289578063b0f30537146102a957600080fd5b806395fcea78146101a95780639f0c04bf1461026357600080fd5b80635a129efe1161012457806372f2a8c71161010957806372f2a8c71461021157806380648b02146102195780638515bc6a1461023e57600080fd5b80635a129efe146101d65780636ae71f121461020957600080fd5b8063119852711161015557806311985271146101ab578063288e5b10146101b257806346547790146101c557600080fd5b80627436d31461017057806308635a9514610196575b600080fd5b61018361017e366004610e37565b610326565b6040519081526020015b60405180910390f35b6101a96101a4366004610f5e565b610363565b005b6000610183565b6101a96101c0366004611053565b6106d7565b6004546001600160801b0316610183565b6101f96101e43660046110ef565b60026020526000908152604090205460ff1681565b604051901515815260200161018d565b6101a9610724565b600654610183565b6007546001600160a01b03165b6040516001600160a01b03909116815260200161018d565b60045470010000000000000000000000000000000090046001600160801b0316610183565b610183610271366004611108565b6108e0565b6101a9610284366004611197565b610925565b6101836102973660046110ef565b60036020526000908152604090205481565b6005546001600160801b0316610183565b6101a96102c83660046111b9565b610964565b6102d5600281565b6040516001600160801b03909116815260200161018d565b600054610226906001600160a01b031681565b61018361030e3660046110ef565b610a7a565b600154610226906001600160a01b031681565b600061035b84848460405160200161034091815260200190565b60405160208183030381529060405280519060200120610ac5565b949350505050565b6000806103768a8a8a8a8a8a8a8a6108e0565b90506103b88d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f9250859150610b809050565b915060008a6001600160a01b03168a6001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648e60405161040191815260200190565b60405180910390a450600060046040518060a00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016001820160009054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505090506040518060a00160405280896001600160801b03168152602001886001600160801b03168152602001876001600160801b031681526020018381526020018b6001600160a01b0316815250600460008201518160000160006101000a8154816001600160801b0302191690836001600160801b0316021790555060208201518160000160106101000a8154816001600160801b0302191690836001600160801b0316021790555060408201518160010160006101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816002015560808201518160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050610630898686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d0592505050565b805160208201516001600160801b0391821670010000000000000000000000000000000091831691909102176004556040820151600580547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016919092161790556060810151600655608001516007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909216919091179055505050505050505050505050565b60405162461bcd60e51b815260206004820152600f60248201527f4e6f7420696d706c656d656e746564000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107c25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c0000000000000000000000000000000000000000606482015260840161071b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610838576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038216602482015260440161071b565b600160009054906101000a90046001600160a01b03166001600160a01b031663cb23bcb56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af91906111dd565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b600088888888888888886040516020016109019897969594939291906111fa565b60405160208183030381529060405280519060200120905098975050505050505050565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b6001546001600160a01b0316156109a7576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155604080517fcb23bcb5000000000000000000000000000000000000000000000000000000008152905163cb23bcb5916004808201926020929091908290030181865afa158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a91906111dd565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b60405162461bcd60e51b815260206004820152600e60248201527f4e4f545f494d504c454d45544544000000000000000000000000000000000000604482015260009060640161071b565b8251600090610100811115610b11576040517ffdac331e00000000000000000000000000000000000000000000000000000000815260048101829052610100602482015260440161071b565b8260005b82811015610b76576000878281518110610b3157610b31611266565b60200260200101519050816001901b8716600003610b5d57826000528060205260406000209250610b6d565b8060005282602052604060002092505b50600101610b15565b5095945050505050565b6000610100845110610bc35783516040517fab6a068300000000000000000000000000000000000000000000000000000000815260040161071b91815260200190565b8351610bd0906002611378565b8310610c20578284516002610be59190611378565b6040517f0b8a724b0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161071b565b6000610c2d858585610326565b600081815260036020526040902054909150610c78576040517f8730d7c80000000000000000000000000000000000000000000000000000000081526004810182905260240161071b565b60008481526002602052604090205460ff1615610cc4576040517f9715b8d30000000000000000000000000000000000000000000000000000000081526004810185905260240161071b565b5050600082815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055819392505050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c4990610d57908890889088906004016113a8565b6000604051808303816000875af1158015610d76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9e91908101906113f2565b9150915081610de957805115610db75780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e2f57610e2f610df0565b604052919050565b600080600060608486031215610e4c57600080fd5b833567ffffffffffffffff80821115610e6457600080fd5b818601915086601f830112610e7857600080fd5b8135602082821115610e8c57610e8c610df0565b8160051b9250610e9d818401610e06565b828152928401810192818101908a851115610eb757600080fd5b948201945b84861015610ed557853582529482019490820190610ebc565b9a918901359950506040909701359695505050505050565b6001600160a01b0381168114610f0257600080fd5b50565b8035610f1081610eed565b919050565b60008083601f840112610f2757600080fd5b50813567ffffffffffffffff811115610f3f57600080fd5b602083019150836020828501011115610f5757600080fd5b9250929050565b60008060008060008060008060008060006101208c8e031215610f8057600080fd5b8b3567ffffffffffffffff80821115610f9857600080fd5b818e0191508e601f830112610fac57600080fd5b813581811115610fbb57600080fd5b8f60208260051b8501011115610fd057600080fd5b60208381019e50909c508e01359a50610feb60408f01610f05565b9950610ff960608f01610f05565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561102c57600080fd5b506110398e828f01610f15565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c03121561107257600080fd5b8935985060208a013561108481610eed565b975060408a013561109481610eed565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff8111156110cc57600080fd5b6110d88c828d01610f15565b915080935050809150509295985092959850929598565b60006020828403121561110157600080fd5b5035919050565b60008060008060008060008060e0898b03121561112457600080fd5b883561112f81610eed565b9750602089013561113f81610eed565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561117757600080fd5b6111838b828c01610f15565b999c989b5096995094979396929594505050565b600080604083850312156111aa57600080fd5b50508035926020909101359150565b6000602082840312156111cb57600080fd5b81356111d681610eed565b9392505050565b6000602082840312156111ef57600080fd5b81516111d681610eed565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156112cd5781600019048211156112b3576112b361127c565b808516156112c057918102915b93841c9390800290611297565b509250929050565b6000826112e457506001611372565b816112f157506000611372565b816001811461130757600281146113115761132d565b6001915050611372565b60ff8411156113225761132261127c565b50506001821b611372565b5060208310610133831016604e8410600b8410161715611350575081810a611372565b61135a8383611292565b806000190482111561136e5761136e61127c565b0290505b92915050565b60006111d683836112d5565b60005b8381101561139f578181015183820152602001611387565b50506000910152565b6001600160a01b038416815282602082015260606040820152600082518060608401526113dc816080850160208701611384565b601f01601f191691909101608001949350505050565b6000806040838503121561140557600080fd5b8251801515811461141557600080fd5b602084015190925067ffffffffffffffff8082111561143357600080fd5b818501915085601f83011261144757600080fd5b81518181111561145957611459610df0565b61146c6020601f19601f84011601610e06565b915080825286602082850101111561148357600080fd5b611494816020840160208601611384565b508092505050925092905056fea264697066735822122084a5188a9949f486bf3351ec7b4a690edd9a9b736617f28d547f4dfddcebee8b64736f6c63430008110033", } // OutboxWithoutOptTesterABI is the input ABI used to generate the binding from. @@ -2825,6 +3205,27 @@ func (_OutboxWithoutOptTester *OutboxWithoutOptTesterTransactorSession) Initiali return _OutboxWithoutOptTester.Contract.Initialize(&_OutboxWithoutOptTester.TransactOpts, _bridge) } +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_OutboxWithoutOptTester *OutboxWithoutOptTesterTransactor) PostUpgradeInit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OutboxWithoutOptTester.contract.Transact(opts, "postUpgradeInit") +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_OutboxWithoutOptTester *OutboxWithoutOptTesterSession) PostUpgradeInit() (*types.Transaction, error) { + return _OutboxWithoutOptTester.Contract.PostUpgradeInit(&_OutboxWithoutOptTester.TransactOpts) +} + +// PostUpgradeInit is a paid mutator transaction binding the contract method 0x95fcea78. +// +// Solidity: function postUpgradeInit() returns() +func (_OutboxWithoutOptTester *OutboxWithoutOptTesterTransactorSession) PostUpgradeInit() (*types.Transaction, error) { + return _OutboxWithoutOptTester.Contract.PostUpgradeInit(&_OutboxWithoutOptTester.TransactOpts) +} + // UpdateRollupAddress is a paid mutator transaction binding the contract method 0x6ae71f12. // // Solidity: function updateRollupAddress() returns() @@ -3185,8 +3586,8 @@ func (_OutboxWithoutOptTester *OutboxWithoutOptTesterFilterer) ParseSendRootUpda // RollupMockMetaData contains all meta data concerning the RollupMock contract. var RollupMockMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[],\"name\":\"WithdrawTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ZombieTriggered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636137391914602d575b600080fd5b60336045565b60405190815260200160405180910390f35b6040516000907f1c09fbbf7cfd024f5e4e5472dd87afd5d67ee5db6a0ca715bf508d96abce309f908290a15060009056fea26469706673582212204f76b9b2686fad490865cc82482a095a8f63ef5154cebe1af4a93a76e604d0f864736f6c63430008110033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"WithdrawTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ZombieTriggered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawStakerFunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5060405161018c38038061018c83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b60fa806100926000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063613739191460375780638da5cb5b146050575b600080fd5b603d6093565b6040519081526020015b60405180910390f35b600054606f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016047565b6040516000907f1c09fbbf7cfd024f5e4e5472dd87afd5d67ee5db6a0ca715bf508d96abce309f908290a15060009056fea2646970667358221220e36130a8e9119bfb252dbac8ceec14eb5df19884c0e88f45682b2a726751b65364736f6c63430008110033", } // RollupMockABI is the input ABI used to generate the binding from. @@ -3198,7 +3599,7 @@ var RollupMockABI = RollupMockMetaData.ABI var RollupMockBin = RollupMockMetaData.Bin // DeployRollupMock deploys a new Ethereum contract, binding an instance of RollupMock to it. -func DeployRollupMock(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *RollupMock, error) { +func DeployRollupMock(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address) (common.Address, *types.Transaction, *RollupMock, error) { parsed, err := RollupMockMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -3207,7 +3608,7 @@ func DeployRollupMock(auth *bind.TransactOpts, backend bind.ContractBackend) (co return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RollupMockBin), backend) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RollupMockBin), backend, _owner) if err != nil { return common.Address{}, nil, nil, err } @@ -3356,14 +3757,45 @@ func (_RollupMock *RollupMockTransactorRaw) Transact(opts *bind.TransactOpts, me return _RollupMock.Contract.contract.Transact(opts, method, params...) } -// WithdrawStakerFunds is a paid mutator transaction binding the contract method 0x61373919. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function withdrawStakerFunds() returns(uint256) -func (_RollupMock *RollupMockTransactor) WithdrawStakerFunds(opts *bind.TransactOpts) (*types.Transaction, error) { - return _RollupMock.contract.Transact(opts, "withdrawStakerFunds") -} +// Solidity: function owner() view returns(address) +func (_RollupMock *RollupMockCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RollupMock.contract.Call(opts, &out, "owner") -// WithdrawStakerFunds is a paid mutator transaction binding the contract method 0x61373919. + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_RollupMock *RollupMockSession) Owner() (common.Address, error) { + return _RollupMock.Contract.Owner(&_RollupMock.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_RollupMock *RollupMockCallerSession) Owner() (common.Address, error) { + return _RollupMock.Contract.Owner(&_RollupMock.CallOpts) +} + +// WithdrawStakerFunds is a paid mutator transaction binding the contract method 0x61373919. +// +// Solidity: function withdrawStakerFunds() returns(uint256) +func (_RollupMock *RollupMockTransactor) WithdrawStakerFunds(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RollupMock.contract.Transact(opts, "withdrawStakerFunds") +} + +// WithdrawStakerFunds is a paid mutator transaction binding the contract method 0x61373919. // // Solidity: function withdrawStakerFunds() returns(uint256) func (_RollupMock *RollupMockSession) WithdrawStakerFunds() (*types.Transaction, error) { @@ -3643,10 +4075,782 @@ func (_RollupMock *RollupMockFilterer) ParseZombieTriggered(log types.Log) (*Rol return event, nil } +// TestTokenMetaData contains all meta data concerning the TestToken contract. +var TestTokenMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162000d4238038062000d4283398101604081905262000034916200019a565b604051806040016040528060098152602001682a32b9ba2a37b5b2b760b91b81525060405180604001604052806002815260200161151560f21b815250816003908162000082919062000258565b50600462000091828262000258565b505050620000a63382620000ad60201b60201c565b506200034c565b6001600160a01b038216620001085760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200011c919062000324565b90915550506001600160a01b038216600090815260208190526040812080548392906200014b90849062000324565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b600060208284031215620001ad57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001df57607f821691505b6020821081036200020057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019557600081815260208120601f850160051c810160208610156200022f5750805b601f850160051c820191505b8181101562000250578281556001016200023b565b505050505050565b81516001600160401b03811115620002745762000274620001b4565b6200028c81620002858454620001ca565b8462000206565b602080601f831160018114620002c45760008415620002ab5750858301515b600019600386901b1c1916600185901b17855562000250565b600085815260208120601f198616915b82811015620002f557888601518255948401946001909101908401620002d4565b5085821015620003145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200034657634e487b7160e01b600052601160045260246000fd5b92915050565b6109e6806200035c6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610187578063a9059cbb1461019a578063dd62ed3e146101ad57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461017f57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d66101e6565b6040516100e391906107e0565b60405180910390f35b6100ff6100fa366004610868565b610278565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f366004610892565b610292565b604051601281526020016100e3565b6100ff610151366004610868565b6102b6565b6101136101643660046108ce565b6001600160a01b031660009081526020819052604090205490565b6100d66102f5565b6100ff610195366004610868565b610304565b6100ff6101a8366004610868565b6103b3565b6101136101bb3660046108f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f590610923565b80601f016020809104026020016040519081016040528092919081815260200182805461022190610923565b801561026e5780601f106102435761010080835404028352916020019161026e565b820191906000526020600020905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b6000336102868185856103c1565b60019150505b92915050565b6000336102a0858285610519565b6102ab8585856105c9565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061028690829086906102f0908790610976565b6103c1565b6060600480546101f590610923565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156103a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ab82868684036103c1565b6000336102868185856105c9565b6001600160a01b03831661043c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161039d565b6001600160a01b0382166104b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161039d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105c357818110156105b65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161039d565b6105c384848484036103c1565b50505050565b6001600160a01b0383166106455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161039d565b6001600160a01b0382166106c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161039d565b6001600160a01b038316600090815260208190526040902054818110156107505760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161039d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610787908490610976565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107d391815260200190565b60405180910390a36105c3565b600060208083528351808285015260005b8181101561080d578581018301518582016040015282016107f1565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80356001600160a01b038116811461086357600080fd5b919050565b6000806040838503121561087b57600080fd5b6108848361084c565b946020939093013593505050565b6000806000606084860312156108a757600080fd5b6108b08461084c565b92506108be6020850161084c565b9150604084013590509250925092565b6000602082840312156108e057600080fd5b6108e98261084c565b9392505050565b6000806040838503121561090357600080fd5b61090c8361084c565b915061091a6020840161084c565b90509250929050565b600181811c9082168061093757607f821691505b602082108103610970577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220dae20d256ed58deb03c3e523c577c150397283006a35da4c09547ffba3ebd58d64736f6c63430008110033", +} + +// TestTokenABI is the input ABI used to generate the binding from. +// Deprecated: Use TestTokenMetaData.ABI instead. +var TestTokenABI = TestTokenMetaData.ABI + +// TestTokenBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use TestTokenMetaData.Bin instead. +var TestTokenBin = TestTokenMetaData.Bin + +// DeployTestToken deploys a new Ethereum contract, binding an instance of TestToken to it. +func DeployTestToken(auth *bind.TransactOpts, backend bind.ContractBackend, initialSupply *big.Int) (common.Address, *types.Transaction, *TestToken, error) { + parsed, err := TestTokenMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TestTokenBin), backend, initialSupply) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TestToken{TestTokenCaller: TestTokenCaller{contract: contract}, TestTokenTransactor: TestTokenTransactor{contract: contract}, TestTokenFilterer: TestTokenFilterer{contract: contract}}, nil +} + +// TestToken is an auto generated Go binding around an Ethereum contract. +type TestToken struct { + TestTokenCaller // Read-only binding to the contract + TestTokenTransactor // Write-only binding to the contract + TestTokenFilterer // Log filterer for contract events +} + +// TestTokenCaller is an auto generated read-only Go binding around an Ethereum contract. +type TestTokenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TestTokenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TestTokenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TestTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TestTokenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TestTokenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TestTokenSession struct { + Contract *TestToken // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TestTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TestTokenCallerSession struct { + Contract *TestTokenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TestTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TestTokenTransactorSession struct { + Contract *TestTokenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TestTokenRaw is an auto generated low-level Go binding around an Ethereum contract. +type TestTokenRaw struct { + Contract *TestToken // Generic contract binding to access the raw methods on +} + +// TestTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TestTokenCallerRaw struct { + Contract *TestTokenCaller // Generic read-only contract binding to access the raw methods on +} + +// TestTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TestTokenTransactorRaw struct { + Contract *TestTokenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTestToken creates a new instance of TestToken, bound to a specific deployed contract. +func NewTestToken(address common.Address, backend bind.ContractBackend) (*TestToken, error) { + contract, err := bindTestToken(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TestToken{TestTokenCaller: TestTokenCaller{contract: contract}, TestTokenTransactor: TestTokenTransactor{contract: contract}, TestTokenFilterer: TestTokenFilterer{contract: contract}}, nil +} + +// NewTestTokenCaller creates a new read-only instance of TestToken, bound to a specific deployed contract. +func NewTestTokenCaller(address common.Address, caller bind.ContractCaller) (*TestTokenCaller, error) { + contract, err := bindTestToken(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TestTokenCaller{contract: contract}, nil +} + +// NewTestTokenTransactor creates a new write-only instance of TestToken, bound to a specific deployed contract. +func NewTestTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*TestTokenTransactor, error) { + contract, err := bindTestToken(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TestTokenTransactor{contract: contract}, nil +} + +// NewTestTokenFilterer creates a new log filterer instance of TestToken, bound to a specific deployed contract. +func NewTestTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*TestTokenFilterer, error) { + contract, err := bindTestToken(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TestTokenFilterer{contract: contract}, nil +} + +// bindTestToken binds a generic wrapper to an already deployed contract. +func bindTestToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TestTokenMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TestToken *TestTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TestToken.Contract.TestTokenCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TestToken *TestTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TestToken.Contract.TestTokenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TestToken *TestTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TestToken.Contract.TestTokenTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TestToken *TestTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TestToken.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TestToken *TestTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TestToken.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TestToken *TestTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TestToken.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_TestToken *TestTokenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_TestToken *TestTokenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TestToken.Contract.Allowance(&_TestToken.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_TestToken *TestTokenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TestToken.Contract.Allowance(&_TestToken.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_TestToken *TestTokenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_TestToken *TestTokenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _TestToken.Contract.BalanceOf(&_TestToken.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_TestToken *TestTokenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _TestToken.Contract.BalanceOf(&_TestToken.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_TestToken *TestTokenCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_TestToken *TestTokenSession) Decimals() (uint8, error) { + return _TestToken.Contract.Decimals(&_TestToken.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_TestToken *TestTokenCallerSession) Decimals() (uint8, error) { + return _TestToken.Contract.Decimals(&_TestToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_TestToken *TestTokenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_TestToken *TestTokenSession) Name() (string, error) { + return _TestToken.Contract.Name(&_TestToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_TestToken *TestTokenCallerSession) Name() (string, error) { + return _TestToken.Contract.Name(&_TestToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_TestToken *TestTokenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_TestToken *TestTokenSession) Symbol() (string, error) { + return _TestToken.Contract.Symbol(&_TestToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_TestToken *TestTokenCallerSession) Symbol() (string, error) { + return _TestToken.Contract.Symbol(&_TestToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_TestToken *TestTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _TestToken.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_TestToken *TestTokenSession) TotalSupply() (*big.Int, error) { + return _TestToken.Contract.TotalSupply(&_TestToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_TestToken *TestTokenCallerSession) TotalSupply() (*big.Int, error) { + return _TestToken.Contract.TotalSupply(&_TestToken.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_TestToken *TestTokenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.Approve(&_TestToken.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.Approve(&_TestToken.TransactOpts, spender, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_TestToken *TestTokenTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _TestToken.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_TestToken *TestTokenSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.DecreaseAllowance(&_TestToken.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_TestToken *TestTokenTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.DecreaseAllowance(&_TestToken.TransactOpts, spender, subtractedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestToken *TestTokenTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestToken.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestToken *TestTokenSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.IncreaseAllowance(&_TestToken.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_TestToken *TestTokenTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.IncreaseAllowance(&_TestToken.TransactOpts, spender, addedValue) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.Transfer(&_TestToken.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.Transfer(&_TestToken.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.TransferFrom(&_TestToken.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_TestToken *TestTokenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _TestToken.Contract.TransferFrom(&_TestToken.TransactOpts, from, to, amount) +} + +// TestTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the TestToken contract. +type TestTokenApprovalIterator struct { + Event *TestTokenApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TestTokenApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TestTokenApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TestTokenApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TestTokenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TestTokenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TestTokenApproval represents a Approval event raised by the TestToken contract. +type TestTokenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestToken *TestTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TestTokenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TestToken.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &TestTokenApprovalIterator{contract: _TestToken.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestToken *TestTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TestTokenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TestToken.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TestTokenApproval) + if err := _TestToken.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_TestToken *TestTokenFilterer) ParseApproval(log types.Log) (*TestTokenApproval, error) { + event := new(TestTokenApproval) + if err := _TestToken.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// TestTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the TestToken contract. +type TestTokenTransferIterator struct { + Event *TestTokenTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TestTokenTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TestTokenTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TestTokenTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TestTokenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TestTokenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TestTokenTransfer represents a Transfer event raised by the TestToken contract. +type TestTokenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestToken *TestTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TestTokenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TestToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &TestTokenTransferIterator{contract: _TestToken.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestToken *TestTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TestTokenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TestToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TestTokenTransfer) + if err := _TestToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_TestToken *TestTokenFilterer) ParseTransfer(log types.Log) (*TestTokenTransfer, error) { + event := new(TestTokenTransfer) + if err := _TestToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ValueArrayTesterMetaData contains all meta data concerning the ValueArrayTester contract. var ValueArrayTesterMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"test\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061080a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861003a565b005b6040805160026020820181815260808301845260009383929083015b604080518082019091526000808252602082015281526020019060019003908161005657505090528051519091506002146100d85760405162461bcd60e51b815260206004820152600960248201527f53544152545f4c454e000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60408051808201825260008082526020918201819052825180840190935280835260019183019190915261010f915b8391906104b9565b604080518082018252600080825260209182018190528251808401909352825260029082015261014190600190610107565b60408051808201825260008082526020918201819052825180840190935282526003908201526101729082906104e0565b8051516003146101c45760405162461bcd60e51b815260206004820152600860248201527f505553485f4c454e00000000000000000000000000000000000000000000000060448201526064016100cf565b60005b8151518110156102b15760006101dd83836105d4565b90506000815160068111156101f4576101f4610734565b146102415760405162461bcd60e51b815260206004820152600d60248201527f505553485f56414c5f545950450000000000000000000000000000000000000060448201526064016100cf565b61024c826001610760565b81602001511461029e5760405162461bcd60e51b815260206004820152601160248201527f505553485f56414c5f434f4e54454e545300000000000000000000000000000060448201526064016100cf565b50806102a981610773565b9150506101c7565b5060006102bd8261060d565b90506000815160068111156102d4576102d4610734565b146103215760405162461bcd60e51b815260206004820152600c60248201527f504f505f5245545f54595045000000000000000000000000000000000000000060448201526064016100cf565b80602001516003146103755760405162461bcd60e51b815260206004820152601060248201527f504f505f5245545f434f4e54454e54530000000000000000000000000000000060448201526064016100cf565b8151516002146103c75760405162461bcd60e51b815260206004820152600760248201527f504f505f4c454e0000000000000000000000000000000000000000000000000060448201526064016100cf565b60005b8251518110156104b45760006103e084836105d4565b90506000815160068111156103f7576103f7610734565b146104445760405162461bcd60e51b815260206004820152600c60248201527f504f505f56414c5f54595045000000000000000000000000000000000000000060448201526064016100cf565b61044f826001610760565b8160200151146104a15760405162461bcd60e51b815260206004820152601060248201527f504f505f56414c5f434f4e54454e54530000000000000000000000000000000060448201526064016100cf565b50806104ac81610773565b9150506103ca565b505050565b80836000015183815181106104d0576104d06107ab565b6020026020010181905250505050565b8151516000906104f1906001610760565b67ffffffffffffffff8111156105095761050961071e565b60405190808252806020026020018201604052801561054e57816020015b60408051808201909152600080825260208201528152602001906001900390816105275790505b50905060005b8351518110156105aa578351805182908110610572576105726107ab565b602002602001015182828151811061058c5761058c6107ab565b602002602001018190525080806105a290610773565b915050610554565b508181846000015151815181106105c3576105c36107ab565b602090810291909101015290915250565b604080518082019091526000808252602082015282518051839081106105fc576105fc6107ab565b602002602001015190505b92915050565b604080518082019091526000808252602082015281518051610631906001906107c1565b81518110610641576106416107ab565b602002602001015190506000600183600001515161065f91906107c1565b67ffffffffffffffff8111156106775761067761071e565b6040519080825280602002602001820160405280156106bc57816020015b60408051808201909152600080825260208201528152602001906001900390816106955790505b50905060005b81518110156107175783518051829081106106df576106df6107ab565b60200260200101518282815181106106f9576106f96107ab565b6020026020010181905250808061070f90610773565b9150506106c2565b5090915290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106075761060761074a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036107a4576107a461074a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156106075761060761074a56fea2646970667358221220998f8916386b0d930286fafab271d8338de849670f2ee895dbcbef104a61d0cd64736f6c63430008110033", + Bin: "0x608060405234801561001057600080fd5b5061080a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f8a8fd6d14610030575b600080fd5b61003861003a565b005b6040805160026020820181815260808301845260009383929083015b604080518082019091526000808252602082015281526020019060019003908161005657505090528051519091506002146100d85760405162461bcd60e51b815260206004820152600960248201527f53544152545f4c454e000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60408051808201825260008082526020918201819052825180840190935280835260019183019190915261010f915b8391906104b9565b604080518082018252600080825260209182018190528251808401909352825260029082015261014190600190610107565b60408051808201825260008082526020918201819052825180840190935282526003908201526101729082906104e0565b8051516003146101c45760405162461bcd60e51b815260206004820152600860248201527f505553485f4c454e00000000000000000000000000000000000000000000000060448201526064016100cf565b60005b8151518110156102b15760006101dd83836105d4565b90506000815160068111156101f4576101f4610734565b146102415760405162461bcd60e51b815260206004820152600d60248201527f505553485f56414c5f545950450000000000000000000000000000000000000060448201526064016100cf565b61024c826001610760565b81602001511461029e5760405162461bcd60e51b815260206004820152601160248201527f505553485f56414c5f434f4e54454e545300000000000000000000000000000060448201526064016100cf565b50806102a981610773565b9150506101c7565b5060006102bd8261060d565b90506000815160068111156102d4576102d4610734565b146103215760405162461bcd60e51b815260206004820152600c60248201527f504f505f5245545f54595045000000000000000000000000000000000000000060448201526064016100cf565b80602001516003146103755760405162461bcd60e51b815260206004820152601060248201527f504f505f5245545f434f4e54454e54530000000000000000000000000000000060448201526064016100cf565b8151516002146103c75760405162461bcd60e51b815260206004820152600760248201527f504f505f4c454e0000000000000000000000000000000000000000000000000060448201526064016100cf565b60005b8251518110156104b45760006103e084836105d4565b90506000815160068111156103f7576103f7610734565b146104445760405162461bcd60e51b815260206004820152600c60248201527f504f505f56414c5f54595045000000000000000000000000000000000000000060448201526064016100cf565b61044f826001610760565b8160200151146104a15760405162461bcd60e51b815260206004820152601060248201527f504f505f56414c5f434f4e54454e54530000000000000000000000000000000060448201526064016100cf565b50806104ac81610773565b9150506103ca565b505050565b80836000015183815181106104d0576104d06107ab565b6020026020010181905250505050565b8151516000906104f1906001610760565b67ffffffffffffffff8111156105095761050961071e565b60405190808252806020026020018201604052801561054e57816020015b60408051808201909152600080825260208201528152602001906001900390816105275790505b50905060005b8351518110156105aa578351805182908110610572576105726107ab565b602002602001015182828151811061058c5761058c6107ab565b602002602001018190525080806105a290610773565b915050610554565b508181846000015151815181106105c3576105c36107ab565b602090810291909101015290915250565b604080518082019091526000808252602082015282518051839081106105fc576105fc6107ab565b602002602001015190505b92915050565b604080518082019091526000808252602082015281518051610631906001906107c1565b81518110610641576106416107ab565b602002602001015190506000600183600001515161065f91906107c1565b67ffffffffffffffff8111156106775761067761071e565b6040519080825280602002602001820160405280156106bc57816020015b60408051808201909152600080825260208201528152602001906001900390816106955790505b50905060005b81518110156107175783518051829081106106df576106df6107ab565b60200260200101518282815181106106f9576106f96107ab565b6020026020010181905250808061070f90610773565b9150506106c2565b5090915290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106075761060761074a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036107a4576107a461074a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b818103818111156106075761060761074a56fea26469706673582212204884ea0aba2c0dd9cc445d4400c3fe4437d979339fddb3fac306d0d7231498d064736f6c63430008110033", } // ValueArrayTesterABI is the input ABI used to generate the binding from. diff --git a/solgen/go/yulgen/BUILD.bazel b/solgen/go/yulgen/BUILD.bazel new file mode 100644 index 000000000..e472e279c --- /dev/null +++ b/solgen/go/yulgen/BUILD.bazel @@ -0,0 +1,16 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "yulgen", + srcs = ["yulgen.go"], + importpath = "github.com/OffchainLabs/bold/solgen/go/yulgen", + visibility = ["//visibility:public"], + deps = [ + "@com_github_ethereum_go_ethereum//:go-ethereum", + "@com_github_ethereum_go_ethereum//accounts/abi", + "@com_github_ethereum_go_ethereum//accounts/abi/bind", + "@com_github_ethereum_go_ethereum//common", + "@com_github_ethereum_go_ethereum//core/types", + "@com_github_ethereum_go_ethereum//event", + ], +) diff --git a/solgen/go/yulgen/yulgen.go b/solgen/go/yulgen/yulgen.go new file mode 100644 index 000000000..9af6150be --- /dev/null +++ b/solgen/go/yulgen/yulgen.go @@ -0,0 +1,203 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package yulgen + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Reader4844MetaData contains all meta data concerning the Reader4844 contract. +var Reader4844MetaData = &bind.MetaData{ + ABI: "null", + Bin: "0x605b80600c6000396000f3fe346056576000803560e01c8063e83a2d8214602857631f6d6ef71460205780fd5b6020904a8152f35b50805b804990811560435760019160408260051b015201602b565b60409150602083528060205260051b0190f35b600080fd", +} + +// Reader4844ABI is the input ABI used to generate the binding from. +// Deprecated: Use Reader4844MetaData.ABI instead. +var Reader4844ABI = Reader4844MetaData.ABI + +// Reader4844Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use Reader4844MetaData.Bin instead. +var Reader4844Bin = Reader4844MetaData.Bin + +// DeployReader4844 deploys a new Ethereum contract, binding an instance of Reader4844 to it. +func DeployReader4844(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Reader4844, error) { + parsed, err := Reader4844MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(Reader4844Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Reader4844{Reader4844Caller: Reader4844Caller{contract: contract}, Reader4844Transactor: Reader4844Transactor{contract: contract}, Reader4844Filterer: Reader4844Filterer{contract: contract}}, nil +} + +// Reader4844 is an auto generated Go binding around an Ethereum contract. +type Reader4844 struct { + Reader4844Caller // Read-only binding to the contract + Reader4844Transactor // Write-only binding to the contract + Reader4844Filterer // Log filterer for contract events +} + +// Reader4844Caller is an auto generated read-only Go binding around an Ethereum contract. +type Reader4844Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Reader4844Transactor is an auto generated write-only Go binding around an Ethereum contract. +type Reader4844Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Reader4844Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type Reader4844Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// Reader4844Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type Reader4844Session struct { + Contract *Reader4844 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// Reader4844CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type Reader4844CallerSession struct { + Contract *Reader4844Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// Reader4844TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type Reader4844TransactorSession struct { + Contract *Reader4844Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// Reader4844Raw is an auto generated low-level Go binding around an Ethereum contract. +type Reader4844Raw struct { + Contract *Reader4844 // Generic contract binding to access the raw methods on +} + +// Reader4844CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type Reader4844CallerRaw struct { + Contract *Reader4844Caller // Generic read-only contract binding to access the raw methods on +} + +// Reader4844TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type Reader4844TransactorRaw struct { + Contract *Reader4844Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewReader4844 creates a new instance of Reader4844, bound to a specific deployed contract. +func NewReader4844(address common.Address, backend bind.ContractBackend) (*Reader4844, error) { + contract, err := bindReader4844(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Reader4844{Reader4844Caller: Reader4844Caller{contract: contract}, Reader4844Transactor: Reader4844Transactor{contract: contract}, Reader4844Filterer: Reader4844Filterer{contract: contract}}, nil +} + +// NewReader4844Caller creates a new read-only instance of Reader4844, bound to a specific deployed contract. +func NewReader4844Caller(address common.Address, caller bind.ContractCaller) (*Reader4844Caller, error) { + contract, err := bindReader4844(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &Reader4844Caller{contract: contract}, nil +} + +// NewReader4844Transactor creates a new write-only instance of Reader4844, bound to a specific deployed contract. +func NewReader4844Transactor(address common.Address, transactor bind.ContractTransactor) (*Reader4844Transactor, error) { + contract, err := bindReader4844(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &Reader4844Transactor{contract: contract}, nil +} + +// NewReader4844Filterer creates a new log filterer instance of Reader4844, bound to a specific deployed contract. +func NewReader4844Filterer(address common.Address, filterer bind.ContractFilterer) (*Reader4844Filterer, error) { + contract, err := bindReader4844(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &Reader4844Filterer{contract: contract}, nil +} + +// bindReader4844 binds a generic wrapper to an already deployed contract. +func bindReader4844(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := Reader4844MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Reader4844 *Reader4844Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Reader4844.Contract.Reader4844Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Reader4844 *Reader4844Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Reader4844.Contract.Reader4844Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Reader4844 *Reader4844Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Reader4844.Contract.Reader4844Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Reader4844 *Reader4844CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Reader4844.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Reader4844 *Reader4844TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Reader4844.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Reader4844 *Reader4844TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Reader4844.Contract.contract.Transact(opts, method, params...) +} diff --git a/solgen/main.go b/solgen/main.go index 59b652e7e..742e2ec62 100644 --- a/solgen/main.go +++ b/solgen/main.go @@ -23,6 +23,15 @@ type HardHatArtifact struct { Bytecode string `json:"bytecode"` } +type FoundryBytecode struct { + Object string `json:"object"` +} + +type FoundryArtifact struct { + Abi []interface{} `json:"abi"` + Bytecode FoundryBytecode `json:"bytecode"` +} + type moduleInfo struct { contractNames []string abis []string @@ -82,14 +91,14 @@ func main() { name := file[:len(file)-5] //#nosec G304 - data, err := os.ReadFile(path) - if err != nil { - log.Fatal("could not read", path, "for contract", name, err) + data, innerErr := os.ReadFile(path) + if innerErr != nil { + log.Fatal("could not read", path, "for contract", name, innerErr) } artifact := HardHatArtifact{} - if err := json.Unmarshal(data, &artifact); err != nil { - log.Fatal("errored when parsing contract", name, err) + if err2 := json.Unmarshal(data, &artifact); err2 != nil { + log.Fatal("errored when parsing contract", name, err2) } modInfo := modules[module] if modInfo == nil { @@ -99,6 +108,36 @@ func main() { modInfo.addArtifact(artifact) } + yulFilePaths, err := filepath.Glob(filepath.Join(parent, "contracts", "out", "yul", "*", "*.json")) + if err != nil { + log.Fatal(err) + } + yulModInfo := modules["yulgen"] + if yulModInfo == nil { + yulModInfo = &moduleInfo{} + modules["yulgen"] = yulModInfo + } + for _, path := range yulFilePaths { + _, file := filepath.Split(path) + name := file[:len(file)-5] + + //#nosec G304 + data, err := os.ReadFile(path) + if err != nil { + log.Fatal("could not read", path, "for contract", name, err) + } + + artifact := FoundryArtifact{} + if err := json.Unmarshal(data, &artifact); err != nil { + log.Fatal("failed to parse contract", name, err) + } + yulModInfo.addArtifact(HardHatArtifact{ + ContractName: name, + Abi: artifact.Abi, + Bytecode: artifact.Bytecode.Object, + }) + } + for module, info := range modules { code, err := bind.Bind( info.contractNames, diff --git a/testing/endtoend/BUILD.bazel b/testing/endtoend/BUILD.bazel index c48b327dc..7e074c5dd 100644 --- a/testing/endtoend/BUILD.bazel +++ b/testing/endtoend/BUILD.bazel @@ -28,6 +28,7 @@ go_test( "//challenge-manager", "//challenge-manager/types", "//layer2-state-provider", + "//solgen/go/bridgegen", "//solgen/go/mocksgen", "//solgen/go/rollupgen", "//testing", @@ -36,6 +37,7 @@ go_test( "//testing/setup:setup_lib", "//util", "@com_github_ethereum_go_ethereum//:go-ethereum", + "@com_github_ethereum_go_ethereum//accounts/abi", "@com_github_ethereum_go_ethereum//accounts/abi/bind", "@com_github_ethereum_go_ethereum//common", "@com_github_ethereum_go_ethereum//core/types", diff --git a/testing/endtoend/backend/anvil_local.go b/testing/endtoend/backend/anvil_local.go index 92ab4b347..fcae373f3 100644 --- a/testing/endtoend/backend/anvil_local.go +++ b/testing/endtoend/backend/anvil_local.go @@ -164,7 +164,7 @@ func (a *AnvilLocal) Commit() common.Hash { return common.Hash{} } -func (a *AnvilLocal) DeployRollup(ctx context.Context, opts ...challenge_testing.Opt) (common.Address, error) { +func (a *AnvilLocal) DeployRollup(ctx context.Context, opts ...challenge_testing.Opt) (*setup.RollupAddresses, error) { prod := false wasmModuleRoot := common.Hash{} rollupOwner := a.accounts[0].From @@ -183,17 +183,17 @@ func (a *AnvilLocal) DeployRollup(ctx context.Context, opts ...challenge_testing "WETH", ) if err != nil { - return common.Address{}, errors.Wrap(err, "could not deploy test weth") + return nil, errors.Wrap(err, "could not deploy test weth") } if waitErr := challenge_testing.WaitForTx(ctx, a.client, tx); waitErr != nil { - return common.Address{}, errors.Wrap(waitErr, "errored waiting for transaction") + return nil, errors.Wrap(waitErr, "errored waiting for transaction") } receipt, err := a.client.TransactionReceipt(ctx, tx.Hash()) if err != nil { - return common.Address{}, errors.Wrap(err, "could not get tx hash") + return nil, errors.Wrap(err, "could not get tx hash") } if receipt.Status != types.ReceiptStatusSuccessful { - return common.Address{}, errors.New("receipt not successful") + return nil, errors.New("receipt not successful") } miniStakeValues := []*big.Int{ @@ -223,89 +223,89 @@ func (a *AnvilLocal) DeployRollup(ctx context.Context, opts ...challenge_testing true, // Use a mock one step prover entry. ) if err != nil { - return common.Address{}, errors.Wrap(err, "could not deploy rollup stack") + return nil, errors.Wrap(err, "could not deploy rollup stack") } value, ok := new(big.Int).SetString("100000", 10) if !ok { - return common.Address{}, errors.New("could not set value") + return nil, errors.New("could not set value") } a.accounts[0].Value = value mintTx, err := tokenBindings.Deposit(a.accounts[0]) if err != nil { - return common.Address{}, errors.Wrap(err, "could not mint test weth") + return nil, errors.Wrap(err, "could not mint test weth") } if waitErr := challenge_testing.WaitForTx(ctx, a.client, mintTx); waitErr != nil { - return common.Address{}, errors.Wrap(waitErr, "errored waiting for transaction") + return nil, errors.Wrap(waitErr, "errored waiting for transaction") } receipt, err = a.client.TransactionReceipt(ctx, mintTx.Hash()) if err != nil { - return common.Address{}, errors.Wrap(err, "could not get tx hash") + return nil, errors.Wrap(err, "could not get tx hash") } if receipt.Status != types.ReceiptStatusSuccessful { - return common.Address{}, errors.New("receipt errored") + return nil, errors.New("receipt errored") } a.accounts[0].Value = big.NewInt(0) rollupCaller, err := rollupgen.NewRollupUserLogicCaller(result.Rollup, a.client) if err != nil { - return common.Address{}, err + return nil, err } chalManagerAddr, err := rollupCaller.ChallengeManager(util.GetSafeCallOpts(&bind.CallOpts{})) if err != nil { - return common.Address{}, err + return nil, err } seed, ok := new(big.Int).SetString("1000", 10) if !ok { - return common.Address{}, errors.New("could not set big int") + return nil, errors.New("could not set big int") } for _, acc := range a.accounts[1:] { transferTx, err := tokenBindings.TestWETH9Transactor.Transfer(a.accounts[0], acc.From, seed) if err != nil { - return common.Address{}, errors.Wrap(err, "could not approve account") + return nil, errors.Wrap(err, "could not approve account") } if waitErr := challenge_testing.WaitForTx(ctx, a.client, transferTx); waitErr != nil { - return common.Address{}, errors.Wrap(waitErr, "errored waiting for transfer transaction") + return nil, errors.Wrap(waitErr, "errored waiting for transfer transaction") } receipt, err := a.client.TransactionReceipt(ctx, transferTx.Hash()) if err != nil { - return common.Address{}, errors.Wrap(err, "could not get tx receipt") + return nil, errors.Wrap(err, "could not get tx receipt") } if receipt.Status != types.ReceiptStatusSuccessful { - return common.Address{}, errors.New("receipt not successful") + return nil, errors.New("receipt not successful") } approveTx, err := tokenBindings.TestWETH9Transactor.Approve(acc, result.Rollup, value) if err != nil { - return common.Address{}, errors.Wrap(err, "could not approve account") + return nil, errors.Wrap(err, "could not approve account") } if waitErr := challenge_testing.WaitForTx(ctx, a.client, approveTx); waitErr != nil { - return common.Address{}, errors.Wrap(waitErr, "errored waiting for approval transaction") + return nil, errors.Wrap(waitErr, "errored waiting for approval transaction") } receipt, err = a.client.TransactionReceipt(ctx, approveTx.Hash()) if err != nil { - return common.Address{}, errors.Wrap(err, "could not get tx receipt") + return nil, errors.Wrap(err, "could not get tx receipt") } if receipt.Status != types.ReceiptStatusSuccessful { - return common.Address{}, errors.New("receipt not successful") + return nil, errors.New("receipt not successful") } approveTx, err = tokenBindings.TestWETH9Transactor.Approve(acc, chalManagerAddr, value) if err != nil { - return common.Address{}, errors.Wrap(err, "could not approve account") + return nil, errors.Wrap(err, "could not approve account") } if waitErr := challenge_testing.WaitForTx(ctx, a.client, approveTx); waitErr != nil { - return common.Address{}, errors.Wrap(waitErr, "errored waiting for approval transaction") + return nil, errors.Wrap(waitErr, "errored waiting for approval transaction") } receipt, err = a.client.TransactionReceipt(ctx, approveTx.Hash()) if err != nil { - return common.Address{}, errors.Wrap(err, "could not get tx receipt") + return nil, errors.Wrap(err, "could not get tx receipt") } if receipt.Status != types.ReceiptStatusSuccessful { - return common.Address{}, errors.New("receipt not successful") + return nil, errors.New("receipt not successful") } } a.addresses = result - return result.Rollup, a.MineBlocks(ctx, 100) // At least 100 blocks should be mined for a challenge to be possible. + return result, a.MineBlocks(ctx, 100) // At least 100 blocks should be mined for a challenge to be possible. } // MineBlocks will call anvil to instantly mine n blocks. diff --git a/testing/endtoend/backend/backend.go b/testing/endtoend/backend/backend.go index 492ede7f9..7d39a0c01 100644 --- a/testing/endtoend/backend/backend.go +++ b/testing/endtoend/backend/backend.go @@ -20,7 +20,7 @@ type Backend interface { // Accounts managed by the backend. Accounts() []*bind.TransactOpts // DeployRollup contract, if not already deployed. - DeployRollup(ctx context.Context, opts ...challenge_testing.Opt) (common.Address, error) + DeployRollup(ctx context.Context, opts ...challenge_testing.Opt) (*setup.RollupAddresses, error) // Contract addresses relevant to the challenge protocol. ContractAddresses() *setup.RollupAddresses // Commit a tx to the backend, if possible (simulated backend requires this) diff --git a/testing/endtoend/backend/simulated.go b/testing/endtoend/backend/simulated.go index 2e6639e09..f53e4e784 100644 --- a/testing/endtoend/backend/simulated.go +++ b/testing/endtoend/backend/simulated.go @@ -58,9 +58,9 @@ func (l *LocalSimulatedBackend) ContractAddresses() *setup.RollupAddresses { return l.setup.Addrs } -func (l *LocalSimulatedBackend) DeployRollup(_ context.Context, _ ...challenge_testing.Opt) (common.Address, error) { +func (l *LocalSimulatedBackend) DeployRollup(_ context.Context, _ ...challenge_testing.Opt) (*setup.RollupAddresses, error) { // No-op, as the sim backend deploys the rollup on initialization. - return l.setup.Addrs.Rollup, nil + return l.setup.Addrs, nil } func NewSimulated(blockTime time.Duration, opts ...setup.Opt) (*LocalSimulatedBackend, error) { diff --git a/testing/endtoend/e2e_test.go b/testing/endtoend/e2e_test.go index 44382e0b2..3da219d8f 100644 --- a/testing/endtoend/e2e_test.go +++ b/testing/endtoend/e2e_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "math/big" + "strings" "testing" "time" @@ -11,13 +12,16 @@ import ( protocol "github.com/OffchainLabs/bold/chain-abstraction" challengemanager "github.com/OffchainLabs/bold/challenge-manager" "github.com/OffchainLabs/bold/challenge-manager/types" + "github.com/OffchainLabs/bold/solgen/go/bridgegen" "github.com/OffchainLabs/bold/solgen/go/mocksgen" "github.com/OffchainLabs/bold/solgen/go/rollupgen" challenge_testing "github.com/OffchainLabs/bold/testing" "github.com/OffchainLabs/bold/testing/endtoend/backend" statemanager "github.com/OffchainLabs/bold/testing/mocks/state-provider" "github.com/OffchainLabs/bold/testing/setup" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) @@ -238,22 +242,22 @@ func runEndToEndTest(t *testing.T, cfg *e2eConfig) { require.NoError(t, bk.Start(ctx)) - rollupAdminBindings, err := rollupgen.NewRollupAdminLogic(rollupAddr, bk.Client()) - require.NoError(t, err) accounts := bk.Accounts() - _, err = rollupAdminBindings.SetMinimumAssertionPeriod(accounts[0], big.NewInt(1)) - require.NoError(t, err) - bk.Commit() - bridgeAddr, err := rollupAdminBindings.Bridge(&bind.CallOpts{}) - require.NoError(t, err) - bridgeBindings, err := mocksgen.NewBridgeStub(bridgeAddr, bk.Client()) + rollupUserBindings, err := rollupgen.NewRollupUserLogic(rollupAddr.Rollup, bk.Client()) require.NoError(t, err) - dataHash := [32]byte{1} - _, err = bridgeBindings.EnqueueSequencerMessage(accounts[0], dataHash, big.NewInt(1), big.NewInt(1), big.NewInt(2)) + bridgeAddr, err := rollupUserBindings.Bridge(&bind.CallOpts{}) require.NoError(t, err) - bk.Commit() + dataHash := common.Hash{1} + enqueueSequencerMessageAsExecutor( + t, accounts[0], rollupAddr.UpgradeExecutor, bk.Client(), bridgeAddr, seqMessage{ + dataHash: dataHash, + afterDelayedMessagesRead: big.NewInt(1), + prevMessageCount: big.NewInt(1), + newMessageCount: big.NewInt(2), + }, + ) baseStateManagerOpts := []statemanager.Opt{ statemanager.WithNumBatchesRead(cfg.inbox.numBatchesPosted), @@ -278,7 +282,7 @@ func runEndToEndTest(t *testing.T, cfg *e2eConfig) { challengemanager.WithName(name), ) honestManager := setupChallengeManager( - t, ctx, bk.Client(), rollupAddr, honestStateManager, txOpts, name, honestOpts..., + t, ctx, bk.Client(), rollupAddr.Rollup, honestStateManager, txOpts, name, honestOpts..., ) if !api.IsNil(honestManager.Database()) { honestStateManager.UpdateAPIDatabase(honestManager.Database()) @@ -312,7 +316,7 @@ func runEndToEndTest(t *testing.T, cfg *e2eConfig) { challengemanager.WithName(name), ) evilManager := setupChallengeManager( - t, ctx, bk.Client(), rollupAddr, evilStateManager, txOpts, name, evilOpts..., + t, ctx, bk.Client(), rollupAddr.Rollup, evilStateManager, txOpts, name, evilOpts..., ) evilChallengeManagers[i] = evilManager } @@ -332,3 +336,50 @@ func runEndToEndTest(t *testing.T, cfg *e2eConfig) { } require.NoError(t, g.Wait()) } + +type seqMessage struct { + dataHash common.Hash + afterDelayedMessagesRead *big.Int + prevMessageCount *big.Int + newMessageCount *big.Int +} + +type committer interface { + Commit() common.Hash +} + +func enqueueSequencerMessageAsExecutor( + t *testing.T, + opts *bind.TransactOpts, + executor common.Address, + backend setup.Backend, + bridge common.Address, + msg seqMessage, +) { + execBindings, err := mocksgen.NewUpgradeExecutorMock(executor, backend) + require.NoError(t, err) + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.AbsBridgeABI)) + require.NoError(t, err) + + data, err := seqInboxABI.Pack( + "setSequencerInbox", + executor, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, data) + require.NoError(t, err) + if comm, ok := backend.(committer); ok { + comm.Commit() + } + + seqQueueMsg, err := seqInboxABI.Pack( + "enqueueSequencerMessage", + msg.dataHash, msg.afterDelayedMessagesRead, msg.prevMessageCount, msg.newMessageCount, + ) + require.NoError(t, err) + _, err = execBindings.ExecuteCall(opts, bridge, seqQueueMsg) + require.NoError(t, err) + if comm, ok := backend.(committer); ok { + comm.Commit() + } +} diff --git a/testing/setup/BUILD.bazel b/testing/setup/BUILD.bazel index 8d85dd83a..d123ce0b4 100644 --- a/testing/setup/BUILD.bazel +++ b/testing/setup/BUILD.bazel @@ -16,9 +16,11 @@ go_library( "//solgen/go/mocksgen", "//solgen/go/ospgen", "//solgen/go/rollupgen", + "//solgen/go/yulgen", "//testing", "//testing/mocks/state-provider", "//util", + "@com_github_ethereum_go_ethereum//accounts/abi", "@com_github_ethereum_go_ethereum//accounts/abi/bind", "@com_github_ethereum_go_ethereum//accounts/abi/bind/backends", "@com_github_ethereum_go_ethereum//common", diff --git a/testing/setup/rollup_stack.go b/testing/setup/rollup_stack.go index 39b23450c..9c6bdfde3 100644 --- a/testing/setup/rollup_stack.go +++ b/testing/setup/rollup_stack.go @@ -7,8 +7,10 @@ package setup import ( "context" "crypto/ecdsa" + "fmt" "math/big" "os" + "strings" protocol "github.com/OffchainLabs/bold/chain-abstraction" solimpl "github.com/OffchainLabs/bold/chain-abstraction/sol-implementation" @@ -19,9 +21,11 @@ import ( "github.com/OffchainLabs/bold/solgen/go/mocksgen" "github.com/OffchainLabs/bold/solgen/go/ospgen" "github.com/OffchainLabs/bold/solgen/go/rollupgen" + "github.com/OffchainLabs/bold/solgen/go/yulgen" challenge_testing "github.com/OffchainLabs/bold/testing" statemanager "github.com/OffchainLabs/bold/testing/mocks/state-provider" "github.com/OffchainLabs/bold/util" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" @@ -46,6 +50,10 @@ type Backend interface { TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error) } +type Committer interface { + Commit() common.Hash +} + type CreatedValidatorFork struct { Leaf1 protocol.Assertion Leaf2 protocol.Assertion @@ -177,15 +185,15 @@ type ChainSetup struct { type Opt func(setup *ChainSetup) -func WithMockBridge() Opt { +func WithMockOneStepProver() Opt { return func(setup *ChainSetup) { - setup.useMockBridge = true + setup.useMockOneStepProver = true } } -func WithMockOneStepProver() Opt { +func WithMockBridge() Opt { return func(setup *ChainSetup) { - setup.useMockOneStepProver = true + setup.useMockBridge = false } } @@ -411,6 +419,7 @@ type RollupAddresses struct { RollupUserLogic common.Address `json:"rollup-user-logic"` ValidatorUtils common.Address `json:"validator-utils"` ValidatorWalletCreator common.Address `json:"validator-wallet-creator"` + UpgradeExecutor common.Address `json:"upgrade-executor"` DeployedAt uint64 `json:"deployed-at"` } @@ -433,13 +442,19 @@ func DeployFullRollupStack( tx, err := retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { creationTx, creationErr := rollupCreator.CreateRollup( deployAuth, - config, - common.Address{}, - []common.Address{}, - true, // Permissionless validation. - big.NewInt(challenge_testing.MaxDataSize), + rollupgen.RollupCreatorRollupDeploymentParams{ + Config: config, + Validators: []common.Address{}, + MaxDataSize: big.NewInt(challenge_testing.MaxDataSize), + NativeToken: common.Address{}, + DeployFactoriesToL2: false, + MaxFeePerGasForRetryables: big.NewInt(0), + BatchPosters: []common.Address{}, + BatchPosterManager: common.Address{}, + }, ) if creationErr != nil { + fmt.Println(creationErr) return nil, creationErr } err = challenge_testing.TxSucceeded(ctx, creationTx, rollupCreatorAddress, backend, err) @@ -461,49 +476,63 @@ func DeployFullRollupStack( return nil, err } - sequencerInbox, err := bridgegen.NewSequencerInbox(info.SequencerInbox, backend) + upgradeExecBindings, err := mocksgen.NewUpgradeExecutorMock(info.UpgradeExecutor, backend) if err != nil { return nil, err } - // if a zero sequencer address is specified, don't authorize any sequencers - if sequencer != (common.Address{}) { - srvlog.Info("Setting is batch poster") - _, err = retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { - batchTx, err2 := sequencerInbox.SetIsBatchPoster(deployAuth, sequencer, true) - if err2 != nil { - return nil, err2 - } - if waitErr := challenge_testing.WaitForTx(ctx, backend, batchTx); waitErr != nil { - return nil, errors.Wrap(waitErr, "errored waiting for sequencerInbox.SetIsBatchPoster transaction") - } - return batchTx, nil - }) - if err != nil { - return nil, err - } + rollupABI, err := abi.JSON(strings.NewReader(rollupgen.RollupAdminLogicABI)) + if err != nil { + return nil, err } - - rollup, err := rollupgen.NewRollupAdminLogic(info.RollupAddress, backend) + setWhitelistDisabled, err := rollupABI.Pack("setValidatorWhitelistDisabled", true) if err != nil { return nil, err } - - srvlog.Info("Setting whitelist disabled") - _, err = retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { - setTx, err2 := rollup.SetValidatorWhitelistDisabled(deployAuth, true) + setMinimumAssertionPeriod, err := rollupABI.Pack("setMinimumAssertionPeriod", big.NewInt(0)) + if err != nil { + return nil, err + } + seqInboxABI, err := abi.JSON(strings.NewReader(bridgegen.SequencerInboxABI)) + if err != nil { + return nil, err + } + setBatchPosterManager, err := seqInboxABI.Pack("setBatchPosterManager", deployAuth.From) + if err != nil { + return nil, err + } + txs := map[common.Address][][]byte{ + info.RollupAddress: {setWhitelistDisabled, setMinimumAssertionPeriod}, + info.SequencerInbox: {setBatchPosterManager}, + } + // if a zero sequencer address is specified, don't authorize any sequencers + if sequencer != (common.Address{}) { + setIsBatchPoster, err2 := seqInboxABI.Pack("setIsBatchPoster", deployAuth.From, true) if err2 != nil { return nil, err2 } - if waitErr := challenge_testing.WaitForTx(ctx, backend, setTx); waitErr != nil { - return nil, errors.Wrap(waitErr, "errored waiting for rollup.SetValidatorWhitelistDisabled transaction") + txs[info.SequencerInbox] = append(txs[info.SequencerInbox], setIsBatchPoster) + } + for addr, items := range txs { + for _, item := range items { + _, err = retry.UntilSucceeds(ctx, func() (*types.Transaction, error) { + innerTx, err2 := upgradeExecBindings.ExecuteCall(deployAuth, addr, item) + if err2 != nil { + return nil, err2 + } + if waitErr := challenge_testing.WaitForTx(ctx, backend, innerTx); waitErr != nil { + return nil, errors.Wrap(waitErr, "errored waiting for UpgradeExecutor transaction") + } + return innerTx, nil + }) + if err != nil { + return nil, err + } } - return setTx, nil - }) - if err != nil { - return nil, err } - + if committer, ok := backend.(Committer); ok { + committer.Commit() + } if !creationReceipt.BlockNumber.IsUint64() { return nil, errors.New("block number was not a uint64") } @@ -518,6 +547,7 @@ func DeployFullRollupStack( RollupUserLogic: rollupUserAddr, ValidatorUtils: validatorUtils, ValidatorWalletCreator: validatorWalletCreator, + UpgradeExecutor: info.UpgradeExecutor, }, nil } @@ -552,11 +582,25 @@ func deployBridgeCreator( } } - maxDataSize := big.NewInt(challenge_testing.MaxDataSize) + datahashesReader, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + readerAddr, tx, _, err2 := yulgen.DeployReader4844(auth, backend) + if err2 != nil { + return common.Address{}, err2 + } + err2 = challenge_testing.TxSucceeded(ctx, tx, readerAddr, backend, err2) + if err2 != nil { + return common.Address{}, errors.Wrap(err2, "yulgen.DeployReader4844") + } + return readerAddr, nil + }) + if err != nil { + return common.Address{}, err + } + maxDataSize := big.NewInt(challenge_testing.MaxDataSize) srvlog.Info("Deploying seq inbox") seqInboxTemplate, err := retry.UntilSucceeds[common.Address](ctx, func() (common.Address, error) { - seqInboxTemplateAddr, tx, _, err2 := bridgegen.DeploySequencerInbox(auth, backend, maxDataSize) + seqInboxTemplateAddr, tx, _, err2 := bridgegen.DeploySequencerInbox(auth, backend, maxDataSize, datahashesReader, false /* no fee token */) if err2 != nil { return common.Address{}, err2 } @@ -618,13 +662,62 @@ func deployBridgeCreator( return common.Address{}, err } + ethTemplates := rollupgen.BridgeCreatorBridgeContracts{ + SequencerInbox: seqInboxTemplate, + Bridge: bridgeTemplate, + Inbox: inboxTemplate, + RollupEventInbox: rollupEventBridgeTemplate, + Outbox: outboxTemplate, + } + + /// deploy ERC20 based templates + erc20BridgeTemplate, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + addr, _, _, innerErr := bridgegen.DeployERC20Bridge(auth, backend) + return addr, innerErr + }) + if err != nil { + return common.Address{}, err + } + + erc20InboxTemplate, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + addr, _, _, innerErr := bridgegen.DeployERC20Inbox(auth, backend, maxDataSize) + return addr, innerErr + }) + if err != nil { + return common.Address{}, err + } + + erc20RollupEventBridgeTemplate, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + addr, _, _, innerErr := rollupgen.DeployERC20RollupEventInbox(auth, backend) + return addr, innerErr + }) + if err != nil { + return common.Address{}, err + } + + erc20OutboxTemplate, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + addr, _, _, innerErr := bridgegen.DeployERC20Outbox(auth, backend) + return addr, innerErr + }) + if err != nil { + return common.Address{}, err + } + + erc20Templates := rollupgen.BridgeCreatorBridgeContracts{ + Bridge: erc20BridgeTemplate, + SequencerInbox: seqInboxTemplate, + Inbox: erc20InboxTemplate, + RollupEventInbox: erc20RollupEventBridgeTemplate, + Outbox: erc20OutboxTemplate, + } + type bridgeCreationResult struct { bridgeCreatorAddr common.Address bridgeCreator *rollupgen.BridgeCreator } srvlog.Info("Deploying bridge creator itself") result, err := retry.UntilSucceeds[*bridgeCreationResult](ctx, func() (*bridgeCreationResult, error) { - bridgeCreatorAddr, tx, bridgeCreator, err2 := rollupgen.DeployBridgeCreator(auth, backend, maxDataSize) + bridgeCreatorAddr, tx, bridgeCreator, err2 := rollupgen.DeployBridgeCreator(auth, backend, ethTemplates, erc20Templates) if err2 != nil { return nil, err2 } @@ -643,7 +736,21 @@ func deployBridgeCreator( srvlog.Info("Updating bridge creator templates") _, err = retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { - tx, err2 := result.bridgeCreator.UpdateTemplates(auth, bridgeTemplate, seqInboxTemplate, inboxTemplate, rollupEventBridgeTemplate, outboxTemplate) + tx, err2 := result.bridgeCreator.UpdateTemplates(auth, ethTemplates) + if err2 != nil { + return nil, err2 + } + err2 = challenge_testing.TxSucceeded(ctx, tx, result.bridgeCreatorAddr, backend, err2) + if err2 != nil { + return nil, err2 + } + return tx, nil + }) + if err != nil { + return common.Address{}, err + } + _, err = retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { + tx, err2 := result.bridgeCreator.UpdateERC20Templates(auth, erc20Templates) if err2 != nil { return nil, err2 } @@ -816,7 +923,7 @@ func deployRollupCreator( } srvlog.Info("Deploying validator wallet creator contract") - validatorWalletCreator, err := retry.UntilSucceeds[common.Address](ctx, func() (common.Address, error) { + validatorWalletCreator, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { validatorWalletCreatorAddr, tx, _, err2 := rollupgen.DeployValidatorWalletCreator(auth, backend) if err2 != nil { return common.Address{}, err2 @@ -831,6 +938,22 @@ func deployRollupCreator( return nil, common.Address{}, common.Address{}, common.Address{}, common.Address{}, err } + srvlog.Info("Deploying upgrade executor mock") + upgradeExecutor, err := retry.UntilSucceeds(ctx, func() (common.Address, error) { + upgradeExecutorAddr, tx, _, err2 := mocksgen.DeployUpgradeExecutorMock(auth, backend) + if err2 != nil { + return common.Address{}, err2 + } + err2 = challenge_testing.TxSucceeded(ctx, tx, upgradeExecutorAddr, backend, err2) + if err2 != nil { + return common.Address{}, err2 + } + return upgradeExecutorAddr, nil + }) + if err != nil { + return nil, common.Address{}, common.Address{}, common.Address{}, common.Address{}, err + } + srvlog.Info("Setting rollup templates") _, err = retry.UntilSucceeds[*types.Transaction](ctx, func() (*types.Transaction, error) { tx, err2 := result.rollupCreator.SetTemplates( @@ -840,7 +963,9 @@ func deployRollupCreator( challengeManagerAddr, rollupAdminLogic, rollupUserLogic, + upgradeExecutor, validatorWalletCreator, + common.Address{}, ) if err2 != nil { return nil, err2