From adc47f408282c25c7a50c26e31130fc495734dcc Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:05:13 +0800 Subject: [PATCH 01/56] refactor(protocol): restructure solidity code to match compilation targets (#18059) Co-authored-by: dantaik Co-authored-by: gavin Co-authored-by: David --- .github/workflows/protocol.yml | 16 +- .gitignore | 1 - .release-please-manifest.json | 2 +- _typos.toml | 4 +- packages/protocol/.eslintignore | 5 +- packages/protocol/.gitignore | 1 + packages/protocol/.solhint.json | 2 +- packages/protocol/.solhintignore | 8 +- packages/protocol/CHANGELOG.md | 115 ------------ packages/protocol/README.md | 162 +++++++++-------- packages/protocol/contract_layout_layer1.md | 172 +++++++++--------- packages/protocol/contract_layout_layer2.md | 68 +++---- .../AutomataDcapV3Attestation.sol | 4 +- .../automata-attestation/README.md | 0 .../interfaces/IAttestation.sol | 2 +- .../interfaces/ISigVerifyLib.sol | 2 +- .../lib/EnclaveIdStruct.sol | 2 +- .../lib/PEMCertChainLib.sol | 2 +- .../lib/QuoteV3Auth/V3Parser.sol | 2 +- .../lib/QuoteV3Auth/V3Struct.sol | 2 +- .../lib/TCBInfoStruct.sol | 2 +- .../lib/interfaces/IPEMCertChainLib.sol | 2 +- .../automata-attestation/utils/Asn1Decode.sol | 2 +- .../automata-attestation/utils/BytesUtils.sol | 2 +- .../automata-attestation/utils/SHA1.sol | 2 +- .../utils/SigVerifyLib.sol | 2 +- .../utils/X509DateUtils.sol | 2 +- .../{L1 => layer1/based}/ITaikoL1.sol | 2 +- .../{L1/libs => layer1/based}/LibBonds.sol | 8 +- .../{L1/libs => layer1/based}/LibData.sol | 8 +- .../libs => layer1/based}/LibProposing.sol | 17 +- .../{L1/libs => layer1/based}/LibProving.sol | 4 +- .../{L1/libs => layer1/based}/LibUtils.sol | 10 +- .../libs => layer1/based}/LibVerifying.sol | 4 +- .../{L1 => layer1/based}/TaikoData.sol | 17 +- .../{L1 => layer1/based}/TaikoEvents.sol | 2 +- .../{L1 => layer1/based}/TaikoL1.sol | 14 +- .../{ => layer1}/devnet/DevnetTaikoL1.sol | 6 +- .../devnet}/DevnetTierProvider.sol | 6 +- .../{ => layer1}/hekla/HeklaTaikoL1.sol | 6 +- .../{ => layer1}/hekla/HeklaTierProvider.sol | 6 +- .../contracts/{ => layer1}/mainnet/README.md | 0 .../mainnet/addrcache/AddressCache.sol | 2 +- .../mainnet/addrcache/RollupAddressCache.sol | 6 +- .../mainnet/addrcache/SharedAddressCache.sol | 6 +- .../mainnet/multirollup/MainnetBridge.sol | 53 ++++++ .../multirollup}/MainnetERC1155Vault.sol | 13 +- .../multirollup}/MainnetERC20Vault.sol | 13 +- .../multirollup}/MainnetERC721Vault.sol | 13 +- .../MainnetSharedAddressManager.sol | 15 +- .../multirollup}/MainnetSignalService.sol | 13 +- .../reentrylock/LibFasterReentryLock.sol | 26 +++ .../mainnet/rollup/MainnetGuardianProver.sol | 15 +- .../mainnet/rollup/MainnetProverSet.sol | 13 +- .../rollup/MainnetRollupAddressManager.sol | 15 +- .../mainnet/rollup/MainnetTaikoL1.sol | 15 +- .../mainnet/rollup/MainnetTierRouter.sol | 4 +- .../rollup/verifiers/MainnetRisc0Verifier.sol | 11 +- .../rollup/verifiers/MainnetSP1Verifier.sol | 11 +- .../rollup/verifiers/MainnetSgxVerifier.sol | 11 +- .../verifiers/MainnetTeeAnyVerifier.sol | 11 +- .../verifiers/MainnetZkAndTeeVerifier.sol | 11 +- .../rollup/verifiers/MainnetZkAnyVerifier.sol | 11 +- .../{L1 => layer1}/provers/GuardianProver.sol | 10 +- .../proving => layer1/provers}/ProverSet.sol | 10 +- .../team/airdrop/ERC20Airdrop.sol | 2 +- .../team/airdrop/MerkleClaimable.sol | 4 +- .../team/tokenunlock/TokenUnlock.sol | 10 +- .../{L1 => layer1}/tiers/ITierProvider.sol | 2 +- .../{L1 => layer1}/tiers/ITierRouter.sol | 2 +- .../{L1 => layer1}/tiers/LibTiers.sol | 2 +- .../{L1 => layer1}/tiers/TierProviderBase.sol | 4 +- .../{L1 => layer1}/tiers/TierProviderV2.sol | 2 +- .../{tko => layer1/token}/TaikoToken.sol | 4 +- .../{ => layer1}/verifiers/IVerifier.sol | 4 +- .../verifiers}/LibPublicInput.sol | 4 +- .../{ => layer1}/verifiers/Risc0Verifier.sol | 10 +- .../{ => layer1}/verifiers/SP1Verifier.sol | 10 +- .../{ => layer1}/verifiers/SgxVerifier.sol | 11 +- .../verifiers/compose/ComposeVerifier.sol | 6 +- .../verifiers/compose/TeeAnyVerifier.sol | 4 +- .../verifiers/compose/ZkAndTeeVerifier.sol | 4 +- .../verifiers/compose/ZkAnyVerifier.sol | 4 +- .../{L2 => layer2}/DelegateOwner.sol | 12 +- .../{L2 => layer2/based}/IBlockHash.sol | 2 +- .../{L2 => layer2/based}/Lib1559Math.sol | 4 +- .../{L2 => layer2/based}/LibL2Config.sol | 2 +- .../{L2 => layer2/based}/TaikoL2.sol | 16 +- .../{ => layer2}/devnet/DevnetTaikoL2.sol | 4 +- .../{ => layer2}/hekla/HeklaTaikoL2.sol | 4 +- .../mainnet}/MainnetTaikoL2.sol | 4 +- .../token}/BridgedTaikoToken.sol | 6 +- .../mainnet/shared/MainnetBridge.sol | 17 -- .../contracts/{ => shared}/bridge/Bridge.sol | 57 ++---- .../contracts/{ => shared}/bridge/IBridge.sol | 2 +- .../{ => shared}/bridge/IQuotaManager.sol | 2 +- .../{ => shared}/bridge/QuotaManager.sol | 4 +- .../contracts/{ => shared}/bridge/README.md | 0 .../{ => shared}/common/AddressManager.sol | 2 +- .../{ => shared}/common/AddressResolver.sol | 2 +- .../{ => shared}/common/EssentialContract.sol | 28 +-- .../{ => shared}/common/IAddressManager.sol | 2 +- .../{ => shared}/common/IAddressResolver.sol | 2 +- .../{libs => shared/common}/LibAddress.sol | 2 +- .../{libs => shared/common}/LibBytes.sol | 2 +- .../{libs => shared/common}/LibMath.sol | 2 +- .../{libs => shared/common}/LibNetwork.sol | 2 +- .../{ => shared}/common/LibStrings.sol | 2 +- .../{libs => shared/common}/LibTrieProof.sol | 2 +- .../contracts/shared/data/LibSharedData.sol | 13 ++ .../{ => shared}/signal/ISignalService.sol | 2 +- .../{ => shared}/signal/SignalService.sol | 4 +- .../{tko => shared/token}/TaikoTokenBase.sol | 2 +- .../{ => shared}/tokenvault/BaseNFTVault.sol | 2 +- .../{ => shared}/tokenvault/BaseVault.sol | 4 +- .../tokenvault/BridgedERC1155.sol | 2 +- .../{ => shared}/tokenvault/BridgedERC20.sol | 2 +- .../tokenvault/BridgedERC20V2.sol | 2 +- .../{ => shared}/tokenvault/BridgedERC721.sol | 2 +- .../{ => shared}/tokenvault/ERC1155Vault.sol | 4 +- .../{ => shared}/tokenvault/ERC20Vault.sol | 4 +- .../{ => shared}/tokenvault/ERC721Vault.sol | 4 +- .../tokenvault/IBridgedERC1155.sol | 2 +- .../{ => shared}/tokenvault/IBridgedERC20.sol | 2 +- .../tokenvault/IBridgedERC721.sol | 2 +- .../tokenvault/LibBridgedToken.sol | 2 +- packages/protocol/deployments/gen-layouts.sh | 107 ----------- .../deployments/hekla-contract-logs.md | 25 ++- .../protocol/docs/how_taiko_is_deployed.md | 2 +- packages/protocol/foundry.toml | 24 ++- .../ERC1155Vault-BridgedTokenDeployed.js | 22 +-- .../ERC20Vault-BridgedTokenDeployed.js | 22 +-- .../ERC721Vault-BridgedTokenDeployed.js | 22 +-- packages/protocol/package.json | 31 ++-- packages/protocol/script/download_solc.sh | 2 +- packages/protocol/script/gen-layouts.sh | 105 +++++++++++ .../AddSGXVerifierInstances.s.sol | 6 +- .../{ => layer1}/DeployERC20Airdrop.s.sol | 6 +- .../{ => layer1}/DeployLabsProverPool.s.sol | 6 +- .../DeployProtocolOnL1.s.sol} | 62 +++---- .../script/{ => layer1}/DeployProverSet.s.sol | 6 +- .../DeployQuotaManager.s.sol} | 8 +- .../{ => layer1}/DeployRisc0Verifier.s.sol | 6 +- .../{ => layer1}/DeploySP1Verifier.s.sol | 6 +- .../{ => layer1}/DeployTaikoToken.s.sol | 6 +- .../SendMessageToDelegateOwner.s.sol | 8 +- .../script/{ => layer1}/SetDcapParams.s.sol | 4 +- .../{ => layer1}/config_dcap_sgx_verifier.sh | 2 +- .../deploy_protocol_on_l1.sh} | 12 +- .../{ => layer1}/tokenunlock/Deploy.data.json | 0 .../{ => layer1}/tokenunlock/Deploy.s.sol | 6 +- .../{ => layer1}/tokenunlock/Vest.data.json | 0 .../{ => layer1}/tokenunlock/Vest.s.sol | 4 +- .../tokenunlock/exercise1.data.json | 0 .../DeployDelegateOwner.s.sol} | 10 +- .../PostGenesisConfig.s.sol} | 12 +- .../PostGenesisQuery.s.sol} | 12 +- packages/protocol/script/merge_contracts.py | 27 --- .../AuthorizeTaikoForMultihop.s.sol | 6 +- .../script/{ => shared}/SetAddress.s.sol | 4 +- .../{ => shared}/SetRemoteBridgeSuites.s.sol | 4 +- .../upgrade/UpgradeAddressManager.s.sol | 13 -- .../script/upgrade/UpgradeBridge.s.sol | 13 -- .../script/upgrade/UpgradeERC1155Vault.s.sol | 13 -- .../script/upgrade/UpgradeERC20Vault.s.sol | 13 -- .../script/upgrade/UpgradeERC721Vault.s.sol | 13 -- .../upgrade/UpgradeGuardianProver.s.sol | 13 -- .../script/upgrade/UpgradeProverSet.s.sol | 13 -- .../script/upgrade/UpgradeRisc0Verifier.s.sol | 14 -- .../script/upgrade/UpgradeScript.s.sol | 32 ---- .../script/upgrade/UpgradeSignalService.s.sol | 13 -- .../script/upgrade/UpgradeTaikoL1.s.sol | 14 -- .../script/upgrade/UpgradeTierProvider.s.sol | 19 -- packages/protocol/script/upgrade_to.sh | 10 - .../{ => test}/genesis/GenerateGenesis.g.sol | 43 ++--- .../test/genesis/data/genesis_config.js | 61 +++++++ .../genesis/generate}/erc20.ts | 2 +- .../genesis/generate/generate.ts} | 20 +- .../genesis/generate}/interface.ts | 0 .../genesis/generate}/taikoL2.ts | 2 +- .../genesis/generate}/utils.ts | 2 +- .../genesis/genesis.test.sh} | 14 +- .../protocol/{ => test}/genesis/mainnet.js | 0 .../{ => test}/genesis/test_config.js | 2 +- .../genesis/testnet/docker-compose.yml | 4 +- .../{ => test}/genesis/testnet/init_geth.sh | 0 .../{ => test}/genesis/testnet/keyfile.json | 0 .../{ => test}/genesis/testnet/password | 0 packages/protocol/test/layer1/TaikoL1Test.sol | 15 ++ .../AutomataDcapV3AttestationTest.t.sol | 4 +- .../assets/0424/tcb_00706A100000.json | 0 .../assets/0424/tcb_00906ED50000.json | 0 .../assets/0424/tcb_00A067110000.json | 0 .../assets/0424/tcb_30606a000000.json | 0 .../assets/0923/identity.json | 0 .../assets/0923/tcb_00606A000000.json | 0 .../assets/0923/v3quote.json | 0 .../automata-attestation/assets/complex.json | 0 .../common/AttestationBase.t.sol | 35 ++-- .../utils/DcapTestUtils.t.sol | 11 +- .../utils/V3QuoteParseUtils.t.sol | 13 +- .../based}/GuardianProver1.t.sol | 5 +- .../based}/GuardianProver2.t.sol | 5 +- .../test/{L1 => layer1/based}/TaikoL1.t.sol | 4 +- .../based}/TaikoL1LibProvingWithTiers.t.sol | 2 +- .../{L1 => layer1/based}/TaikoL1TestBase.sol | 4 +- .../based}/TaikoL1TestGroup1.t.sol | 2 +- .../based}/TaikoL1TestGroup10.t.sol | 2 +- .../based}/TaikoL1TestGroup2.t.sol | 2 +- .../based}/TaikoL1TestGroup3.t.sol | 2 +- .../based}/TaikoL1TestGroup4.t.sol | 2 +- .../based}/TaikoL1TestGroup5.t.sol | 2 +- .../based}/TaikoL1TestGroup6.t.sol | 2 +- .../based}/TaikoL1TestGroup7.t.sol | 2 +- .../based}/TaikoL1TestGroup8.t.sol | 2 +- .../based}/TaikoL1TestGroup9.t.sol | 2 +- .../based}/TaikoL1TestGroupBase.sol | 2 +- .../based}/TaikoL1testGroupA1.t.sol | 2 +- .../based}/TaikoL1testGroupA2.t.sol | 2 +- .../{L1 => layer1/based}/TestTierProvider.sol | 10 +- .../team/airdrop/ERC20Airdrop.t.sol | 4 +- .../team/airdrop/MerkleClaimable.t.sol | 4 +- .../team/tokenunlock/TokenUnlock.t.sol | 6 +- .../verifiers}/MockPlonkVerifier.sol | 2 +- .../verifiers/Risc0Verifier.t.sol | 4 +- .../verifiers/RiscZeroGroth16Verifier.t.sol | 4 +- .../verifiers/SP1PlonkVerifier.t.sol | 4 +- .../{ => layer1}/verifiers/SP1Verifier.t.sol | 4 +- .../{ => layer1}/verifiers/SgxVerifier.t.sol | 4 +- .../verifiers/compose/ComposeVerifeir.t.sol | 6 +- .../test/{L2 => layer2}/DelegateOwner.t.sol | 8 +- .../test/{L2 => layer2}/Lib1559Math.t.sol | 6 +- .../test/{L2 => layer2}/LibL2Signer.sol | 4 +- .../test/{L2 => layer2}/TaikoL2.t.sol | 6 +- .../TaikoL2EIP1559Configurable.sol | 4 +- .../{L2 => layer2}/TaikoL2NoFeeCheck.t.sol | 6 +- packages/protocol/test/layer2/TaikoL2Test.sol | 9 + .../test/{ => shared}/DeployCapability.sol | 4 +- .../test/{ => shared}/HelperContracts.sol | 6 +- .../protocol/test/{ => shared}/TaikoTest.sol | 35 +--- .../test/{ => shared}/bridge/Bridge.t.sol | 2 +- .../test/{ => shared}/bridge/Bridge2.t.sol | 2 +- .../bridge/Bridge2_failMessage.t.sol | 2 +- .../bridge/Bridge2_processMessage.t.sol | 2 +- .../bridge/Bridge2_recallMessage.t.sol | 2 +- .../bridge/Bridge2_retryMessage.t.sol | 2 +- .../bridge/Bridge2_sendMessage.t.sol | 2 +- .../{ => shared}/bridge/QuotaManager.t.sol | 2 +- .../{ => shared}/common/AddressManager.t.sol | 6 +- .../{ => shared}/common/AddressResolver.t.sol | 6 +- .../common/EssentialContract.t.sol | 2 +- .../{libs => shared/common}/LibAddress.t.sol | 4 +- .../common}/LibTrieProof.t.sol | 4 +- .../{ => shared}/signal/SignalService.t.sol | 2 +- .../thirdparty/LibUint512Math.sol | 2 +- .../{ => shared}/thirdparty/Multicall3.sol | 2 +- .../erc20 => shared/token}/FreeMintERC20.sol | 2 +- .../token}/MayFailFreeMintERC20.sol | 2 +- .../erc20 => shared/token}/RegularERC20.sol | 2 +- .../tokenvault/BridgedERC20V2.t.sol | 2 +- .../tokenvault/ERC1155Vault.t.sol | 2 +- .../{ => shared}/tokenvault/ERC20Vault.t.sol | 2 +- .../{ => shared}/tokenvault/ERC721Vault.t.sol | 2 +- .../airdrop/airdrop_db/example_claimList.json | 7 - .../protocol/utils/airdrop/buildMerkleTree.ts | 97 ---------- pnpm-lock.yaml | 21 +-- 266 files changed, 1230 insertions(+), 1477 deletions(-) rename packages/protocol/contracts/{ => layer1}/automata-attestation/AutomataDcapV3Attestation.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/README.md (100%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/interfaces/IAttestation.sol (94%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/interfaces/ISigVerifyLib.sol (92%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/EnclaveIdStruct.sol (96%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/PEMCertChainLib.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/QuoteV3Auth/V3Parser.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/QuoteV3Auth/V3Struct.sol (98%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/TCBInfoStruct.sol (96%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/lib/interfaces/IPEMCertChainLib.sol (97%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/utils/Asn1Decode.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/utils/BytesUtils.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/utils/SHA1.sol (99%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/utils/SigVerifyLib.sol (98%) rename packages/protocol/contracts/{ => layer1}/automata-attestation/utils/X509DateUtils.sol (99%) rename packages/protocol/contracts/{L1 => layer1/based}/ITaikoL1.sol (99%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibBonds.sol (95%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibData.sol (95%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibProposing.sol (96%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibProving.sol (99%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibUtils.sol (98%) rename packages/protocol/contracts/{L1/libs => layer1/based}/LibVerifying.sol (99%) rename packages/protocol/contracts/{L1 => layer1/based}/TaikoData.sol (96%) rename packages/protocol/contracts/{L1 => layer1/based}/TaikoEvents.sol (99%) rename packages/protocol/contracts/{L1 => layer1/based}/TaikoL1.sol (97%) rename packages/protocol/contracts/{ => layer1}/devnet/DevnetTaikoL1.sol (89%) rename packages/protocol/contracts/{L1/tiers => layer1/devnet}/DevnetTierProvider.sol (88%) rename packages/protocol/contracts/{ => layer1}/hekla/HeklaTaikoL1.sol (90%) rename packages/protocol/contracts/{ => layer1}/hekla/HeklaTierProvider.sol (93%) rename packages/protocol/contracts/{ => layer1}/mainnet/README.md (100%) rename packages/protocol/contracts/{ => layer1}/mainnet/addrcache/AddressCache.sol (98%) rename packages/protocol/contracts/{ => layer1}/mainnet/addrcache/RollupAddressCache.sol (94%) rename packages/protocol/contracts/{ => layer1}/mainnet/addrcache/SharedAddressCache.sol (95%) create mode 100644 packages/protocol/contracts/layer1/mainnet/multirollup/MainnetBridge.sol rename packages/protocol/contracts/{mainnet/shared => layer1/mainnet/multirollup}/MainnetERC1155Vault.sol (63%) rename packages/protocol/contracts/{mainnet/shared => layer1/mainnet/multirollup}/MainnetERC20Vault.sol (63%) rename packages/protocol/contracts/{mainnet/shared => layer1/mainnet/multirollup}/MainnetERC721Vault.sol (63%) rename packages/protocol/contracts/{mainnet/shared => layer1/mainnet/multirollup}/MainnetSharedAddressManager.sol (57%) rename packages/protocol/contracts/{mainnet/shared => layer1/mainnet/multirollup}/MainnetSignalService.sol (63%) create mode 100644 packages/protocol/contracts/layer1/mainnet/reentrylock/LibFasterReentryLock.sol rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/MainnetGuardianProver.sol (59%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/MainnetProverSet.sol (63%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/MainnetRollupAddressManager.sol (57%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/MainnetTaikoL1.sol (82%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/MainnetTierRouter.sol (85%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol (65%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetSP1Verifier.sol (68%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetSgxVerifier.sol (65%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol (63%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol (63%) rename packages/protocol/contracts/{ => layer1}/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol (62%) rename packages/protocol/contracts/{L1 => layer1}/provers/GuardianProver.sol (98%) rename packages/protocol/contracts/{team/proving => layer1/provers}/ProverSet.sol (96%) rename packages/protocol/contracts/{ => layer1}/team/airdrop/ERC20Airdrop.sol (98%) rename packages/protocol/contracts/{ => layer1}/team/airdrop/MerkleClaimable.sol (97%) rename packages/protocol/contracts/{ => layer1}/team/tokenunlock/TokenUnlock.sol (97%) rename packages/protocol/contracts/{L1 => layer1}/tiers/ITierProvider.sol (98%) rename packages/protocol/contracts/{L1 => layer1}/tiers/ITierRouter.sol (94%) rename packages/protocol/contracts/{L1 => layer1}/tiers/LibTiers.sol (97%) rename packages/protocol/contracts/{L1 => layer1}/tiers/TierProviderBase.sol (98%) rename packages/protocol/contracts/{L1 => layer1}/tiers/TierProviderV2.sol (96%) rename packages/protocol/contracts/{tko => layer1/token}/TaikoToken.sol (96%) rename packages/protocol/contracts/{ => layer1}/verifiers/IVerifier.sol (95%) rename packages/protocol/contracts/{verifiers/libs => layer1/verifiers}/LibPublicInput.sol (94%) rename packages/protocol/contracts/{ => layer1}/verifiers/Risc0Verifier.sol (94%) rename packages/protocol/contracts/{ => layer1}/verifiers/SP1Verifier.sol (94%) rename packages/protocol/contracts/{ => layer1}/verifiers/SgxVerifier.sol (97%) rename packages/protocol/contracts/{ => layer1}/verifiers/compose/ComposeVerifier.sol (97%) rename packages/protocol/contracts/{ => layer1}/verifiers/compose/TeeAnyVerifier.sol (92%) rename packages/protocol/contracts/{ => layer1}/verifiers/compose/ZkAndTeeVerifier.sol (89%) rename packages/protocol/contracts/{ => layer1}/verifiers/compose/ZkAnyVerifier.sol (92%) rename packages/protocol/contracts/{L2 => layer2}/DelegateOwner.sol (95%) rename packages/protocol/contracts/{L2 => layer2/based}/IBlockHash.sol (94%) rename packages/protocol/contracts/{L2 => layer2/based}/Lib1559Math.sol (98%) rename packages/protocol/contracts/{L2 => layer2/based}/LibL2Config.sol (96%) rename packages/protocol/contracts/{L2 => layer2/based}/TaikoL2.sol (97%) rename packages/protocol/contracts/{ => layer2}/devnet/DevnetTaikoL2.sol (81%) rename packages/protocol/contracts/{ => layer2}/hekla/HeklaTaikoL2.sol (81%) rename packages/protocol/contracts/{mainnet/rollup => layer2/mainnet}/MainnetTaikoL2.sol (82%) rename packages/protocol/contracts/{tko => layer2/token}/BridgedTaikoToken.sol (93%) delete mode 100644 packages/protocol/contracts/mainnet/shared/MainnetBridge.sol rename packages/protocol/contracts/{ => shared}/bridge/Bridge.sol (94%) rename packages/protocol/contracts/{ => shared}/bridge/IBridge.sol (99%) rename packages/protocol/contracts/{ => shared}/bridge/IQuotaManager.sol (97%) rename packages/protocol/contracts/{ => shared}/bridge/QuotaManager.sol (98%) rename packages/protocol/contracts/{ => shared}/bridge/README.md (100%) rename packages/protocol/contracts/{ => shared}/common/AddressManager.sol (98%) rename packages/protocol/contracts/{ => shared}/common/AddressResolver.sol (99%) rename packages/protocol/contracts/{ => shared}/common/EssentialContract.sol (82%) rename packages/protocol/contracts/{ => shared}/common/IAddressManager.sol (96%) rename packages/protocol/contracts/{ => shared}/common/IAddressResolver.sol (98%) rename packages/protocol/contracts/{libs => shared/common}/LibAddress.sol (99%) rename packages/protocol/contracts/{libs => shared/common}/LibBytes.sol (98%) rename packages/protocol/contracts/{libs => shared/common}/LibMath.sol (97%) rename packages/protocol/contracts/{libs => shared/common}/LibNetwork.sol (99%) rename packages/protocol/contracts/{ => shared}/common/LibStrings.sol (99%) rename packages/protocol/contracts/{libs => shared/common}/LibTrieProof.sol (99%) create mode 100644 packages/protocol/contracts/shared/data/LibSharedData.sol rename packages/protocol/contracts/{ => shared}/signal/ISignalService.sol (99%) rename packages/protocol/contracts/{ => shared}/signal/SignalService.sol (99%) rename packages/protocol/contracts/{tko => shared/token}/TaikoTokenBase.sol (98%) rename packages/protocol/contracts/{ => shared}/tokenvault/BaseNFTVault.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/BaseVault.sol (98%) rename packages/protocol/contracts/{ => shared}/tokenvault/BridgedERC1155.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/BridgedERC20.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/BridgedERC20V2.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/BridgedERC721.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/ERC1155Vault.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/ERC20Vault.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/ERC721Vault.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/IBridgedERC1155.sol (98%) rename packages/protocol/contracts/{ => shared}/tokenvault/IBridgedERC20.sol (99%) rename packages/protocol/contracts/{ => shared}/tokenvault/IBridgedERC721.sol (98%) rename packages/protocol/contracts/{ => shared}/tokenvault/LibBridgedToken.sol (98%) delete mode 100755 packages/protocol/deployments/gen-layouts.sh create mode 100755 packages/protocol/script/gen-layouts.sh rename packages/protocol/script/{ => layer1}/AddSGXVerifierInstances.s.sol (84%) rename packages/protocol/script/{ => layer1}/DeployERC20Airdrop.s.sol (93%) rename packages/protocol/script/{ => layer1}/DeployLabsProverPool.s.sol (82%) rename packages/protocol/script/{DeployOnL1.s.sol => layer1/DeployProtocolOnL1.s.sol} (90%) rename packages/protocol/script/{ => layer1}/DeployProverSet.s.sol (90%) rename packages/protocol/script/{DeployL1QuotaManager.s.sol => layer1/DeployQuotaManager.s.sol} (89%) rename packages/protocol/script/{ => layer1}/DeployRisc0Verifier.s.sol (88%) rename packages/protocol/script/{ => layer1}/DeploySP1Verifier.s.sol (88%) rename packages/protocol/script/{ => layer1}/DeployTaikoToken.s.sol (87%) rename packages/protocol/script/{ => layer1}/SendMessageToDelegateOwner.s.sol (91%) rename packages/protocol/script/{ => layer1}/SetDcapParams.s.sol (96%) rename packages/protocol/script/{ => layer1}/config_dcap_sgx_verifier.sh (99%) rename packages/protocol/script/{test_deploy_on_l1.sh => layer1/deploy_protocol_on_l1.sh} (84%) rename packages/protocol/script/{ => layer1}/tokenunlock/Deploy.data.json (100%) rename packages/protocol/script/{ => layer1}/tokenunlock/Deploy.s.sol (92%) rename packages/protocol/script/{ => layer1}/tokenunlock/Vest.data.json (100%) rename packages/protocol/script/{ => layer1}/tokenunlock/Vest.s.sol (95%) rename packages/protocol/script/{ => layer1}/tokenunlock/exercise1.data.json (100%) rename packages/protocol/script/{DeployL2DelegateOwner.s.sol => layer2/DeployDelegateOwner.s.sol} (77%) rename packages/protocol/script/{L2PostGenesisConfig.s.sol => layer2/PostGenesisConfig.s.sol} (93%) rename packages/protocol/script/{L2PostGenesisQuery.s.sol => layer2/PostGenesisQuery.s.sol} (92%) delete mode 100644 packages/protocol/script/merge_contracts.py rename packages/protocol/script/{ => shared}/AuthorizeTaikoForMultihop.s.sol (83%) rename packages/protocol/script/{ => shared}/SetAddress.s.sol (91%) rename packages/protocol/script/{ => shared}/SetRemoteBridgeSuites.s.sol (96%) delete mode 100644 packages/protocol/script/upgrade/UpgradeAddressManager.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeBridge.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeGuardianProver.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeProverSet.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeRisc0Verifier.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeScript.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeSignalService.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol delete mode 100644 packages/protocol/script/upgrade/UpgradeTierProvider.s.sol delete mode 100755 packages/protocol/script/upgrade_to.sh rename packages/protocol/{ => test}/genesis/GenerateGenesis.g.sol (91%) create mode 100644 packages/protocol/test/genesis/data/genesis_config.js rename packages/protocol/{utils/generate_genesis => test/genesis/generate}/erc20.ts (97%) rename packages/protocol/{utils/generate_genesis/main.ts => test/genesis/generate/generate.ts} (82%) rename packages/protocol/{utils/generate_genesis => test/genesis/generate}/interface.ts (100%) rename packages/protocol/{utils/generate_genesis => test/genesis/generate}/taikoL2.ts (99%) rename packages/protocol/{utils/generate_genesis => test/genesis/generate}/utils.ts (99%) rename packages/protocol/{genesis/generate_genesis.test.sh => test/genesis/genesis.test.sh} (87%) rename packages/protocol/{ => test}/genesis/mainnet.js (100%) rename packages/protocol/{ => test}/genesis/test_config.js (99%) rename packages/protocol/{ => test}/genesis/testnet/docker-compose.yml (79%) rename packages/protocol/{ => test}/genesis/testnet/init_geth.sh (100%) rename packages/protocol/{ => test}/genesis/testnet/keyfile.json (100%) rename packages/protocol/{ => test}/genesis/testnet/password (100%) create mode 100644 packages/protocol/test/layer1/TaikoL1Test.sol rename packages/protocol/test/{ => layer1}/automata-attestation/AutomataDcapV3AttestationTest.t.sol (99%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0424/tcb_00706A100000.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0424/tcb_00906ED50000.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0424/tcb_00A067110000.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0424/tcb_30606a000000.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0923/identity.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0923/tcb_00606A000000.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/0923/v3quote.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/assets/complex.json (100%) rename packages/protocol/test/{ => layer1}/automata-attestation/common/AttestationBase.t.sol (93%) rename packages/protocol/test/{ => layer1}/automata-attestation/utils/DcapTestUtils.t.sol (96%) rename packages/protocol/test/{ => layer1}/automata-attestation/utils/V3QuoteParseUtils.t.sol (93%) rename packages/protocol/test/{L1 => layer1/based}/GuardianProver1.t.sol (95%) rename packages/protocol/test/{L1 => layer1/based}/GuardianProver2.t.sol (95%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1LibProvingWithTiers.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestBase.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup1.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup10.t.sol (98%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup2.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup3.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup4.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup5.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup6.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup7.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup8.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroup9.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1TestGroupBase.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1testGroupA1.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TaikoL1testGroupA2.t.sol (99%) rename packages/protocol/test/{L1 => layer1/based}/TestTierProvider.sol (90%) rename packages/protocol/test/{ => layer1}/team/airdrop/ERC20Airdrop.t.sol (98%) rename packages/protocol/test/{ => layer1}/team/airdrop/MerkleClaimable.t.sol (98%) rename packages/protocol/test/{ => layer1}/team/tokenunlock/TokenUnlock.t.sol (98%) rename packages/protocol/test/{mocks => layer1/verifiers}/MockPlonkVerifier.sol (96%) rename packages/protocol/test/{ => layer1}/verifiers/Risc0Verifier.t.sol (98%) rename packages/protocol/test/{ => layer1}/verifiers/RiscZeroGroth16Verifier.t.sol (98%) rename packages/protocol/test/{ => layer1}/verifiers/SP1PlonkVerifier.t.sol (98%) rename packages/protocol/test/{ => layer1}/verifiers/SP1Verifier.t.sol (98%) rename packages/protocol/test/{ => layer1}/verifiers/SgxVerifier.t.sol (99%) rename packages/protocol/test/{ => layer1}/verifiers/compose/ComposeVerifeir.t.sol (98%) rename packages/protocol/test/{L2 => layer2}/DelegateOwner.t.sol (98%) rename packages/protocol/test/{L2 => layer2}/Lib1559Math.t.sol (97%) rename packages/protocol/test/{L2 => layer2}/LibL2Signer.sol (98%) rename packages/protocol/test/{L2 => layer2}/TaikoL2.t.sol (97%) rename packages/protocol/test/{L2 => layer2}/TaikoL2EIP1559Configurable.sol (95%) rename packages/protocol/test/{L2 => layer2}/TaikoL2NoFeeCheck.t.sol (98%) create mode 100644 packages/protocol/test/layer2/TaikoL2Test.sol rename packages/protocol/test/{ => shared}/DeployCapability.sol (96%) rename packages/protocol/test/{ => shared}/HelperContracts.sol (88%) rename packages/protocol/test/{ => shared}/TaikoTest.sol (69%) rename packages/protocol/test/{ => shared}/bridge/Bridge.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/Bridge2.t.sol (98%) rename packages/protocol/test/{ => shared}/bridge/Bridge2_failMessage.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/Bridge2_processMessage.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/Bridge2_recallMessage.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/Bridge2_retryMessage.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/Bridge2_sendMessage.t.sol (99%) rename packages/protocol/test/{ => shared}/bridge/QuotaManager.t.sol (99%) rename packages/protocol/test/{ => shared}/common/AddressManager.t.sol (93%) rename packages/protocol/test/{ => shared}/common/AddressResolver.t.sol (92%) rename packages/protocol/test/{ => shared}/common/EssentialContract.t.sol (98%) rename packages/protocol/test/{libs => shared/common}/LibAddress.t.sol (97%) rename packages/protocol/test/{libs => shared/common}/LibTrieProof.t.sol (99%) rename packages/protocol/test/{ => shared}/signal/SignalService.t.sol (99%) rename packages/protocol/test/{ => shared}/thirdparty/LibUint512Math.sol (99%) rename packages/protocol/test/{ => shared}/thirdparty/Multicall3.sol (99%) rename packages/protocol/test/{common/erc20 => shared/token}/FreeMintERC20.sol (95%) rename packages/protocol/test/{common/erc20 => shared/token}/MayFailFreeMintERC20.sol (98%) rename packages/protocol/test/{common/erc20 => shared/token}/RegularERC20.sol (90%) rename packages/protocol/test/{ => shared}/tokenvault/BridgedERC20V2.t.sol (99%) rename packages/protocol/test/{ => shared}/tokenvault/ERC1155Vault.t.sol (99%) rename packages/protocol/test/{ => shared}/tokenvault/ERC20Vault.t.sol (99%) rename packages/protocol/test/{ => shared}/tokenvault/ERC721Vault.t.sol (99%) delete mode 100644 packages/protocol/utils/airdrop/airdrop_db/example_claimList.json delete mode 100644 packages/protocol/utils/airdrop/buildMerkleTree.ts diff --git a/.github/workflows/protocol.yml b/.github/workflows/protocol.yml index c27a94d479..2340a2d9be 100644 --- a/.github/workflows/protocol.yml +++ b/.github/workflows/protocol.yml @@ -34,24 +34,16 @@ jobs: - name: Unit tests working-directory: ./packages/protocol - run: pnpm clean && pnpm test - - - name: Format solidity && update contract layout table - working-directory: ./packages/protocol - run: pnpm layout && forge fmt + run: pnpm clean && forge fmt && pnpm test:l1 && pnpm layout:l1 && pnpm test:l2 && pnpm layout:l2 - name: Commit contract layout table uses: stefanzweifel/git-auto-commit-action@v5 with: - commit_message: "forge fmt & update contract layout table" + commit_message: "forge fmt & update contract layout tables" - name: Generate genesis working-directory: ./packages/protocol - run: pnpm test:genesis - - - name: Run snapshot (Foundry) - working-directory: ./packages/protocol - run: pnpm snapshot + run: pnpm genesis:test - name: Deploy L1 contracts working-directory: ./packages/protocol @@ -60,4 +52,4 @@ jobs: while ! nc -z localhost 8545; do sleep 1 done - pnpm test:deploy + pnpm test:deploy:l1 diff --git a/.gitignore b/.gitignore index 86e934589e..0d0cf5a22b 100644 --- a/.gitignore +++ b/.gitignore @@ -116,7 +116,6 @@ __pycache__/ # VSCode .vscode/launch.json -packages/protocol/config.js .vercel # Idea diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6106d8ce7c..607076805a 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -5,7 +5,7 @@ "packages/fork-diff": "0.6.0", "packages/guardian-prover-health-check": "0.1.0", "packages/guardian-prover-health-check-ui": "0.2.0", - "packages/protocol": "1.9.0", + "packages/protocol": "1.8.0", "packages/relayer": "0.12.0", "packages/snaefell-ui": "1.1.0", "packages/supplementary-contracts": "1.0.0", diff --git a/_typos.toml b/_typos.toml index 950bca673d..e0ba4825a7 100644 --- a/_typos.toml +++ b/_typos.toml @@ -18,9 +18,7 @@ extend-exclude = [ "go.mod", "CHANGELOG.md", "packages/protocol/audit/code4rena-2024-03-taiko-final-report.md", - "packages/protocol/contracts/automata-attestation/**", - "packages/protocol/contracts/thirdparty/**", - "packages/protocol/contracts/compiled/**", + "packages/protocol/contracts/layer1/automata-attestation/**", "packages/protocol/deployments/**", # TODO: fix typos and remove these "packages/taiko-client/**", diff --git a/packages/protocol/.eslintignore b/packages/protocol/.eslintignore index dcdd38e480..1ed0729428 100644 --- a/packages/protocol/.eslintignore +++ b/packages/protocol/.eslintignore @@ -3,5 +3,6 @@ artifacts cache coverage lib -contracts/test/thirdparty/ -contracts/automata-attestation/ \ No newline at end of file +test/shared/thirdparty/ +contracts/layer1/automata-attestation/ +monitors/ \ No newline at end of file diff --git a/packages/protocol/.gitignore b/packages/protocol/.gitignore index 736dd497a4..610554964a 100644 --- a/packages/protocol/.gitignore +++ b/packages/protocol/.gitignore @@ -14,6 +14,7 @@ yarn-error.log* package-lock.json npm-debug.log* typechain-types +test/genesis/generate/data # Hardhat files cache diff --git a/packages/protocol/.solhint.json b/packages/protocol/.solhint.json index cd602639ac..ee0c7f9681 100644 --- a/packages/protocol/.solhint.json +++ b/packages/protocol/.solhint.json @@ -3,7 +3,7 @@ "rules": { "avoid-low-level-calls": "off", "avoid-tx-origin": "off", - "compiler-version": ["error", "0.8.27"], + "compiler-version": ["error", "^0.8.24"], "func-name-mixedcase": "off", "func-visibility": ["error", { "ignoreConstructors": true }], "max-line-length": ["error", 120], diff --git a/packages/protocol/.solhintignore b/packages/protocol/.solhintignore index 9597bc92c5..b0045ae5f3 100644 --- a/packages/protocol/.solhintignore +++ b/packages/protocol/.solhintignore @@ -1,8 +1,4 @@ node_modules/ lib/ -contracts/test/TestLibRLPReader.sol -**/contracts/thirdparty/**/*.sol -/contracts/automata-attestation/ -test/thirdparty/ -test/GasComparison.t.sol -test/TestLn.sol \ No newline at end of file +contracts/layer1/automata-attestation/ +test/shared/thirdparty/ diff --git a/packages/protocol/CHANGELOG.md b/packages/protocol/CHANGELOG.md index 0631c10da1..02a6798bdc 100644 --- a/packages/protocol/CHANGELOG.md +++ b/packages/protocol/CHANGELOG.md @@ -1,120 +1,5 @@ # Changelog -## [1.9.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.8.0...protocol-v1.9.0) (2024-09-09) - - -### Features - -* **protocol:** add `DevnetTaikoL1` ([#17900](https://github.com/taikoxyz/taiko-mono/issues/17900)) ([d864cea](https://github.com/taikoxyz/taiko-mono/commit/d864cea2eb8346127992acfbd9012e675a3400cc)) -* **protocol:** add `proveBlocks` method to `ProverSet` ([#18025](https://github.com/taikoxyz/taiko-mono/issues/18025)) ([36a2ae5](https://github.com/taikoxyz/taiko-mono/commit/36a2ae51c21a2359179755457a8933a346ccd8b3)) -* **protocol:** add `proveBlocks` to TaikoL1.sol ([fe687b3](https://github.com/taikoxyz/taiko-mono/commit/fe687b378fcb440184fd423088432dc63cf5989e)) -* **protocol:** add `TIER_ZKVM_RISC0` tier and `HeklaTierProvider` ([#17913](https://github.com/taikoxyz/taiko-mono/issues/17913)) ([64ed666](https://github.com/taikoxyz/taiko-mono/commit/64ed66628a18cb1b3fff2c4ab5d3c0149288dfe6)) -* **protocol:** add a batch proposing block function ([#17864](https://github.com/taikoxyz/taiko-mono/issues/17864)) ([3649785](https://github.com/taikoxyz/taiko-mono/commit/36497857dd3d5edb718a5cb0057327f3cde39c02)) -* **protocol:** add ComposeVerifier, TeeAnyVerifier, and ZkAnyVerifier ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) -* **protocol:** add EIP-2612 (permit extension) to bridged ERC20 tokens ([#17818](https://github.com/taikoxyz/taiko-mono/issues/17818)) ([185ef91](https://github.com/taikoxyz/taiko-mono/commit/185ef91d8debb0c3a88734f2552ca396c8d23a66)) -* **protocol:** add preconfirmation support based on https://github.com/taikoxyz/taiko-mono/pull/17654 (with some renaming) (https://github.com/taikoxyz/taiko-mono/issues/14793) ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) -* **protocol:** add proposeBlock2 in TaikoL1.sol and approve2 in GuardianProver.sol ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) -* **protocol:** add proposer address to getMinTier func ([#17919](https://github.com/taikoxyz/taiko-mono/issues/17919)) ([d6ea6f3](https://github.com/taikoxyz/taiko-mono/commit/d6ea6f33d6bf54cba3bd6ab153e38d09abf19912)) -* **protocol:** add SP1 verification support ([#17861](https://github.com/taikoxyz/taiko-mono/issues/17861)) ([2936312](https://github.com/taikoxyz/taiko-mono/commit/29363123233f9d2d749eb626095d0c645801e384)) -* **protocol:** add withdraw eth function to proverset ([#17800](https://github.com/taikoxyz/taiko-mono/issues/17800)) ([bb2abc5](https://github.com/taikoxyz/taiko-mono/commit/bb2abc510c98e62c89e0bfd9382c11720fb9edc7)) -* **protocol:** adjust gas excess once the gas target has changed ([a1e217e](https://github.com/taikoxyz/taiko-mono/commit/a1e217e457546d63a89da0b02135b3b63b22d19e)) -* **protocol:** allow a grace period (4h) to defer proof submission to reduce cost ([fe687b3](https://github.com/taikoxyz/taiko-mono/commit/fe687b378fcb440184fd423088432dc63cf5989e)) -* **protocol:** allow any address to withdraw token to the recipient address ([#17843](https://github.com/taikoxyz/taiko-mono/issues/17843)) ([3d89d24](https://github.com/taikoxyz/taiko-mono/commit/3d89d24b14fea7b9e59659e689c3011fbcf4b852)) -* **protocol:** allow contract proposers to use calldata for DA ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) -* **protocol:** allow msg.sender to customize block proposer addresses ([#18048](https://github.com/taikoxyz/taiko-mono/issues/18048)) ([22055cc](https://github.com/taikoxyz/taiko-mono/commit/22055cc95e51d07b6b57ab5cb2e4ccd9a97d594a)) -* **protocol:** enhance nextTxId logics in DelegateOwner ([#17718](https://github.com/taikoxyz/taiko-mono/issues/17718)) ([85b2cad](https://github.com/taikoxyz/taiko-mono/commit/85b2cad6216d93e3811bc3523ab8b3200cdfbdd3)) -* **protocol:** improve L2 basefee calculation ([920bd68](https://github.com/taikoxyz/taiko-mono/commit/920bd6873d3e9e1bbb00751fb9c0056ac85b8554)) -* **protocol:** introduce risc0 proof ([#17877](https://github.com/taikoxyz/taiko-mono/issues/17877)) ([bcb57cb](https://github.com/taikoxyz/taiko-mono/commit/bcb57cb81d12d0c09656582ad9140b38015b3a58)) -* **protocol:** protocol monitors ([#18002](https://github.com/taikoxyz/taiko-mono/issues/18002)) ([45b2087](https://github.com/taikoxyz/taiko-mono/commit/45b2087495d4f9e20083ebe2c61ecfe8d252e4b2)) -* **protocol:** relocate L2 base fee parameters to L1 configuration ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) -* **protocol:** return verification timestamp in getLastVerifiedBlock ([#17868](https://github.com/taikoxyz/taiko-mono/issues/17868)) ([1998288](https://github.com/taikoxyz/taiko-mono/commit/19982889f7f4c073d182a6076633c5e2c892c73a)) -* **protocol:** revert removing time as input for L2 base fee calculation ([a1e217e](https://github.com/taikoxyz/taiko-mono/commit/a1e217e457546d63a89da0b02135b3b63b22d19e)) -* **protocol:** script of `UpgradeRisc0Verifier` ([#17949](https://github.com/taikoxyz/taiko-mono/issues/17949)) ([fc12e04](https://github.com/taikoxyz/taiko-mono/commit/fc12e040c391e0f37c906b270743d3b57710f69d)) -* **protocol:** support backward-compatible batch-proof verification ([#17968](https://github.com/taikoxyz/taiko-mono/issues/17968)) ([c476aab](https://github.com/taikoxyz/taiko-mono/commit/c476aabe130d151f5678cd35fab99f258997f629)) -* **protocol:** update `HeklaTierProvider` to introduce sp1 proof ([#18022](https://github.com/taikoxyz/taiko-mono/issues/18022)) ([76b6514](https://github.com/taikoxyz/taiko-mono/commit/76b6514fd42ba7fa2124b44443728fa32304c324)) -* **protocol:** update `ontakeForkHeight` to Sep 24, 2024 ([#18046](https://github.com/taikoxyz/taiko-mono/issues/18046)) ([30c9316](https://github.com/taikoxyz/taiko-mono/commit/30c9316aea083d187617f5342fb4a955e604226b)) -* **protocol:** update Hekla `ontakeForkHeight` ([#17983](https://github.com/taikoxyz/taiko-mono/issues/17983)) ([8819e3a](https://github.com/taikoxyz/taiko-mono/commit/8819e3a5a59675dcc6a1f333620ce6e75b7d2887)) -* **protocol:** update Hekla deployment ([#17795](https://github.com/taikoxyz/taiko-mono/issues/17795)) ([cadaef8](https://github.com/taikoxyz/taiko-mono/commit/cadaef882c0751496809c88ee03ff818e49c4b4a)) -* **protocol:** update risc0 verifier contract to release-1.0 ([#17776](https://github.com/taikoxyz/taiko-mono/issues/17776)) ([2dd30ab](https://github.com/taikoxyz/taiko-mono/commit/2dd30ab2dc92b25105f19a4bcc1ddf7b40886039)) -* **protocol:** update script of deploying sp1 ([#18019](https://github.com/taikoxyz/taiko-mono/issues/18019)) ([9464967](https://github.com/taikoxyz/taiko-mono/commit/94649671bdf0304d96bf83d7d18dcbe21eff6067)) -* **protocol:** use SP1 1.2.0-rc with more proof verification tests ([#18001](https://github.com/taikoxyz/taiko-mono/issues/18001)) ([f7bcf1d](https://github.com/taikoxyz/taiko-mono/commit/f7bcf1d63d19b641ac6b9e0e972a7f6e2ec5b38f)) - - -### Bug Fixes - -* **protocol:** fix `chainId` in `HeklaTaikoL1` ([#17912](https://github.com/taikoxyz/taiko-mono/issues/17912)) ([8f31dd0](https://github.com/taikoxyz/taiko-mono/commit/8f31dd0ed519809f0ea0797b1e6b5937ee087108)) -* **protocol:** fix BridgedERC20V2.sol initializer logic ([#17823](https://github.com/taikoxyz/taiko-mono/issues/17823)) ([d538d99](https://github.com/taikoxyz/taiko-mono/commit/d538d99f9542852821d958008d913c028629bbef)) -* **protocol:** fix bug in adjustExcess ([920bd68](https://github.com/taikoxyz/taiko-mono/commit/920bd6873d3e9e1bbb00751fb9c0056ac85b8554)) -* **protocol:** fix tier id conflicts ([#18004](https://github.com/taikoxyz/taiko-mono/issues/18004)) ([0df1ad4](https://github.com/taikoxyz/taiko-mono/commit/0df1ad4274e6ebc3db79acbbdaedbe2d519262d6)) -* **protocol:** make sure new instance is not zero address in SgxVerifier ([#17918](https://github.com/taikoxyz/taiko-mono/issues/17918)) ([d559ce8](https://github.com/taikoxyz/taiko-mono/commit/d559ce80c1314e9ddbe02798f1c61a2e8349da6e)) -* **protocol:** reduce MainnetTaikoL1 code size ([#17792](https://github.com/taikoxyz/taiko-mono/issues/17792)) ([45281b8](https://github.com/taikoxyz/taiko-mono/commit/45281b848f3ef3c45487bfcd1bfd38b382eff4d0)) -* **protocol:** use block header's extraData for `basefeeSharingPctg` ([#17889](https://github.com/taikoxyz/taiko-mono/issues/17889)) ([5f3cbc9](https://github.com/taikoxyz/taiko-mono/commit/5f3cbc97cbe2636314c4a2945fdf01ef641702e7)) - - -### Chores - -* **main:** release protocol 1.9.0 ([#17783](https://github.com/taikoxyz/taiko-mono/issues/17783)) ([7bfd28a](https://github.com/taikoxyz/taiko-mono/commit/7bfd28a2b332c927cd8b6358623551814260f94e)) -* **protocol:** make two state variables in TaikoL2.sol public and add `adjustExcess` ([#17891](https://github.com/taikoxyz/taiko-mono/issues/17891)) ([ba21f68](https://github.com/taikoxyz/taiko-mono/commit/ba21f6836845ea0227116b701e701815f210d56d)) -* **protocol:** move two files to simplify folder structure ([#17929](https://github.com/taikoxyz/taiko-mono/issues/17929)) ([9dca4fa](https://github.com/taikoxyz/taiko-mono/commit/9dca4faa43ad938880c8e1ac54236ab292bcce6e)) -* **protocol:** revert `TAIKO_TOKEN` name changes in `DeployOnL1` ([#17927](https://github.com/taikoxyz/taiko-mono/issues/17927)) ([cf1a15f](https://github.com/taikoxyz/taiko-mono/commit/cf1a15f46344e60448c5fdcbcae02521fb5b7c04)) -* **protocol:** revert releasing protocol 1.9.0 ([#17783](https://github.com/taikoxyz/taiko-mono/issues/17783)) ([#18049](https://github.com/taikoxyz/taiko-mono/issues/18049)) ([c033810](https://github.com/taikoxyz/taiko-mono/commit/c033810ecc4c80a4581a95b06ab5127747efd191)) - - -### Documentation - -* **docs-site:** address docs and scripts friction points ([#17815](https://github.com/taikoxyz/taiko-mono/issues/17815)) ([c74968b](https://github.com/taikoxyz/taiko-mono/commit/c74968b61828babf218fbc8e8ded001a853a93c3)) -* **protocol:** add L2 `DelegateOwner` address in Hekla deployment docs ([#17925](https://github.com/taikoxyz/taiko-mono/issues/17925)) ([fdec8db](https://github.com/taikoxyz/taiko-mono/commit/fdec8dbe8c8aef21f71c9c4ca2213944880c1a47)) -* **protocol:** update `tier_router`with compatibility modifications ([#18028](https://github.com/taikoxyz/taiko-mono/issues/18028)) ([c43cb0c](https://github.com/taikoxyz/taiko-mono/commit/c43cb0c05f7cbba281076568f4e72033ebbcd0f3)) -* **protocol:** update hekla change log about `tier_router` ([#18023](https://github.com/taikoxyz/taiko-mono/issues/18023)) ([11e27d6](https://github.com/taikoxyz/taiko-mono/commit/11e27d60b3da9a34e07bfafadb8ec3d3223867d2)) -* **protocol:** update hekla change log about sp1 ([#18020](https://github.com/taikoxyz/taiko-mono/issues/18020)) ([434bf3c](https://github.com/taikoxyz/taiko-mono/commit/434bf3ccc1715171b8cd4e7581b282f85744ebe3)) -* **protocol:** update Hekla deployment ([#17845](https://github.com/taikoxyz/taiko-mono/issues/17845)) ([d95cc36](https://github.com/taikoxyz/taiko-mono/commit/d95cc36260ee4bf2aaf69181fa6444f419cc44af)) -* **protocol:** update Hekla deployment ([#17924](https://github.com/taikoxyz/taiko-mono/issues/17924)) ([46a3e00](https://github.com/taikoxyz/taiko-mono/commit/46a3e00659534a715fb315859463bd05bbdb65a9)) -* **protocol:** update Hekla deployments ([#17975](https://github.com/taikoxyz/taiko-mono/issues/17975)) ([c96627f](https://github.com/taikoxyz/taiko-mono/commit/c96627fcdd9ba91f26eeea2b329f0eb96dd36660)) -* **protocol:** update L1 deployment ([#17789](https://github.com/taikoxyz/taiko-mono/issues/17789)) ([a889f1a](https://github.com/taikoxyz/taiko-mono/commit/a889f1a3e6c27b6758e873572c371ac9399a3d9a)) -* **protocol:** update L1 deployment ([#17804](https://github.com/taikoxyz/taiko-mono/issues/17804)) ([25ace9b](https://github.com/taikoxyz/taiko-mono/commit/25ace9bd2b18d91cbf165968cc27d34ccbd7067a)) -* **protocol:** update L1 deployment ([#17812](https://github.com/taikoxyz/taiko-mono/issues/17812)) ([5b43df1](https://github.com/taikoxyz/taiko-mono/commit/5b43df170b6f97cb89360e2d210d4a768d9247c3)) -* **protocol:** update L1 deployment ([#17817](https://github.com/taikoxyz/taiko-mono/issues/17817)) ([311c948](https://github.com/taikoxyz/taiko-mono/commit/311c948850e8b4d46218fd4aba92d03bc6349445)) -* **protocol:** update mainnet deployment ([#17846](https://github.com/taikoxyz/taiko-mono/issues/17846)) ([ba6bf94](https://github.com/taikoxyz/taiko-mono/commit/ba6bf942213468310c6233051a90356268dea70f)) -* **protocol:** update mainnet deployment ([#17847](https://github.com/taikoxyz/taiko-mono/issues/17847)) ([92344df](https://github.com/taikoxyz/taiko-mono/commit/92344dfb8c97bae370d722f887fb2c603f96c480)) -* **protocol:** upgrade sp1 verifier in hekla ([#18027](https://github.com/taikoxyz/taiko-mono/issues/18027)) ([de27e6e](https://github.com/taikoxyz/taiko-mono/commit/de27e6e586e14410c309e68ce6b81504b9ba9a5b)) - - -### Code Refactoring - -* **protocol:** add MainnetGuardianProver ([#17805](https://github.com/taikoxyz/taiko-mono/issues/17805)) ([6f68316](https://github.com/taikoxyz/taiko-mono/commit/6f68316e89373670cf2c58bde5e64de196b9c139)) -* **protocol:** add MainnetSgxVerifier ([#17803](https://github.com/taikoxyz/taiko-mono/issues/17803)) ([a4be247](https://github.com/taikoxyz/taiko-mono/commit/a4be247e181861300d79af6454b3fd3776100b48)) -* **protocol:** added cached version of the bridge and vaults ([#17801](https://github.com/taikoxyz/taiko-mono/issues/17801)) ([b70cc57](https://github.com/taikoxyz/taiko-mono/commit/b70cc57704d750081a62a7e8e44f68f32efdc4c1)) -* **protocol:** avoid writing `livenessBond`, `proposedAt`, and `proposedIn` to storage ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) -* **protocol:** convert metadata from V2 to V1 only once ([#17842](https://github.com/taikoxyz/taiko-mono/issues/17842)) ([55ced31](https://github.com/taikoxyz/taiko-mono/commit/55ced319d68fe40fe82d1c7e0a268735c3545923)) -* **protocol:** delete packages/protocol/contracts/compiled ([#17849](https://github.com/taikoxyz/taiko-mono/issues/17849)) ([1fd907c](https://github.com/taikoxyz/taiko-mono/commit/1fd907cc81807027e730c0e27e258230670522df)) -* **protocol:** extract an IBlockHash interface from TaikoL2 ([#18045](https://github.com/taikoxyz/taiko-mono/issues/18045)) ([bff481e](https://github.com/taikoxyz/taiko-mono/commit/bff481e8a2898fab8396d368de84f8f343c532f0)) -* **protocol:** improve mainnet gas efficiency with addresses cached ([#17791](https://github.com/taikoxyz/taiko-mono/issues/17791)) ([b12227d](https://github.com/taikoxyz/taiko-mono/commit/b12227d4d2b2636fb80e04ee7ebc2dec3c17faa8)) -* **protocol:** improve MainnetSgxVerifier ([#17811](https://github.com/taikoxyz/taiko-mono/issues/17811)) ([4e7a421](https://github.com/taikoxyz/taiko-mono/commit/4e7a421967a4cea897f1ffbeeae254fbcad27117)) -* **protocol:** introduce BlockV2 for client-side compability ([#17935](https://github.com/taikoxyz/taiko-mono/issues/17935)) ([e46cf29](https://github.com/taikoxyz/taiko-mono/commit/e46cf294862c293b73b817574669115b85e973a7)) -* **protocol:** name address manager param clearer ([#17806](https://github.com/taikoxyz/taiko-mono/issues/17806)) ([1d5a6ff](https://github.com/taikoxyz/taiko-mono/commit/1d5a6ff191e8457ee12c96cb73c074560c556a2a)) -* **protocol:** refactor TierProvider implementations ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) -* **protocol:** remove ProposerAccess for easier composability ([#17994](https://github.com/taikoxyz/taiko-mono/issues/17994)) ([80176a1](https://github.com/taikoxyz/taiko-mono/commit/80176a1525c374039256c779f4a2408971759d22)) -* **protocol:** remove the receive function from TaikoL1.sol ([#17865](https://github.com/taikoxyz/taiko-mono/issues/17865)) ([3542420](https://github.com/taikoxyz/taiko-mono/commit/35424204d9f41d49f4a12869ed4410b6de7f577e)) -* **protocol:** remove uncessary init2() from TaikoL2 ([#17973](https://github.com/taikoxyz/taiko-mono/issues/17973)) ([4e08881](https://github.com/taikoxyz/taiko-mono/commit/4e0888190e172c950dc5e81a5115ee0fb6df3f11)) -* **protocol:** simplify mainnet address caching ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) -* **protocol:** use npm to manage third-party solidity dependency ([#17881](https://github.com/taikoxyz/taiko-mono/issues/17881)) ([d524e69](https://github.com/taikoxyz/taiko-mono/commit/d524e693449de9d65154471786fa4f5e8c45a381)) - - -### Tests - -* **protocol:** add test case of risc0 groth16 ([#17904](https://github.com/taikoxyz/taiko-mono/issues/17904)) ([90bc01d](https://github.com/taikoxyz/taiko-mono/commit/90bc01dfbef1129be1bd94e85c9ecd7c7b28b1da)) -* **taiko-client:** use env names which defined in flag configs ([#17921](https://github.com/taikoxyz/taiko-mono/issues/17921)) ([196b74e](https://github.com/taikoxyz/taiko-mono/commit/196b74eb2b4498bc3e6511915e011a885fcc530f)) - - -### Workflow - -* **protocol:** upgrade to use solc 0.8.27 ([#18037](https://github.com/taikoxyz/taiko-mono/issues/18037)) ([3a56b57](https://github.com/taikoxyz/taiko-mono/commit/3a56b5788b3e2473381429e5fddfaac2f10fa174)) - - -### Build - -* **deps:** bump merkletreejs from 0.3.11 to 0.4.0 ([#17942](https://github.com/taikoxyz/taiko-mono/issues/17942)) ([1624b71](https://github.com/taikoxyz/taiko-mono/commit/1624b711e3fe1862f000e1d2970d6aee1b8990c9)) - ## [1.8.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.7.0...protocol-v1.8.0) (2024-07-11) diff --git a/packages/protocol/README.md b/packages/protocol/README.md index 371e99b697..547fa503d6 100644 --- a/packages/protocol/README.md +++ b/packages/protocol/README.md @@ -1,139 +1,145 @@ # Taiko Protocol -This package contains rollup contracts on both L1 and L2, along with other assisting code. Taiko L2's chain ID is [167](https://github.com/ethereum-lists/chains/pull/1611). +This repository contains the Taiko Based Contestable Rollup (BCR) protocol and supporting tools. The project is managed using `pnpm` and `foundry`. -## Getting Started +## Prerequisites -Before compiling smart contracts, ensure all necessary dependencies are installed: +Before compiling the smart contracts, ensure the following are installed and up to date: -```sh -pnpm install +- [Foundry](https://book.getfoundry.sh/) +- [pnpm](https://pnpm.io/) + +To install dependencies: + +```bash +foundryup && pnpm install ``` -Then, compile the smart contracts: +## Compilation and Testing -```sh -pnpm compile +Taiko’s protocol is split between Layer 1 (L1) and Layer 2 (L2). The smart contracts need to be compiled and tested separately for each layer: + +### Layer 1 (Ethereum, Duncan Hardfork) + +To compile, run tests, and generate the storage layout for L1: + +```bash +pnpm compile:l1 +pnpm test:l1 +pnpm layout:l1 ``` -If you run into `Error: Unknown version provided`, you should upgrade your foundry installation by running `curl -L https://foundry.paradigm.xyz | bash`. +### Layer 2 (Taiko, Shanghai Hardfork) -## Style Guide +Similarly, for L2: + +```bash +pnpm compile:l2 +pnpm test:l2 +pnpm layout:l2 +``` + +### Compile and Test for Both Layers + +To compile and test contracts for both L1 and L2 at once: + +```bash +pnpm compile +pnpm test +pnpm layout +``` -Please see [CONTRIBUTING.md](../../CONTRIBUTING.md) for the source code style guidelines to adhere to. +## Layer 2 Genesis Block -## Generate L2 Genesis JSON's `alloc` Field +### Generating a Dummy Genesis Block -Create a `config.js` with the following structure: +To generate dummy data for the L2 genesis block, create a configuration file at `./test/genesis/data/genesis_config.js` with the following content: ```javascript module.exports = { - // Owner address of the pre-deployed L2 contracts. contractOwner: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", - // Chain ID of the Taiko L2 network. chainId: 167, - // Account address and pre-mint ETH amount as key-value pairs. seedAccounts: [ { "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": 1024 }, { "0x79fcdef22feed20eddacbb2587640e45491b757f": 1024 }, ], - // Owner Chain ID, Security Council, and Timelock Controller l1ChainId: 31337, ownerSecurityCouncil: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", ownerTimelockController: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", - // L2 EIP-1559 baseFee calculation related fields. param1559: { gasExcess: 1, }, - // Option to pre-deploy an ERC-20 token. predeployERC20: true, }; ``` -Then, execute the generation script: +Then compile the L2 contracts and generate the genesis block: -```sh -pnpm compile && pnpm generate:genesis config.js +```bash +pnpm compile:l2 +pnpm genesis:gen ``` -The script will output two JSON files under `./deployments`: - -- `l2_genesis_alloc.json`: the `alloc` field which will be used in L2 genesis JSON file -- `l2_genesis_storage_layout.json`: the storage layout of those pre-deployed contracts - -## Using Foundry +This generates the following JSON files in `./test/genesis/data/`: -This project also integrates with Foundry for building and testing contracts. +- `l2_genesis_alloc.json`: Contains the `alloc` field for the L2 genesis block. Use this in a `geth` or `taiko-geth` genesis block following [this guide](https://geth.ethereum.org/docs/fundamentals/private-network#creating-genesis-block). +- `l2_genesis_storage_layout.json`: Displays the storage layout of the pre-deployed contracts. -- To compile using foundry: `forge build` or `pnpm compile` -- To run foundry tests: `forge test --gas-report -vvv` or `pnpm test:foundry` +To validate the genesis data: -## Generating and Running the L2 Genesis Block - -The generation of the L2 genesis block and obtaining its hash involves a series of steps, including constructing the genesis JSON, followed by the actual generation and retrieval of the genesis block hash. A test can be executed to comprehend this process. - -### Testing Genesis Block Creation - -To understand how the `genesis.json` is built from deployment files and how to generate the genesis block and its hash, you can use the `test:genesis` command. This test serves as a learning tool: - -```sh -pnpm test:genesis +```bash +pnpm genesis:test ``` -This test, defined in `./genesis/generate_genesis.test.sh`, compiles the contracts, generates the genesis JSON, and initiates a Geth node using Docker to simulate the deployment of the genesis block. Reviewing this script and its output can help you grasp the steps required to create and initiate a genesis block for the Taiko Protocol. - -### Generating the Actual Genesis Block - -After understanding the process from the test, proceed to generate the actual `genesis.json` and the genesis block: - -1. **Build the Genesis JSON:** Use the information learned from the `test:genesis` to build the `genesis.json` file from the files in the `/deployments/` directory. The `generate_genesis.test.sh` script contains the necessary commands to create this file. - -2. **Run Geth to Generate the Genesis Block:** You can use Geth to initialize and run a private network with the genesis block. You can start Geth with the following commands: +This runs tests using Docker and `taiko-geth` to simulate the L2 genesis block deployment, and generates a `genesis.json` file in `./test/genesis/data/`. - ```sh - geth --datadir ~/taiko-l2-network/node init /deployments/genesis.json - geth --datadir ~/taiko-l2-network/node --networkid 167 --http --http.addr 127.0.0.1 --http.port 8552 --http.corsdomain "*" - ``` +### Generating an Actual Genesis Block - For details refer to the Geth documentation on [creating a genesis block](https://geth.ethereum.org/docs/fundamentals/private-network#creating-genesis-block). +To generate the actual L2 genesis block, create a `genesis.json` file based on `l2_genesis_alloc.json`, following [this guide](https://geth.ethereum.org/docs/fundamentals/private-network#creating-genesis-block). -3. **Retrieve the Genesis Block Hash:** Connect to the Geth node using the command: +Next, initialize `taiko-geth` with the generated `genesis.json`: - ```sh - geth attach ~/taiko-l2-network/node/geth.ipc - ``` +```bash +geth --datadir ~/taiko-l2-network/node init test/layer2/genesis/data/genesis.json +geth --datadir ~/taiko-l2-network/node --networkid 167 --http --http.addr 127.0.0.1 --http.port 8552 --http.corsdomain "*" +``` - In the Geth console, use `eth.getBlock(0)` to obtain the hash of the genesis block. +You can retrieve the genesis block hash by attaching to the `geth` instance: -4. **Update `test_deploy_on_l1.sh` File:** Update the `L2_GENESIS_HASH` variable in the `test_deploy_on_l1.sh` script with the obtained genesis block hash. +```bash +geth attach ~/taiko-l2-network/node/geth.ipc +``` -By following these steps, you will successfully generate the L2 genesis block for the Taiko Protocol, retrieve its hash, and prepare for the L1 contract deployment. +Then run: -## Deploying the L1 Contracts +```bash +eth.getBlock(0) +``` -To deploy L1 contracts for Taiko Protocol, you can use any Ethereum network. This guide illustrates the process using a Hardhat local network, but it's adaptable to others. The deployment relies on `script/test_deploy_on_l1.sh`, which targets a node at `http://localhost:8545` by default. +Copy the genesis block hash and replace the `L2_GENESIS_HASH` variable in `deploy_protocol_on_l1.sh` with this value. -Here’s how you can proceed: +### Deploying Taiko BCR on Layer 1 -1. **Ensure Sufficient ETH:** Check that the address associated with the private key in `script/test_deploy_on_l1.sh` has enough ETH for deploying contracts on the Hardhat network. +To deploy Taiko BCR on L1, start a local L1 network: -2. **Update Contract Addresses:** After running the genesis block generation script (`pnpm test:genesis`), you will receive a list of pre-computed contract addresses. These addresses need to be added to the `test_deploy_on_l1.sh` file. Make sure to update this file with the correct contract addresses before proceeding with the deployment. +```bash +anvil --hardfork cancun +``` -3. **Start a Local Development Network:** While this guide uses Hardhat as an example, you can use any Ethereum network. If you choose to use Hardhat, start a local Ethereum network for development and testing: +Make sure you have sufficient ether for transactions, then deploy the contracts: -```sh -pnpm hardhat node +```bash +pnpm test:deploy:l1 ``` -4. **Deploy Contracts Using Foundry:** Once your network is running, open a new terminal window and execute the deployment scripts using Foundry: +This command runs the deployment script located at `script/deploy_protocol_on_l1.sh`, assuming L1 is accessible at `http://localhost:8545`. -```sh -pnpm test:deploy -``` +## Style Guide -This command will deploy the L1 contracts using the settings and addresses you’ve provided in the `test_deploy_on_l1.sh` script. +Refer to [CONTRIBUTING.md](https://www.notion.so/CONTRIBUTING.md) for code style guidelines. -## Running slither +Before committing code, format and lint it using: -1. Install the latest [slither](https://github.com/crytic/slither?tab=readme-ov-file#how-to-install). -2. From `protocol/`, execute `slither . --checklist > checklist.md` to re-generate the checklist. +```bash +pnpm fmt:sol +``` diff --git a/packages/protocol/contract_layout_layer1.md b/packages/protocol/contract_layout_layer1.md index 45b2f5ce7d..f1ff0bd4fb 100644 --- a/packages/protocol/contract_layout_layer1.md +++ b/packages/protocol/contract_layout_layer1.md @@ -1,6 +1,6 @@ ## ERC1155Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC1155Vault | | _initializing | bool | 0 | 1 | 1 | ERC1155Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC1155Vault | @@ -23,8 +23,8 @@ | __gap | uint256[50] | 451 | 0 | 1600 | ERC1155Vault | ## ERC20Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|-------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC20Vault | | _initializing | bool | 0 | 1 | 1 | ERC20Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC20Vault | @@ -46,8 +46,8 @@ | __gap | uint256[46] | 305 | 0 | 1472 | ERC20Vault | ## ERC721Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|--------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|---------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC721Vault | | _initializing | bool | 0 | 1 | 1 | ERC721Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC721Vault | @@ -68,8 +68,8 @@ | __gap | uint256[50] | 351 | 0 | 1600 | ERC721Vault | ## BridgedERC20 -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|-------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC20 | | _initializing | bool | 0 | 1 | 1 | BridgedERC20 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC20 | @@ -97,8 +97,8 @@ | __gap | uint256[47] | 304 | 0 | 1504 | BridgedERC20 | ## BridgedERC20V2 -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|--------------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------------------------------------|------|--------|-------|---------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC20V2 | | _initializing | bool | 0 | 1 | 1 | BridgedERC20V2 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC20V2 | @@ -133,8 +133,8 @@ | __gap | uint256[49] | 404 | 0 | 1568 | BridgedERC20V2 | ## BridgedERC721 -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|----------------------------------------------|------|--------|-------|------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|----------------------------------------------|------|--------|-------|-------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC721 | | _initializing | bool | 0 | 1 | 1 | BridgedERC721 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC721 | @@ -161,8 +161,8 @@ | __gap | uint256[48] | 353 | 0 | 1536 | BridgedERC721 | ## BridgedERC1155 -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|-------------------------------------------------|------|--------|-------|---------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC1155 | | _initializing | bool | 0 | 1 | 1 | BridgedERC1155 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC1155 | @@ -188,8 +188,8 @@ | __gap | uint256[46] | 355 | 0 | 1472 | BridgedERC1155 | ## Bridge -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------|------|--------|-------|------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------|------|--------|-------|-------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | Bridge | | _initializing | bool | 0 | 1 | 1 | Bridge | | __gap | uint256[50] | 1 | 0 | 1600 | Bridge | @@ -212,8 +212,8 @@ | __gap | uint256[44] | 257 | 0 | 1408 | Bridge | ## QuotaManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------------|------|--------|-------|------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------------|------|--------|-------|-------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | QuotaManager | | _initializing | bool | 0 | 1 | 1 | QuotaManager | | __gap | uint256[50] | 1 | 0 | 1600 | QuotaManager | @@ -232,8 +232,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | QuotaManager | ## AddressManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | AddressManager | | _initializing | bool | 0 | 1 | 1 | AddressManager | | __gap | uint256[50] | 1 | 0 | 1600 | AddressManager | @@ -251,16 +251,16 @@ | __gap | uint256[49] | 252 | 0 | 1568 | AddressManager | ## AddressResolver -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | AddressResolver | | _initializing | bool | 0 | 1 | 1 | AddressResolver | | addressManager | address | 0 | 2 | 20 | AddressResolver | | __gap | uint256[49] | 1 | 0 | 1568 | AddressResolver | ## EssentialContract -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|----------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-----------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | EssentialContract | | _initializing | bool | 0 | 1 | 1 | EssentialContract | | __gap | uint256[50] | 1 | 0 | 1600 | EssentialContract | @@ -276,8 +276,8 @@ | __gap | uint256[49] | 202 | 0 | 1568 | EssentialContract | ## SignalService -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------------|------|--------|-------|--------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------------|------|--------|-------|---------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | SignalService | | _initializing | bool | 0 | 1 | 1 | SignalService | | __gap | uint256[50] | 1 | 0 | 1600 | SignalService | @@ -296,8 +296,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | SignalService | ## TaikoToken -| Name | Type | Slot | Offset | Bytes | Contract | -|-----------------------------------------------------|---------------------------------------------------------------|------|--------|-------|-----------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------------------------------------------|---------------------------------------------------------------|------|--------|-------|--------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | TaikoToken | | _initializing | bool | 0 | 1 | 1 | TaikoToken | | __gap | uint256[50] | 1 | 0 | 1600 | TaikoToken | @@ -333,8 +333,8 @@ | __gap | uint256[50] | 504 | 0 | 1600 | TaikoToken | ## ComposeVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|-----------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ComposeVerifier | | _initializing | bool | 0 | 1 | 1 | ComposeVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | ComposeVerifier | @@ -351,8 +351,8 @@ | __gap | uint256[50] | 251 | 0 | 1600 | ComposeVerifier | ## TeeAnyVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|---------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|----------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | TeeAnyVerifier | | _initializing | bool | 0 | 1 | 1 | TeeAnyVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | TeeAnyVerifier | @@ -370,8 +370,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | TeeAnyVerifier | ## ZkAndTeeVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|-------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|--------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ZkAndTeeVerifier | | _initializing | bool | 0 | 1 | 1 | ZkAndTeeVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | ZkAndTeeVerifier | @@ -389,8 +389,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | ZkAndTeeVerifier | ## ZkAnyVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|-------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|--------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ZkAnyVerifier | | _initializing | bool | 0 | 1 | 1 | ZkAnyVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | ZkAnyVerifier | @@ -408,8 +408,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | ZkAnyVerifier | ## Risc0Verifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|-----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|--------------------------|------|--------|-------|------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | Risc0Verifier | | _initializing | bool | 0 | 1 | 1 | Risc0Verifier | | __gap | uint256[50] | 1 | 0 | 1600 | Risc0Verifier | @@ -427,8 +427,8 @@ | __gap | uint256[49] | 252 | 0 | 1568 | Risc0Verifier | ## SP1Verifier -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|--------------------------|------|--------|-------|-------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------|------|--------|-------|--------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | SP1Verifier | | _initializing | bool | 0 | 1 | 1 | SP1Verifier | | __gap | uint256[50] | 1 | 0 | 1600 | SP1Verifier | @@ -446,8 +446,8 @@ | __gap | uint256[49] | 252 | 0 | 1568 | SP1Verifier | ## SgxVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------|-------------------------------------------------|------|--------|-------|-------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | SgxVerifier | | _initializing | bool | 0 | 1 | 1 | SgxVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | SgxVerifier | @@ -467,8 +467,8 @@ | __gap | uint256[47] | 254 | 0 | 1504 | SgxVerifier | ## AutomataDcapV3Attestation -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------------|-------------------------------------------------|------|--------|-------|-----------------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | AutomataDcapV3Attestation | | _initializing | bool | 0 | 1 | 1 | AutomataDcapV3Attestation | | __gap | uint256[50] | 1 | 0 | 1600 | AutomataDcapV3Attestation | @@ -493,8 +493,8 @@ | __gap | uint256[39] | 261 | 0 | 1248 | AutomataDcapV3Attestation | ## TaikoL1 -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|------------------------|------|--------|-------|----------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|------------------------|------|--------|-------|--------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | TaikoL1 | | _initializing | bool | 0 | 1 | 1 | TaikoL1 | | __gap | uint256[50] | 1 | 0 | 1600 | TaikoL1 | @@ -516,8 +516,8 @@ |------|------|------|--------|-------|----------| ## HeklaTaikoL1 -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|------------------------|------|--------|-------|-----------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|------------------------|------|--------|-------|------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | HeklaTaikoL1 | | _initializing | bool | 0 | 1 | 1 | HeklaTaikoL1 | | __gap | uint256[50] | 1 | 0 | 1600 | HeklaTaikoL1 | @@ -539,8 +539,8 @@ |------|------|------|--------|-------|----------| ## MainnetBridge -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------|------|--------|-------|----------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------|------|--------|-------|----------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetBridge | | _initializing | bool | 0 | 1 | 1 | MainnetBridge | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetBridge | @@ -563,8 +563,8 @@ | __gap | uint256[44] | 257 | 0 | 1408 | MainnetBridge | ## MainnetSignalService -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------------|------|--------|-------|------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------------|------|--------|-------|------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetSignalService | | _initializing | bool | 0 | 1 | 1 | MainnetSignalService | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetSignalService | @@ -583,8 +583,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | MainnetSignalService | ## MainnetERC20Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetERC20Vault | | _initializing | bool | 0 | 1 | 1 | MainnetERC20Vault | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetERC20Vault | @@ -606,8 +606,8 @@ | __gap | uint256[46] | 305 | 0 | 1472 | MainnetERC20Vault | ## MainnetERC1155Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|----------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetERC1155Vault | | _initializing | bool | 0 | 1 | 1 | MainnetERC1155Vault | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetERC1155Vault | @@ -630,8 +630,8 @@ | __gap | uint256[50] | 451 | 0 | 1600 | MainnetERC1155Vault | ## MainnetERC721Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetERC721Vault | | _initializing | bool | 0 | 1 | 1 | MainnetERC721Vault | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetERC721Vault | @@ -652,8 +652,8 @@ | __gap | uint256[50] | 351 | 0 | 1600 | MainnetERC721Vault | ## MainnetSharedAddressManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetSharedAddressManager | | _initializing | bool | 0 | 1 | 1 | MainnetSharedAddressManager | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetSharedAddressManager | @@ -683,8 +683,8 @@ |------|------|------|--------|-------|----------| ## MainnetSgxVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------|-------------------------------------------------|------|--------|-------|------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------|-------------------------------------------------|------|--------|-------|-------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetSgxVerifier | | _initializing | bool | 0 | 1 | 1 | MainnetSgxVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetSgxVerifier | @@ -704,8 +704,8 @@ | __gap | uint256[47] | 254 | 0 | 1504 | MainnetSgxVerifier | ## MainnetSP1Verifier -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|--------------------------|------|--------|-------|------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------|------|--------|-------|-------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetSP1Verifier | | _initializing | bool | 0 | 1 | 1 | MainnetSP1Verifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetSP1Verifier | @@ -723,8 +723,8 @@ | __gap | uint256[49] | 252 | 0 | 1568 | MainnetSP1Verifier | ## MainnetZkAnyVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|----------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-----------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetZkAnyVerifier | | _initializing | bool | 0 | 1 | 1 | MainnetZkAnyVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetZkAnyVerifier | @@ -742,8 +742,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | MainnetZkAnyVerifier | ## MainnetRisc0Verifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|----------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|--------------------------|------|--------|-------|-----------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetRisc0Verifier | | _initializing | bool | 0 | 1 | 1 | MainnetRisc0Verifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetRisc0Verifier | @@ -761,8 +761,8 @@ | __gap | uint256[49] | 252 | 0 | 1568 | MainnetRisc0Verifier | ## MainnetZkAndTeeVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|----------------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-----------------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetZkAndTeeVerifier | | _initializing | bool | 0 | 1 | 1 | MainnetZkAndTeeVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetZkAndTeeVerifier | @@ -780,8 +780,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | MainnetZkAndTeeVerifier | ## MainnetTeeAnyVerifier -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|------------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-------------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetTeeAnyVerifier | | _initializing | bool | 0 | 1 | 1 | MainnetTeeAnyVerifier | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetTeeAnyVerifier | @@ -799,8 +799,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | MainnetTeeAnyVerifier | ## MainnetGuardianProver -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------------|-------------------------------------------------|------|--------|-------|---------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetGuardianProver | | _initializing | bool | 0 | 1 | 1 | MainnetGuardianProver | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetGuardianProver | @@ -824,8 +824,8 @@ | __gap | uint256[45] | 256 | 0 | 1440 | MainnetGuardianProver | ## MainnetTaikoL1 -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|------------------------|------|--------|-------|------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|------------------------|------|--------|-------|-------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetTaikoL1 | | _initializing | bool | 0 | 1 | 1 | MainnetTaikoL1 | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetTaikoL1 | @@ -843,8 +843,8 @@ | __gap | uint256[50] | 301 | 0 | 1600 | MainnetTaikoL1 | ## MainnetRollupAddressManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------------------------------------------|------|--------|-------|---------------------------------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetRollupAddressManager | | _initializing | bool | 0 | 1 | 1 | MainnetRollupAddressManager | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetRollupAddressManager | @@ -866,8 +866,8 @@ |------|------|------|--------|-------|----------| ## MainnetProverSet -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|----------------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|--------------------------|------|--------|-------|-----------------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | MainnetProverSet | | _initializing | bool | 0 | 1 | 1 | MainnetProverSet | | __gap | uint256[50] | 1 | 0 | 1600 | MainnetProverSet | @@ -886,8 +886,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | MainnetProverSet | ## TokenUnlock -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|--------------------------|------|--------|-------|---------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | TokenUnlock | | _initializing | bool | 0 | 1 | 1 | TokenUnlock | | __gap | uint256[50] | 1 | 0 | 1600 | TokenUnlock | @@ -908,8 +908,8 @@ | __gap | uint256[47] | 254 | 0 | 1504 | TokenUnlock | ## ProverSet -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|--------------------------|------|--------|-------|--------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ProverSet | | _initializing | bool | 0 | 1 | 1 | ProverSet | | __gap | uint256[50] | 1 | 0 | 1600 | ProverSet | @@ -928,8 +928,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | ProverSet | ## GuardianProver -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-------------------------|-------------------------------------------------|------|--------|-------|------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | GuardianProver | | _initializing | bool | 0 | 1 | 1 | GuardianProver | | __gap | uint256[50] | 1 | 0 | 1600 | GuardianProver | diff --git a/packages/protocol/contract_layout_layer2.md b/packages/protocol/contract_layout_layer2.md index c412e16138..4c9776da7d 100644 --- a/packages/protocol/contract_layout_layer2.md +++ b/packages/protocol/contract_layout_layer2.md @@ -1,6 +1,6 @@ ## ERC1155Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC1155Vault | | _initializing | bool | 0 | 1 | 1 | ERC1155Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC1155Vault | @@ -23,8 +23,8 @@ | __gap | uint256[50] | 451 | 0 | 1600 | ERC1155Vault | ## ERC20Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|-------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC20Vault | | _initializing | bool | 0 | 1 | 1 | ERC20Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC20Vault | @@ -46,8 +46,8 @@ | __gap | uint256[46] | 305 | 0 | 1472 | ERC20Vault | ## ERC721Vault -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|------------------------------------------------------|------|--------|-------|--------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|------------------------------------------------------|------|--------|-------|---------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | ERC721Vault | | _initializing | bool | 0 | 1 | 1 | ERC721Vault | | __gap | uint256[50] | 1 | 0 | 1600 | ERC721Vault | @@ -68,8 +68,8 @@ | __gap | uint256[50] | 351 | 0 | 1600 | ERC721Vault | ## BridgedERC20 -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|-------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC20 | | _initializing | bool | 0 | 1 | 1 | BridgedERC20 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC20 | @@ -97,8 +97,8 @@ | __gap | uint256[47] | 304 | 0 | 1504 | BridgedERC20 | ## BridgedERC20V2 -| Name | Type | Slot | Offset | Bytes | Contract | -|------------------|--------------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------------------------------------|------|--------|-------|---------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC20V2 | | _initializing | bool | 0 | 1 | 1 | BridgedERC20V2 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC20V2 | @@ -133,8 +133,8 @@ | __gap | uint256[49] | 404 | 0 | 1568 | BridgedERC20V2 | ## BridgedERC721 -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|----------------------------------------------|------|--------|-------|------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|----------------------------------------------|------|--------|-------|-------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC721 | | _initializing | bool | 0 | 1 | 1 | BridgedERC721 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC721 | @@ -161,8 +161,8 @@ | __gap | uint256[48] | 353 | 0 | 1536 | BridgedERC721 | ## BridgedERC1155 -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------|-------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------|-------------------------------------------------|------|--------|-------|---------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedERC1155 | | _initializing | bool | 0 | 1 | 1 | BridgedERC1155 | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedERC1155 | @@ -188,8 +188,8 @@ | __gap | uint256[46] | 355 | 0 | 1472 | BridgedERC1155 | ## Bridge -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------|------|--------|-------|------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------|------|--------|-------|-------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | Bridge | | _initializing | bool | 0 | 1 | 1 | Bridge | | __gap | uint256[50] | 1 | 0 | 1600 | Bridge | @@ -212,8 +212,8 @@ | __gap | uint256[44] | 257 | 0 | 1408 | Bridge | ## QuotaManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------------|------|--------|-------|------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------------|------|--------|-------|-------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | QuotaManager | | _initializing | bool | 0 | 1 | 1 | QuotaManager | | __gap | uint256[50] | 1 | 0 | 1600 | QuotaManager | @@ -232,8 +232,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | QuotaManager | ## AddressManager -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------------------------------------------|------|--------|-------|-----------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | AddressManager | | _initializing | bool | 0 | 1 | 1 | AddressManager | | __gap | uint256[50] | 1 | 0 | 1600 | AddressManager | @@ -251,16 +251,16 @@ | __gap | uint256[49] | 252 | 0 | 1568 | AddressManager | ## AddressResolver -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | AddressResolver | | _initializing | bool | 0 | 1 | 1 | AddressResolver | | addressManager | address | 0 | 2 | 20 | AddressResolver | | __gap | uint256[49] | 1 | 0 | 1568 | AddressResolver | ## EssentialContract -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|----------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|-----------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | EssentialContract | | _initializing | bool | 0 | 1 | 1 | EssentialContract | | __gap | uint256[50] | 1 | 0 | 1600 | EssentialContract | @@ -276,8 +276,8 @@ | __gap | uint256[49] | 202 | 0 | 1568 | EssentialContract | ## SignalService -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-----------------------------------------------|------|--------|-------|--------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-----------------------------------------------|------|--------|-------|---------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | SignalService | | _initializing | bool | 0 | 1 | 1 | SignalService | | __gap | uint256[50] | 1 | 0 | 1600 | SignalService | @@ -296,8 +296,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | SignalService | ## BridgedTaikoToken -| Name | Type | Slot | Offset | Bytes | Contract | -|-----------------------------------------------------|---------------------------------------------------------------|------|--------|-------|-------------------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------------------------------------------|---------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | BridgedTaikoToken | | _initializing | bool | 0 | 1 | 1 | BridgedTaikoToken | | __gap | uint256[50] | 1 | 0 | 1600 | BridgedTaikoToken | @@ -333,8 +333,8 @@ | __gap | uint256[50] | 504 | 0 | 1600 | BridgedTaikoToken | ## DelegateOwner -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|-------------|------|--------|-------|----------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------|-------------|------|--------|-------|--------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | DelegateOwner | | _initializing | bool | 0 | 1 | 1 | DelegateOwner | | __gap | uint256[50] | 1 | 0 | 1600 | DelegateOwner | @@ -355,8 +355,8 @@ | __gap | uint256[48] | 253 | 0 | 1536 | DelegateOwner | ## TaikoL2 -| Name | Type | Slot | Offset | Bytes | Contract | -|-----------------|-----------------------------|------|--------|-------|----------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------|-----------------------------|------|--------|-------|--------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | TaikoL2 | | _initializing | bool | 0 | 1 | 1 | TaikoL2 | | __gap | uint256[50] | 1 | 0 | 1600 | TaikoL2 | @@ -380,8 +380,8 @@ | __gap | uint256[46] | 255 | 0 | 1472 | TaikoL2 | ## HeklaTaikoL2 -| Name | Type | Slot | Offset | Bytes | Contract | -|-----------------|-----------------------------|------|--------|-------|-----------------------------------------------| +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------|-----------------------------|------|--------|-------|------------------------------------------------------| | _initialized | uint8 | 0 | 0 | 1 | HeklaTaikoL2 | | _initializing | bool | 0 | 1 | 1 | HeklaTaikoL2 | | __gap | uint256[50] | 1 | 0 | 1600 | HeklaTaikoL2 | diff --git a/packages/protocol/contracts/automata-attestation/AutomataDcapV3Attestation.sol b/packages/protocol/contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/AutomataDcapV3Attestation.sol rename to packages/protocol/contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol index 87086e5c0c..aec2b13ccc 100644 --- a/packages/protocol/contracts/automata-attestation/AutomataDcapV3Attestation.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import { V3Struct } from "./lib/QuoteV3Auth/V3Struct.sol"; import { V3Parser } from "./lib/QuoteV3Auth/V3Parser.sol"; @@ -17,7 +17,7 @@ import { BytesUtils } from "./utils/BytesUtils.sol"; // External Libraries import { ISigVerifyLib } from "./interfaces/ISigVerifyLib.sol"; -import { EssentialContract } from "../common/EssentialContract.sol"; +import { EssentialContract } from "../../shared/common/EssentialContract.sol"; /// @title AutomataDcapV3Attestation /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/README.md b/packages/protocol/contracts/layer1/automata-attestation/README.md similarity index 100% rename from packages/protocol/contracts/automata-attestation/README.md rename to packages/protocol/contracts/layer1/automata-attestation/README.md diff --git a/packages/protocol/contracts/automata-attestation/interfaces/IAttestation.sol b/packages/protocol/contracts/layer1/automata-attestation/interfaces/IAttestation.sol similarity index 94% rename from packages/protocol/contracts/automata-attestation/interfaces/IAttestation.sol rename to packages/protocol/contracts/layer1/automata-attestation/interfaces/IAttestation.sol index f2975aa415..e5a960a4af 100644 --- a/packages/protocol/contracts/automata-attestation/interfaces/IAttestation.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/interfaces/IAttestation.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import { V3Struct } from "../lib/QuoteV3Auth/V3Struct.sol"; diff --git a/packages/protocol/contracts/automata-attestation/interfaces/ISigVerifyLib.sol b/packages/protocol/contracts/layer1/automata-attestation/interfaces/ISigVerifyLib.sol similarity index 92% rename from packages/protocol/contracts/automata-attestation/interfaces/ISigVerifyLib.sol rename to packages/protocol/contracts/layer1/automata-attestation/interfaces/ISigVerifyLib.sol index cc59c170e8..3170d0649a 100644 --- a/packages/protocol/contracts/automata-attestation/interfaces/ISigVerifyLib.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/interfaces/ISigVerifyLib.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title ISigVerifyLib /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/lib/EnclaveIdStruct.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/EnclaveIdStruct.sol similarity index 96% rename from packages/protocol/contracts/automata-attestation/lib/EnclaveIdStruct.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/EnclaveIdStruct.sol index c810cae2ae..d41be6d967 100644 --- a/packages/protocol/contracts/automata-attestation/lib/EnclaveIdStruct.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/EnclaveIdStruct.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title EnclaveIdStruct /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/lib/PEMCertChainLib.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/lib/PEMCertChainLib.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol index 0b282f331e..0fcc99f0a3 100644 --- a/packages/protocol/contracts/automata-attestation/lib/PEMCertChainLib.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import { LibString } from "solady/src/utils/LibString.sol"; import { Asn1Decode, NodePtr } from "../utils/Asn1Decode.sol"; diff --git a/packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Parser.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Parser.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Parser.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Parser.sol index d4fa7ed426..59e95ef1f4 100644 --- a/packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Parser.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Parser.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import { Base64 } from "solady/src/utils/Base64.sol"; import { BytesUtils } from "../../utils/BytesUtils.sol"; diff --git a/packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol similarity index 98% rename from packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol index 06f975a154..9ecb757294 100644 --- a/packages/protocol/contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title V3Struct /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/lib/TCBInfoStruct.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/TCBInfoStruct.sol similarity index 96% rename from packages/protocol/contracts/automata-attestation/lib/TCBInfoStruct.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/TCBInfoStruct.sol index dc51e8fb01..b450853c5b 100644 --- a/packages/protocol/contracts/automata-attestation/lib/TCBInfoStruct.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/TCBInfoStruct.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title TCBInfoStruct /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/lib/interfaces/IPEMCertChainLib.sol b/packages/protocol/contracts/layer1/automata-attestation/lib/interfaces/IPEMCertChainLib.sol similarity index 97% rename from packages/protocol/contracts/automata-attestation/lib/interfaces/IPEMCertChainLib.sol rename to packages/protocol/contracts/layer1/automata-attestation/lib/interfaces/IPEMCertChainLib.sol index 233a2b55ef..eeca3b9294 100644 --- a/packages/protocol/contracts/automata-attestation/lib/interfaces/IPEMCertChainLib.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/lib/interfaces/IPEMCertChainLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IPEMCertChainLib /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/automata-attestation/utils/Asn1Decode.sol b/packages/protocol/contracts/layer1/automata-attestation/utils/Asn1Decode.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/utils/Asn1Decode.sol rename to packages/protocol/contracts/layer1/automata-attestation/utils/Asn1Decode.sol index 1f1abd2c84..30edd958e7 100644 --- a/packages/protocol/contracts/automata-attestation/utils/Asn1Decode.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/utils/Asn1Decode.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // Original source: https://github.com/JonahGroendal/asn1-decode -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; // Inspired by PufferFinance/rave - Apache-2.0 license // https://github.com/JonahGroendal/asn1-decode/blob/5c2d1469fc678513753786acb441e597969192ec/contracts/Asn1Decode.sol diff --git a/packages/protocol/contracts/automata-attestation/utils/BytesUtils.sol b/packages/protocol/contracts/layer1/automata-attestation/utils/BytesUtils.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/utils/BytesUtils.sol rename to packages/protocol/contracts/layer1/automata-attestation/utils/BytesUtils.sol index bc5fdd1da7..22469685e0 100644 --- a/packages/protocol/contracts/automata-attestation/utils/BytesUtils.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/utils/BytesUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BSD 2-Clause License -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; // Inspired by ensdomains/dnssec-oracle - BSD-2-Clause license // https://github.com/ensdomains/dnssec-oracle/blob/master/contracts/BytesUtils.sol diff --git a/packages/protocol/contracts/automata-attestation/utils/SHA1.sol b/packages/protocol/contracts/layer1/automata-attestation/utils/SHA1.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/utils/SHA1.sol rename to packages/protocol/contracts/layer1/automata-attestation/utils/SHA1.sol index a9b2beba50..6c39a7d25d 100644 --- a/packages/protocol/contracts/automata-attestation/utils/SHA1.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/utils/SHA1.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: BSD 2-Clause License -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; // Inspired by ensdomains/solsha1 - BSD 2-Clause License // https://github.com/ensdomains/solsha1/blob/master/contracts/SHA1.sol diff --git a/packages/protocol/contracts/automata-attestation/utils/SigVerifyLib.sol b/packages/protocol/contracts/layer1/automata-attestation/utils/SigVerifyLib.sol similarity index 98% rename from packages/protocol/contracts/automata-attestation/utils/SigVerifyLib.sol rename to packages/protocol/contracts/layer1/automata-attestation/utils/SigVerifyLib.sol index 752d757232..85bae00b99 100644 --- a/packages/protocol/contracts/automata-attestation/utils/SigVerifyLib.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/utils/SigVerifyLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../interfaces/ISigVerifyLib.sol"; import "./BytesUtils.sol"; diff --git a/packages/protocol/contracts/automata-attestation/utils/X509DateUtils.sol b/packages/protocol/contracts/layer1/automata-attestation/utils/X509DateUtils.sol similarity index 99% rename from packages/protocol/contracts/automata-attestation/utils/X509DateUtils.sol rename to packages/protocol/contracts/layer1/automata-attestation/utils/X509DateUtils.sol index 333084b5ab..ac7ef6bc96 100644 --- a/packages/protocol/contracts/automata-attestation/utils/X509DateUtils.sol +++ b/packages/protocol/contracts/layer1/automata-attestation/utils/X509DateUtils.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title X509DateUtils /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/L1/ITaikoL1.sol b/packages/protocol/contracts/layer1/based/ITaikoL1.sol similarity index 99% rename from packages/protocol/contracts/L1/ITaikoL1.sol rename to packages/protocol/contracts/layer1/based/ITaikoL1.sol index 3e3598b85a..56cc51107d 100644 --- a/packages/protocol/contracts/L1/ITaikoL1.sol +++ b/packages/protocol/contracts/layer1/based/ITaikoL1.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoData.sol"; diff --git a/packages/protocol/contracts/L1/libs/LibBonds.sol b/packages/protocol/contracts/layer1/based/LibBonds.sol similarity index 95% rename from packages/protocol/contracts/L1/libs/LibBonds.sol rename to packages/protocol/contracts/layer1/based/LibBonds.sol index 02246f68aa..e80da12b8e 100644 --- a/packages/protocol/contracts/L1/libs/LibBonds.sol +++ b/packages/protocol/contracts/layer1/based/LibBonds.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "../../common/IAddressResolver.sol"; -import "../../common/LibStrings.sol"; -import "../TaikoData.sol"; +import "../../shared/common/IAddressResolver.sol"; +import "../../shared/common/LibStrings.sol"; +import "./TaikoData.sol"; /// @title LibBonds /// @notice A library that offers helper functions to handle bonds. diff --git a/packages/protocol/contracts/L1/libs/LibData.sol b/packages/protocol/contracts/layer1/based/LibData.sol similarity index 95% rename from packages/protocol/contracts/L1/libs/LibData.sol rename to packages/protocol/contracts/layer1/based/LibData.sol index 20cd2f87b6..242c141790 100644 --- a/packages/protocol/contracts/L1/libs/LibData.sol +++ b/packages/protocol/contracts/layer1/based/LibData.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoData.sol"; -import "../../verifiers/IVerifier.sol"; +import "../verifiers/IVerifier.sol"; +import "./TaikoData.sol"; /// @title LibData /// @notice A library that offers helper functions. @@ -77,7 +77,7 @@ library LibData { blobTxListOffset: 0, blobTxListLength: 0, blobIndex: 0, - baseFeeConfig: TaikoData.BaseFeeConfig(0, 0, 0, 0, 0) + baseFeeConfig: LibSharedData.BaseFeeConfig(0, 0, 0, 0, 0) }); } diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/layer1/based/LibProposing.sol similarity index 96% rename from packages/protocol/contracts/L1/libs/LibProposing.sol rename to packages/protocol/contracts/layer1/based/LibProposing.sol index 063e119261..dab7077aba 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/layer1/based/LibProposing.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../libs/LibAddress.sol"; -import "../../libs/LibNetwork.sol"; +import "../../shared/common/LibAddress.sol"; +import "../../shared/common/LibNetwork.sol"; import "./LibBonds.sol"; import "./LibData.sol"; import "./LibUtils.sol"; @@ -152,7 +152,7 @@ library LibProposing { address permittedProposer = _resolver.resolve(LibStrings.B_BLOCK_PROPOSER, true); if (permittedProposer != address(0)) { - require(permittedProposer == msg.sender, L1_INVALID_PROPOSER()); + if (permittedProposer != msg.sender) revert L1_INVALID_PROPOSER(); local.allowCustomProposer = true; } @@ -169,10 +169,9 @@ library LibProposing { if (local.params.proposer == address(0)) { local.params.proposer = msg.sender; } else { - require( - local.params.proposer == msg.sender || local.allowCustomProposer, - L1_INVALID_CUSTOM_PROPOSER() - ); + if (local.params.proposer != msg.sender && !local.allowCustomProposer) { + revert L1_INVALID_CUSTOM_PROPOSER(); + } } if (local.params.coinbase == address(0)) { @@ -331,7 +330,7 @@ library LibProposing { } } - function _encodeBaseFeeConfig(TaikoData.BaseFeeConfig memory _baseFeeConfig) + function _encodeBaseFeeConfig(LibSharedData.BaseFeeConfig memory _baseFeeConfig) private pure returns (bytes32) diff --git a/packages/protocol/contracts/L1/libs/LibProving.sol b/packages/protocol/contracts/layer1/based/LibProving.sol similarity index 99% rename from packages/protocol/contracts/L1/libs/LibProving.sol rename to packages/protocol/contracts/layer1/based/LibProving.sol index 049a78e4fe..753fa6f097 100644 --- a/packages/protocol/contracts/L1/libs/LibProving.sol +++ b/packages/protocol/contracts/layer1/based/LibProving.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../verifiers/IVerifier.sol"; +import "../verifiers/IVerifier.sol"; import "./LibBonds.sol"; import "./LibData.sol"; import "./LibUtils.sol"; diff --git a/packages/protocol/contracts/L1/libs/LibUtils.sol b/packages/protocol/contracts/layer1/based/LibUtils.sol similarity index 98% rename from packages/protocol/contracts/L1/libs/LibUtils.sol rename to packages/protocol/contracts/layer1/based/LibUtils.sol index e7520ea3d6..d302a7b31d 100644 --- a/packages/protocol/contracts/L1/libs/LibUtils.sol +++ b/packages/protocol/contracts/layer1/based/LibUtils.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "../../common/IAddressResolver.sol"; -import "../../common/LibStrings.sol"; -import "../../libs/LibMath.sol"; +import "../../shared/common/IAddressResolver.sol"; +import "../../shared/common/LibStrings.sol"; +import "../../shared/common/LibMath.sol"; import "../tiers/ITierProvider.sol"; import "../tiers/ITierRouter.sol"; -import "../TaikoData.sol"; +import "./TaikoData.sol"; /// @title LibUtils /// @notice A library that offers helper functions. diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/layer1/based/LibVerifying.sol similarity index 99% rename from packages/protocol/contracts/L1/libs/LibVerifying.sol rename to packages/protocol/contracts/layer1/based/LibVerifying.sol index 4ac11652fc..0c744c249d 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/layer1/based/LibVerifying.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../signal/ISignalService.sol"; +import "../../shared/signal/ISignalService.sol"; import "./LibBonds.sol"; import "./LibUtils.sol"; diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/layer1/based/TaikoData.sol similarity index 96% rename from packages/protocol/contracts/L1/TaikoData.sol rename to packages/protocol/contracts/layer1/based/TaikoData.sol index 035be11973..895a8d841c 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/layer1/based/TaikoData.sol @@ -1,20 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; + +import "../../shared/data/LibSharedData.sol"; /// @title TaikoData /// @notice This library defines various data structures used in the Taiko /// protocol. /// @custom:security-contact security@taiko.xyz library TaikoData { - /// @dev Struct that represents L2 basefee configurations - struct BaseFeeConfig { - uint8 adjustmentQuotient; - uint8 sharingPctg; - uint32 gasIssuancePerSecond; - uint64 minGasExcess; - uint32 maxGasIssuancePerBlock; - } - /// @dev Struct holding Taiko configuration parameters. See {TaikoConfig}. struct Config { // --------------------------------------------------------------------- @@ -48,7 +41,7 @@ library TaikoData { // --------------------------------------------------------------------- // Group 5: Previous configs in TaikoL2 // --------------------------------------------------------------------- - BaseFeeConfig baseFeeConfig; + LibSharedData.BaseFeeConfig baseFeeConfig; // --------------------------------------------------------------------- // Group 6: Others // --------------------------------------------------------------------- @@ -131,7 +124,7 @@ library TaikoData { uint32 blobTxListOffset; uint32 blobTxListLength; uint8 blobIndex; - BaseFeeConfig baseFeeConfig; + LibSharedData.BaseFeeConfig baseFeeConfig; } /// @dev Struct representing transition to be proven. diff --git a/packages/protocol/contracts/L1/TaikoEvents.sol b/packages/protocol/contracts/layer1/based/TaikoEvents.sol similarity index 99% rename from packages/protocol/contracts/L1/TaikoEvents.sol rename to packages/protocol/contracts/layer1/based/TaikoEvents.sol index 9c8c886a64..32bae8634b 100644 --- a/packages/protocol/contracts/L1/TaikoEvents.sol +++ b/packages/protocol/contracts/layer1/based/TaikoEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoData.sol"; diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/layer1/based/TaikoL1.sol similarity index 97% rename from packages/protocol/contracts/L1/TaikoL1.sol rename to packages/protocol/contracts/layer1/based/TaikoL1.sol index cd2bdfe3a3..d15f655cf7 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/layer1/based/TaikoL1.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../common/EssentialContract.sol"; -import "./libs/LibData.sol"; -import "./libs/LibProposing.sol"; -import "./libs/LibProving.sol"; -import "./libs/LibVerifying.sol"; +import "../../shared/common/EssentialContract.sol"; +import "./LibData.sol"; +import "./LibProposing.sol"; +import "./LibProving.sol"; +import "./LibVerifying.sol"; import "./TaikoEvents.sol"; import "./ITaikoL1.sol"; @@ -284,7 +284,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { livenessBond: 125e18, // 125 Taiko token stateRootSyncInternal: 16, maxAnchorHeightOffset: 64, - baseFeeConfig: TaikoData.BaseFeeConfig({ + baseFeeConfig: LibSharedData.BaseFeeConfig({ adjustmentQuotient: 8, sharingPctg: 75, gasIssuancePerSecond: 5_000_000, diff --git a/packages/protocol/contracts/devnet/DevnetTaikoL1.sol b/packages/protocol/contracts/layer1/devnet/DevnetTaikoL1.sol similarity index 89% rename from packages/protocol/contracts/devnet/DevnetTaikoL1.sol rename to packages/protocol/contracts/layer1/devnet/DevnetTaikoL1.sol index 366a288603..c256e1500a 100644 --- a/packages/protocol/contracts/devnet/DevnetTaikoL1.sol +++ b/packages/protocol/contracts/layer1/devnet/DevnetTaikoL1.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1.sol"; +import "../based/TaikoL1.sol"; /// @title DevnetTaikoL1 /// @dev Labeled in AddressResolver as "taiko" @@ -18,7 +18,7 @@ contract DevnetTaikoL1 is TaikoL1 { livenessBond: 125e18, // 125 Taiko token stateRootSyncInternal: 16, maxAnchorHeightOffset: 64, - baseFeeConfig: TaikoData.BaseFeeConfig({ + baseFeeConfig: LibSharedData.BaseFeeConfig({ adjustmentQuotient: 8, sharingPctg: 75, gasIssuancePerSecond: 5_000_000, diff --git a/packages/protocol/contracts/L1/tiers/DevnetTierProvider.sol b/packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol similarity index 88% rename from packages/protocol/contracts/L1/tiers/DevnetTierProvider.sol rename to packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol index d32d65efea..0b84292663 100644 --- a/packages/protocol/contracts/L1/tiers/DevnetTierProvider.sol +++ b/packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "./TierProviderBase.sol"; -import "./ITierRouter.sol"; +import "../tiers/TierProviderBase.sol"; +import "../tiers/ITierRouter.sol"; /// @title DevnetTierProvider /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/hekla/HeklaTaikoL1.sol b/packages/protocol/contracts/layer1/hekla/HeklaTaikoL1.sol similarity index 90% rename from packages/protocol/contracts/hekla/HeklaTaikoL1.sol rename to packages/protocol/contracts/layer1/hekla/HeklaTaikoL1.sol index f8446ba981..162ca9e930 100644 --- a/packages/protocol/contracts/hekla/HeklaTaikoL1.sol +++ b/packages/protocol/contracts/layer1/hekla/HeklaTaikoL1.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1.sol"; +import "../based/TaikoL1.sol"; /// @title HeklaTaikoL1 /// @dev Labeled in AddressResolver as "taiko" @@ -20,7 +20,7 @@ contract HeklaTaikoL1 is TaikoL1 { livenessBond: 125e18, // 125 Taiko token stateRootSyncInternal: 16, maxAnchorHeightOffset: 64, - baseFeeConfig: TaikoData.BaseFeeConfig({ + baseFeeConfig: LibSharedData.BaseFeeConfig({ adjustmentQuotient: 8, sharingPctg: 75, gasIssuancePerSecond: 5_000_000, diff --git a/packages/protocol/contracts/hekla/HeklaTierProvider.sol b/packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol similarity index 93% rename from packages/protocol/contracts/hekla/HeklaTierProvider.sol rename to packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol index 336220889d..0876e367d5 100644 --- a/packages/protocol/contracts/hekla/HeklaTierProvider.sol +++ b/packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/tiers/TierProviderBase.sol"; -import "../L1/tiers/ITierRouter.sol"; +import "../tiers/TierProviderBase.sol"; +import "../tiers/ITierRouter.sol"; /// @title HeklaTierProvider /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/mainnet/README.md b/packages/protocol/contracts/layer1/mainnet/README.md similarity index 100% rename from packages/protocol/contracts/mainnet/README.md rename to packages/protocol/contracts/layer1/mainnet/README.md diff --git a/packages/protocol/contracts/mainnet/addrcache/AddressCache.sol b/packages/protocol/contracts/layer1/mainnet/addrcache/AddressCache.sol similarity index 98% rename from packages/protocol/contracts/mainnet/addrcache/AddressCache.sol rename to packages/protocol/contracts/layer1/mainnet/addrcache/AddressCache.sol index 7fad12dbee..6dfc98aae8 100644 --- a/packages/protocol/contracts/mainnet/addrcache/AddressCache.sol +++ b/packages/protocol/contracts/layer1/mainnet/addrcache/AddressCache.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title AddressCache /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/mainnet/addrcache/RollupAddressCache.sol b/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol similarity index 94% rename from packages/protocol/contracts/mainnet/addrcache/RollupAddressCache.sol rename to packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol index f6d62db597..ad0a567f6e 100644 --- a/packages/protocol/contracts/mainnet/addrcache/RollupAddressCache.sol +++ b/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; -import "../../libs/LibNetwork.sol"; +import "../../../shared/common/LibStrings.sol"; +import "../../../shared/common/LibNetwork.sol"; import "./AddressCache.sol"; /// @title RollupAddressCache diff --git a/packages/protocol/contracts/mainnet/addrcache/SharedAddressCache.sol b/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol similarity index 95% rename from packages/protocol/contracts/mainnet/addrcache/SharedAddressCache.sol rename to packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol index 33be40f918..57dd9f6e4b 100644 --- a/packages/protocol/contracts/mainnet/addrcache/SharedAddressCache.sol +++ b/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; -import "../../libs/LibNetwork.sol"; +import "../../../shared/common/LibStrings.sol"; +import "../../../shared/common/LibNetwork.sol"; import "./AddressCache.sol"; /// @title SharedAddressCache diff --git a/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetBridge.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetBridge.sol new file mode 100644 index 0000000000..f737e2903c --- /dev/null +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetBridge.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "../../../shared/bridge/Bridge.sol"; +import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; + +/// @title MainnetBridge +/// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko +/// mainnet to reduce gas cost. In theory, the contract can also be deplyed on Taiko L2 but this is +/// not well testee nor necessary. +/// @notice See the documentation in {Bridge}. +/// @custom:security-contact security@taiko.xyz +contract MainnetBridge is Bridge, SharedAddressCache { + /// @dev The slot in transient storage of the call context. This is the keccak256 hash + /// of "bridge.ctx_slot" + bytes32 private constant _CTX_SLOT = + 0xe4ece82196de19aabe639620d7f716c433d1348f96ce727c9989a982dbadc2b9; + + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { + return getAddress(_chainId, _name, super._getAddress); + } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } + + /// @inheritdoc Bridge + function _storeContext(bytes32 _msgHash, address _from, uint64 _srcChainId) internal override { + assembly { + tstore(_CTX_SLOT, _msgHash) + tstore(add(_CTX_SLOT, 1), _from) + tstore(add(_CTX_SLOT, 2), _srcChainId) + } + } + + /// @inheritdoc Bridge + function _loadContext() internal view override returns (Context memory) { + bytes32 msgHash; + address from; + uint64 srcChainId; + assembly { + msgHash := tload(_CTX_SLOT) + from := tload(add(_CTX_SLOT, 1)) + srcChainId := tload(add(_CTX_SLOT, 2)) + } + return Context(msgHash, from, srcChainId); + } +} diff --git a/packages/protocol/contracts/mainnet/shared/MainnetERC1155Vault.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC1155Vault.sol similarity index 63% rename from packages/protocol/contracts/mainnet/shared/MainnetERC1155Vault.sol rename to packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC1155Vault.sol index d96720844f..2fe0eec1e7 100644 --- a/packages/protocol/contracts/mainnet/shared/MainnetERC1155Vault.sol +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC1155Vault.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../tokenvault/ERC1155Vault.sol"; +import "../../../shared/tokenvault/ERC1155Vault.sol"; import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetERC1155Vault /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetERC1155Vault is ERC1155Vault, SharedAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/shared/MainnetERC20Vault.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol similarity index 63% rename from packages/protocol/contracts/mainnet/shared/MainnetERC20Vault.sol rename to packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol index 68a3e889e6..e968851771 100644 --- a/packages/protocol/contracts/mainnet/shared/MainnetERC20Vault.sol +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../tokenvault/ERC20Vault.sol"; +import "../../../shared/tokenvault/ERC20Vault.sol"; import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetERC20Vault /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetERC20Vault is ERC20Vault, SharedAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/shared/MainnetERC721Vault.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC721Vault.sol similarity index 63% rename from packages/protocol/contracts/mainnet/shared/MainnetERC721Vault.sol rename to packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC721Vault.sol index 9568de8a0f..416bc81319 100644 --- a/packages/protocol/contracts/mainnet/shared/MainnetERC721Vault.sol +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetERC721Vault.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../tokenvault/ERC721Vault.sol"; +import "../../../shared/tokenvault/ERC721Vault.sol"; import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetERC721Vault /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetERC721Vault is ERC721Vault, SharedAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/shared/MainnetSharedAddressManager.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSharedAddressManager.sol similarity index 57% rename from packages/protocol/contracts/mainnet/shared/MainnetSharedAddressManager.sol rename to packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSharedAddressManager.sol index 60e2d0dff6..a0d26ff9d8 100644 --- a/packages/protocol/contracts/mainnet/shared/MainnetSharedAddressManager.sol +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSharedAddressManager.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/AddressManager.sol"; -import "../../common/LibStrings.sol"; +import "../../../shared/common/AddressManager.sol"; +import "../../../shared/common/LibStrings.sol"; import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetSharedAddressManager /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetSharedAddressManager is AddressManager, SharedAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/shared/MainnetSignalService.sol b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSignalService.sol similarity index 63% rename from packages/protocol/contracts/mainnet/shared/MainnetSignalService.sol rename to packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSignalService.sol index c07f51d755..2d10595702 100644 --- a/packages/protocol/contracts/mainnet/shared/MainnetSignalService.sol +++ b/packages/protocol/contracts/layer1/mainnet/multirollup/MainnetSignalService.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../signal/SignalService.sol"; +import "../../../shared/signal/SignalService.sol"; import "../addrcache/SharedAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetSignalService /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetSignalService is SignalService, SharedAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/layer1/mainnet/reentrylock/LibFasterReentryLock.sol b/packages/protocol/contracts/layer1/mainnet/reentrylock/LibFasterReentryLock.sol new file mode 100644 index 0000000000..cfa3d7c066 --- /dev/null +++ b/packages/protocol/contracts/layer1/mainnet/reentrylock/LibFasterReentryLock.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @title LibFasterReentryLock +/// @custom:security-contact security@taiko.xyz +library LibFasterReentryLock { + /// @dev The slot in transient storage of the reentry lock. + /// This is the result of keccak256("ownerUUPS.reentry_slot") plus 1. The addition aims to + /// prevent hash collisions with slots defined in EIP-1967, where slots are derived by + /// keccak256("something") - 1, and with slots in SignalService, calculated directly with + /// keccak256("something"). + bytes32 private constant _REENTRY_SLOT = + 0xa5054f728453d3dbe953bdc43e4d0cb97e662ea32d7958190f3dc2da31d9721b; + + function storeReentryLock(uint8 _reentry) internal { + assembly { + tstore(_REENTRY_SLOT, _reentry) + } + } + + function loadReentryLock() internal view returns (uint8 reentry_) { + assembly { + reentry_ := tload(_REENTRY_SLOT) + } + } +} diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetGuardianProver.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol similarity index 59% rename from packages/protocol/contracts/mainnet/rollup/MainnetGuardianProver.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol index c017e09280..0fa50684a8 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetGuardianProver.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol @@ -1,16 +1,25 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../L1/provers/GuardianProver.sol"; +import "../../../layer1/provers/GuardianProver.sol"; import "../addrcache/RollupAddressCache.sol"; - +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetGuardianProver /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko /// mainnet to reduce gas cost. /// @notice See the documentation in {GuardianProver}. /// @custom:security-contact security@taiko.xyz + contract MainnetGuardianProver is GuardianProver, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetProverSet.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetProverSet.sol similarity index 63% rename from packages/protocol/contracts/mainnet/rollup/MainnetProverSet.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/MainnetProverSet.sol index 51a7cb35f0..b6c06184c0 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetProverSet.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetProverSet.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../team/proving/ProverSet.sol"; +import "../../provers/ProverSet.sol"; import "../addrcache/RollupAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetProverSet /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetProverSet is ProverSet, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetRollupAddressManager.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetRollupAddressManager.sol similarity index 57% rename from packages/protocol/contracts/mainnet/rollup/MainnetRollupAddressManager.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/MainnetRollupAddressManager.sol index 7d193a61c3..1a09738d14 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetRollupAddressManager.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetRollupAddressManager.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/AddressManager.sol"; -import "../../common/LibStrings.sol"; +import "../../../shared/common/AddressManager.sol"; +import "../../../shared/common/LibStrings.sol"; import "../addrcache/RollupAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetRollupAddressManager /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,4 +15,12 @@ contract MainnetRollupAddressManager is AddressManager, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetTaikoL1.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol similarity index 82% rename from packages/protocol/contracts/mainnet/rollup/MainnetTaikoL1.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol index 4ab964d883..02eade089d 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetTaikoL1.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../L1/TaikoL1.sol"; +import "../../based/TaikoL1.sol"; import "../addrcache/RollupAddressCache.sol"; +import "../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetTaikoL1 /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -30,7 +31,7 @@ contract MainnetTaikoL1 is TaikoL1, RollupAddressCache { livenessBond: 125e18, // 125 Taiko token stateRootSyncInternal: 16, maxAnchorHeightOffset: 64, - baseFeeConfig: TaikoData.BaseFeeConfig({ + baseFeeConfig: LibSharedData.BaseFeeConfig({ adjustmentQuotient: 8, sharingPctg: 75, gasIssuancePerSecond: 5_000_000, @@ -44,4 +45,12 @@ contract MainnetTaikoL1 is TaikoL1, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetTierRouter.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol similarity index 85% rename from packages/protocol/contracts/mainnet/rollup/MainnetTierRouter.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol index 89365dfb60..f5ec759520 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetTierRouter.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../L1/tiers/ITierRouter.sol"; +import "../../tiers/ITierRouter.sol"; /// @title MainnetTierRouter /// @dev Labeled in AddressResolver as "tier_router" diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol similarity index 65% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol index 5a758ef0e8..480e691214 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/Risc0Verifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetRisc0Verifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,7 +15,11 @@ contract MainnetRisc0Verifier is Risc0Verifier, RollupAddressCache { return getAddress(_chainId, _name, super._getAddress); } - function taikoChainId() internal pure override returns (uint64) { - return LibNetwork.TAIKO_MAINNET; + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); } } diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSP1Verifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSP1Verifier.sol similarity index 68% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSP1Verifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSP1Verifier.sol index 7e32731949..e9cc9230a1 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSP1Verifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSP1Verifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/SP1Verifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetSP1Verifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,6 +15,14 @@ contract MainnetSP1Verifier is SP1Verifier, RollupAddressCache { return getAddress(_chainId, _name, super._getAddress); } + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } + function taikoChainId() internal pure override returns (uint64) { return LibNetwork.TAIKO_MAINNET; } diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSgxVerifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol similarity index 65% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSgxVerifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol index 1fd01b8939..c4583e58c9 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetSgxVerifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/SgxVerifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetSgxVerifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -14,7 +15,11 @@ contract MainnetSgxVerifier is SgxVerifier, RollupAddressCache { return getAddress(_chainId, _name, super._getAddress); } - function taikoChainId() internal pure override returns (uint64) { - return LibNetwork.TAIKO_MAINNET; + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); } } diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol similarity index 63% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol index 3f558d1260..28599c0a5d 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/compose/TeeAnyVerifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetTeeAnyVerifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -12,4 +13,12 @@ contract MainnetTeeAnyVerifier is TeeAnyVerifier, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol similarity index 63% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol index 5155cf0851..67e58d8af1 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/compose/ZkAndTeeVerifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetZkAndTeeVerifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -12,4 +13,12 @@ contract MainnetZkAndTeeVerifier is ZkAndTeeVerifier, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol similarity index 62% rename from packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol rename to packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol index 97f19faa7b..8ac59cd037 100644 --- a/packages/protocol/contracts/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../../../verifiers/compose/ZkAnyVerifier.sol"; import "../../addrcache/RollupAddressCache.sol"; +import "../../reentrylock/LibFasterReentryLock.sol"; /// @title MainnetZkAnyVerifier /// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko @@ -12,4 +13,12 @@ contract MainnetZkAnyVerifier is ZkAnyVerifier, RollupAddressCache { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { return getAddress(_chainId, _name, super._getAddress); } + + function _storeReentryLock(uint8 _reentry) internal override { + LibFasterReentryLock.storeReentryLock(_reentry); + } + + function _loadReentryLock() internal view override returns (uint8) { + return LibFasterReentryLock.loadReentryLock(); + } } diff --git a/packages/protocol/contracts/L1/provers/GuardianProver.sol b/packages/protocol/contracts/layer1/provers/GuardianProver.sol similarity index 98% rename from packages/protocol/contracts/L1/provers/GuardianProver.sol rename to packages/protocol/contracts/layer1/provers/GuardianProver.sol index 747be2f498..aa21dd9b29 100644 --- a/packages/protocol/contracts/L1/provers/GuardianProver.sol +++ b/packages/protocol/contracts/layer1/provers/GuardianProver.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "../../common/EssentialContract.sol"; -import "../../common/LibStrings.sol"; -import "../../verifiers/IVerifier.sol"; -import "../ITaikoL1.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; +import "../verifiers/IVerifier.sol"; +import "../based/ITaikoL1.sol"; /// @title GuardianProver /// This prover uses itself as the verifier. diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/layer1/provers/ProverSet.sol similarity index 96% rename from packages/protocol/contracts/team/proving/ProverSet.sol rename to packages/protocol/contracts/layer1/provers/ProverSet.sol index 3806895007..7c64203759 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/layer1/provers/ProverSet.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; import "@openzeppelin/contracts/interfaces/IERC1271.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "../../common/EssentialContract.sol"; -import "../../common/LibStrings.sol"; -import "../../libs/LibAddress.sol"; -import "../../L1/ITaikoL1.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; +import "../../shared/common/LibAddress.sol"; +import "../based/ITaikoL1.sol"; interface IHasRecipient { function recipient() external view returns (address); diff --git a/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol b/packages/protocol/contracts/layer1/team/airdrop/ERC20Airdrop.sol similarity index 98% rename from packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol rename to packages/protocol/contracts/layer1/team/airdrop/ERC20Airdrop.sol index 9867f98330..469a0618e5 100644 --- a/packages/protocol/contracts/team/airdrop/ERC20Airdrop.sol +++ b/packages/protocol/contracts/layer1/team/airdrop/ERC20Airdrop.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/packages/protocol/contracts/team/airdrop/MerkleClaimable.sol b/packages/protocol/contracts/layer1/team/airdrop/MerkleClaimable.sol similarity index 97% rename from packages/protocol/contracts/team/airdrop/MerkleClaimable.sol rename to packages/protocol/contracts/layer1/team/airdrop/MerkleClaimable.sol index 63fe1f9a3d..f3c945446a 100644 --- a/packages/protocol/contracts/team/airdrop/MerkleClaimable.sol +++ b/packages/protocol/contracts/layer1/team/airdrop/MerkleClaimable.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; -import "../../common/EssentialContract.sol"; +import "../../../shared/common/EssentialContract.sol"; /// @title MerkleClaimable /// @notice Contract for managing Taiko token airdrop for eligible users diff --git a/packages/protocol/contracts/team/tokenunlock/TokenUnlock.sol b/packages/protocol/contracts/layer1/team/tokenunlock/TokenUnlock.sol similarity index 97% rename from packages/protocol/contracts/team/tokenunlock/TokenUnlock.sol rename to packages/protocol/contracts/layer1/team/tokenunlock/TokenUnlock.sol index f7f764049d..8b1250d49a 100644 --- a/packages/protocol/contracts/team/tokenunlock/TokenUnlock.sol +++ b/packages/protocol/contracts/layer1/team/tokenunlock/TokenUnlock.sol @@ -1,15 +1,15 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol"; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "../../common/EssentialContract.sol"; -import "../../common/LibStrings.sol"; -import "../../libs/LibMath.sol"; -import "../proving/ProverSet.sol"; +import "../../../shared/common/EssentialContract.sol"; +import "../../../shared/common/LibStrings.sol"; +import "../../../shared/common/LibMath.sol"; +import "../../provers/ProverSet.sol"; /// @title TokenUnlock /// @notice Manages the linear unlocking of Taiko tokens over a four-year period. diff --git a/packages/protocol/contracts/L1/tiers/ITierProvider.sol b/packages/protocol/contracts/layer1/tiers/ITierProvider.sol similarity index 98% rename from packages/protocol/contracts/L1/tiers/ITierProvider.sol rename to packages/protocol/contracts/layer1/tiers/ITierProvider.sol index a49976e24c..1e74dbcf25 100644 --- a/packages/protocol/contracts/L1/tiers/ITierProvider.sol +++ b/packages/protocol/contracts/layer1/tiers/ITierProvider.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title ITierProvider /// @notice Defines interface to return tier configuration. diff --git a/packages/protocol/contracts/L1/tiers/ITierRouter.sol b/packages/protocol/contracts/layer1/tiers/ITierRouter.sol similarity index 94% rename from packages/protocol/contracts/L1/tiers/ITierRouter.sol rename to packages/protocol/contracts/layer1/tiers/ITierRouter.sol index 409e45f126..3b8863a021 100644 --- a/packages/protocol/contracts/L1/tiers/ITierRouter.sol +++ b/packages/protocol/contracts/layer1/tiers/ITierRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title ITierRouter /// @notice Defines interface to return an ITierProvider diff --git a/packages/protocol/contracts/L1/tiers/LibTiers.sol b/packages/protocol/contracts/layer1/tiers/LibTiers.sol similarity index 97% rename from packages/protocol/contracts/L1/tiers/LibTiers.sol rename to packages/protocol/contracts/layer1/tiers/LibTiers.sol index fc46e37765..fd70d7eaf0 100644 --- a/packages/protocol/contracts/L1/tiers/LibTiers.sol +++ b/packages/protocol/contracts/layer1/tiers/LibTiers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibTiers /// @dev Tier ID cannot be zero and must be unique. diff --git a/packages/protocol/contracts/L1/tiers/TierProviderBase.sol b/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol similarity index 98% rename from packages/protocol/contracts/L1/tiers/TierProviderBase.sol rename to packages/protocol/contracts/layer1/tiers/TierProviderBase.sol index 95d9c207a1..c6d4f6baa3 100644 --- a/packages/protocol/contracts/L1/tiers/TierProviderBase.sol +++ b/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; +import "../../shared/common/LibStrings.sol"; import "./ITierProvider.sol"; import "./LibTiers.sol"; diff --git a/packages/protocol/contracts/L1/tiers/TierProviderV2.sol b/packages/protocol/contracts/layer1/tiers/TierProviderV2.sol similarity index 96% rename from packages/protocol/contracts/L1/tiers/TierProviderV2.sol rename to packages/protocol/contracts/layer1/tiers/TierProviderV2.sol index 9bb113f1c5..69f1541bf1 100644 --- a/packages/protocol/contracts/L1/tiers/TierProviderV2.sol +++ b/packages/protocol/contracts/layer1/tiers/TierProviderV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TierProviderBase.sol"; diff --git a/packages/protocol/contracts/tko/TaikoToken.sol b/packages/protocol/contracts/layer1/token/TaikoToken.sol similarity index 96% rename from packages/protocol/contracts/tko/TaikoToken.sol rename to packages/protocol/contracts/layer1/token/TaikoToken.sol index 27b1cb9753..3804f7714d 100644 --- a/packages/protocol/contracts/tko/TaikoToken.sol +++ b/packages/protocol/contracts/layer1/token/TaikoToken.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "./TaikoTokenBase.sol"; +import "../../shared/token/TaikoTokenBase.sol"; /// @title TaikoToken /// @notice The TaikoToken (TKO), in the protocol is used for prover collateral diff --git a/packages/protocol/contracts/verifiers/IVerifier.sol b/packages/protocol/contracts/layer1/verifiers/IVerifier.sol similarity index 95% rename from packages/protocol/contracts/verifiers/IVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/IVerifier.sol index c16b42b46c..ae9e91cbfe 100644 --- a/packages/protocol/contracts/verifiers/IVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/IVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoData.sol"; +import "../based/TaikoData.sol"; /// @title IVerifier /// @notice Defines the function that handles proof verification. diff --git a/packages/protocol/contracts/verifiers/libs/LibPublicInput.sol b/packages/protocol/contracts/layer1/verifiers/LibPublicInput.sol similarity index 94% rename from packages/protocol/contracts/verifiers/libs/LibPublicInput.sol rename to packages/protocol/contracts/layer1/verifiers/LibPublicInput.sol index ae1c1e638f..d85205fd53 100644 --- a/packages/protocol/contracts/verifiers/libs/LibPublicInput.sol +++ b/packages/protocol/contracts/layer1/verifiers/LibPublicInput.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../L1/TaikoData.sol"; +import "../../layer1/based/TaikoData.sol"; /// @title LibPublicInput /// @notice A library for handling hashing the so-called public input hash, used by sgx and zk diff --git a/packages/protocol/contracts/verifiers/Risc0Verifier.sol b/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol similarity index 94% rename from packages/protocol/contracts/verifiers/Risc0Verifier.sol rename to packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol index 661a8fcc08..dcbac25823 100644 --- a/packages/protocol/contracts/verifiers/Risc0Verifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@risc0/contracts/IRiscZeroVerifier.sol"; -import "../common/EssentialContract.sol"; -import "../common/LibStrings.sol"; -import "../L1/ITaikoL1.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; +import "../based/ITaikoL1.sol"; +import "./LibPublicInput.sol"; import "./IVerifier.sol"; -import "./libs/LibPublicInput.sol"; /// @title Risc0Verifier /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/verifiers/SP1Verifier.sol b/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol similarity index 94% rename from packages/protocol/contracts/verifiers/SP1Verifier.sol rename to packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol index 03ee335feb..8fe4e3ec71 100644 --- a/packages/protocol/contracts/verifiers/SP1Verifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@sp1-contracts/src/ISP1Verifier.sol"; -import "../common/EssentialContract.sol"; -import "../common/LibStrings.sol"; -import "../L1/ITaikoL1.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; +import "../based/ITaikoL1.sol"; +import "./LibPublicInput.sol"; import "./IVerifier.sol"; -import "./libs/LibPublicInput.sol"; /// @title SP1Verifier /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/verifiers/SgxVerifier.sol b/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol similarity index 97% rename from packages/protocol/contracts/verifiers/SgxVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol index bc2e5ea2ba..4a562d94b8 100644 --- a/packages/protocol/contracts/verifiers/SgxVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol @@ -1,13 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "../L1/ITaikoL1.sol"; -import "../common/EssentialContract.sol"; -import "../common/LibStrings.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; import "../automata-attestation/interfaces/IAttestation.sol"; import "../automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; -import "./libs/LibPublicInput.sol"; +import "../based/ITaikoL1.sol"; +import "../based/TaikoData.sol"; +import "./LibPublicInput.sol"; import "./IVerifier.sol"; /// @title SgxVerifier diff --git a/packages/protocol/contracts/verifiers/compose/ComposeVerifier.sol b/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol similarity index 97% rename from packages/protocol/contracts/verifiers/compose/ComposeVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol index b3f9a2ac92..d9d59786a5 100644 --- a/packages/protocol/contracts/verifiers/compose/ComposeVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/EssentialContract.sol"; -import "../../common/LibStrings.sol"; +import "../../../shared/common/EssentialContract.sol"; +import "../../../shared/common/LibStrings.sol"; import "../IVerifier.sol"; /// @title ComposeVerifier diff --git a/packages/protocol/contracts/verifiers/compose/TeeAnyVerifier.sol b/packages/protocol/contracts/layer1/verifiers/compose/TeeAnyVerifier.sol similarity index 92% rename from packages/protocol/contracts/verifiers/compose/TeeAnyVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/compose/TeeAnyVerifier.sol index a77c867484..97eaac7e29 100644 --- a/packages/protocol/contracts/verifiers/compose/TeeAnyVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/compose/TeeAnyVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; +import "../../../shared/common/LibStrings.sol"; import "./ComposeVerifier.sol"; /// @title TeeAnyVerifier diff --git a/packages/protocol/contracts/verifiers/compose/ZkAndTeeVerifier.sol b/packages/protocol/contracts/layer1/verifiers/compose/ZkAndTeeVerifier.sol similarity index 89% rename from packages/protocol/contracts/verifiers/compose/ZkAndTeeVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/compose/ZkAndTeeVerifier.sol index 575a177552..51a22785e3 100644 --- a/packages/protocol/contracts/verifiers/compose/ZkAndTeeVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/compose/ZkAndTeeVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; +import "../../../shared/common/LibStrings.sol"; import "./ComposeVerifier.sol"; /// @title ZkAndTeeVerifier diff --git a/packages/protocol/contracts/verifiers/compose/ZkAnyVerifier.sol b/packages/protocol/contracts/layer1/verifiers/compose/ZkAnyVerifier.sol similarity index 92% rename from packages/protocol/contracts/verifiers/compose/ZkAnyVerifier.sol rename to packages/protocol/contracts/layer1/verifiers/compose/ZkAnyVerifier.sol index 25f20612cd..261e4d2c2e 100644 --- a/packages/protocol/contracts/verifiers/compose/ZkAnyVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/compose/ZkAnyVerifier.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../common/LibStrings.sol"; +import "../../../shared/common/LibStrings.sol"; import "./ComposeVerifier.sol"; /// @title ZkAnyVerifier diff --git a/packages/protocol/contracts/L2/DelegateOwner.sol b/packages/protocol/contracts/layer2/DelegateOwner.sol similarity index 95% rename from packages/protocol/contracts/L2/DelegateOwner.sol rename to packages/protocol/contracts/layer2/DelegateOwner.sol index 745589f036..182e24d533 100644 --- a/packages/protocol/contracts/L2/DelegateOwner.sol +++ b/packages/protocol/contracts/layer2/DelegateOwner.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../common/EssentialContract.sol"; -import "../common/LibStrings.sol"; -import "../libs/LibAddress.sol"; -import "../libs/LibBytes.sol"; -import "../bridge/IBridge.sol"; +import "../shared/common/EssentialContract.sol"; +import "../shared/common/LibStrings.sol"; +import "../shared/common/LibAddress.sol"; +import "../shared/common/LibBytes.sol"; +import "../shared/bridge/IBridge.sol"; /// @title DelegateOwner /// @notice This contract will be the owner of all essential contracts deployed on the L2 chain. diff --git a/packages/protocol/contracts/L2/IBlockHash.sol b/packages/protocol/contracts/layer2/based/IBlockHash.sol similarity index 94% rename from packages/protocol/contracts/L2/IBlockHash.sol rename to packages/protocol/contracts/layer2/based/IBlockHash.sol index c1979a2900..21f5745203 100644 --- a/packages/protocol/contracts/L2/IBlockHash.sol +++ b/packages/protocol/contracts/layer2/based/IBlockHash.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IBlockHash /// @notice Interface for retrieving block hashes. diff --git a/packages/protocol/contracts/L2/Lib1559Math.sol b/packages/protocol/contracts/layer2/based/Lib1559Math.sol similarity index 98% rename from packages/protocol/contracts/L2/Lib1559Math.sol rename to packages/protocol/contracts/layer2/based/Lib1559Math.sol index 533a3cdd18..c0e0116b1e 100644 --- a/packages/protocol/contracts/L2/Lib1559Math.sol +++ b/packages/protocol/contracts/layer2/based/Lib1559Math.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@solady/src/utils/FixedPointMathLib.sol"; -import "../libs/LibMath.sol"; +import "../../shared/common/LibMath.sol"; /// @title Lib1559Math /// @notice Implements e^(x) based bonding curve for EIP-1559 diff --git a/packages/protocol/contracts/L2/LibL2Config.sol b/packages/protocol/contracts/layer2/based/LibL2Config.sol similarity index 96% rename from packages/protocol/contracts/L2/LibL2Config.sol rename to packages/protocol/contracts/layer2/based/LibL2Config.sol index 3278656b1e..e4ad74e2cc 100644 --- a/packages/protocol/contracts/L2/LibL2Config.sol +++ b/packages/protocol/contracts/layer2/based/LibL2Config.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibL2Config library LibL2Config { diff --git a/packages/protocol/contracts/L2/TaikoL2.sol b/packages/protocol/contracts/layer2/based/TaikoL2.sol similarity index 97% rename from packages/protocol/contracts/L2/TaikoL2.sol rename to packages/protocol/contracts/layer2/based/TaikoL2.sol index dd8d33741e..8740b50a1b 100644 --- a/packages/protocol/contracts/L2/TaikoL2.sol +++ b/packages/protocol/contracts/layer2/based/TaikoL2.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import { TaikoData } from "../L1/TaikoData.sol"; -import "../common/EssentialContract.sol"; -import "../common/LibStrings.sol"; -import "../libs/LibAddress.sol"; -import "../signal/ISignalService.sol"; +import "../../shared/data/LibSharedData.sol"; +import "../../shared/common/EssentialContract.sol"; +import "../../shared/common/LibStrings.sol"; +import "../../shared/common/LibAddress.sol"; +import "../../shared/signal/ISignalService.sol"; import "./Lib1559Math.sol"; import "./LibL2Config.sol"; import "./IBlockHash.sol"; @@ -164,7 +164,7 @@ contract TaikoL2 is EssentialContract, IBlockHash { uint64 _anchorBlockId, bytes32 _anchorStateRoot, uint32 _parentGasUsed, - TaikoData.BaseFeeConfig calldata _baseFeeConfig + LibSharedData.BaseFeeConfig calldata _baseFeeConfig ) external nonZeroValue(uint256(_anchorStateRoot)) @@ -326,7 +326,7 @@ contract TaikoL2 is EssentialContract, IBlockHash { /// @return basefee_ Next block's base fee. /// @return parentGasExcess_ The new gas excess value. function calculateBaseFee( - TaikoData.BaseFeeConfig calldata _baseFeeConfig, + LibSharedData.BaseFeeConfig calldata _baseFeeConfig, uint64 _blocktime, uint64 _parentGasExcess, uint32 _parentGasUsed diff --git a/packages/protocol/contracts/devnet/DevnetTaikoL2.sol b/packages/protocol/contracts/layer2/devnet/DevnetTaikoL2.sol similarity index 81% rename from packages/protocol/contracts/devnet/DevnetTaikoL2.sol rename to packages/protocol/contracts/layer2/devnet/DevnetTaikoL2.sol index 78c721d3eb..bf3328a15c 100644 --- a/packages/protocol/contracts/devnet/DevnetTaikoL2.sol +++ b/packages/protocol/contracts/layer2/devnet/DevnetTaikoL2.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L2/TaikoL2.sol"; +import "../based/TaikoL2.sol"; /// @title DevnetTaikoL2 /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/hekla/HeklaTaikoL2.sol b/packages/protocol/contracts/layer2/hekla/HeklaTaikoL2.sol similarity index 81% rename from packages/protocol/contracts/hekla/HeklaTaikoL2.sol rename to packages/protocol/contracts/layer2/hekla/HeklaTaikoL2.sol index bb1772d69a..f1af6519eb 100644 --- a/packages/protocol/contracts/hekla/HeklaTaikoL2.sol +++ b/packages/protocol/contracts/layer2/hekla/HeklaTaikoL2.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L2/TaikoL2.sol"; +import "../based/TaikoL2.sol"; /// @title HeklaTaikoL2 /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/mainnet/rollup/MainnetTaikoL2.sol b/packages/protocol/contracts/layer2/mainnet/MainnetTaikoL2.sol similarity index 82% rename from packages/protocol/contracts/mainnet/rollup/MainnetTaikoL2.sol rename to packages/protocol/contracts/layer2/mainnet/MainnetTaikoL2.sol index 0d19dbeb5f..f7769413cb 100644 --- a/packages/protocol/contracts/mainnet/rollup/MainnetTaikoL2.sol +++ b/packages/protocol/contracts/layer2/mainnet/MainnetTaikoL2.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../L2/TaikoL2.sol"; +import "../based/TaikoL2.sol"; /// @title MainnetTaikoL2 /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/tko/BridgedTaikoToken.sol b/packages/protocol/contracts/layer2/token/BridgedTaikoToken.sol similarity index 93% rename from packages/protocol/contracts/tko/BridgedTaikoToken.sol rename to packages/protocol/contracts/layer2/token/BridgedTaikoToken.sol index ceea652e32..e900bbdb15 100644 --- a/packages/protocol/contracts/tko/BridgedTaikoToken.sol +++ b/packages/protocol/contracts/layer2/token/BridgedTaikoToken.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../tokenvault/IBridgedERC20.sol"; -import "./TaikoTokenBase.sol"; +import "../../shared/tokenvault/IBridgedERC20.sol"; +import "../../shared/token/TaikoTokenBase.sol"; /// @title BridgedTaikoToken /// @notice The TaikoToken on L2 to support checkpoints and voting. For testnets, we do not need to diff --git a/packages/protocol/contracts/mainnet/shared/MainnetBridge.sol b/packages/protocol/contracts/mainnet/shared/MainnetBridge.sol deleted file mode 100644 index 651c6a85d4..0000000000 --- a/packages/protocol/contracts/mainnet/shared/MainnetBridge.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "../../bridge/Bridge.sol"; -import "../addrcache/SharedAddressCache.sol"; - -/// @title MainnetBridge -/// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko -/// mainnet to reduce gas cost. In theory, the contract can also be deplyed on Taiko L2 but this is -/// not well testee nor necessary. -/// @notice See the documentation in {Bridge}. -/// @custom:security-contact security@taiko.xyz -contract MainnetBridge is Bridge, SharedAddressCache { - function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - return getAddress(_chainId, _name, super._getAddress); - } -} diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/shared/bridge/Bridge.sol similarity index 94% rename from packages/protocol/contracts/bridge/Bridge.sol rename to packages/protocol/contracts/shared/bridge/Bridge.sol index 7971b696d8..3e67bad5cb 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/shared/bridge/Bridge.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; import "../common/EssentialContract.sol"; import "../common/LibStrings.sol"; -import "../libs/LibAddress.sol"; -import "../libs/LibMath.sol"; +import "../common/LibAddress.sol"; +import "../common/LibMath.sol"; +import "../common/LibNetwork.sol"; import "../signal/ISignalService.sol"; import "./IBridge.sol"; import "./IQuotaManager.sol"; @@ -46,11 +47,6 @@ contract Bridge is EssentialContract, IBridge { /// @dev The amount of gas not to charge fee per cache operation. uint256 private constant _GAS_REFUND_PER_CACHE_OPERATION = 20_000; - /// @dev The slot in transient storage of the call context. This is the keccak256 hash - /// of "bridge.ctx_slot" - bytes32 private constant _CTX_SLOT = - 0xe4ece82196de19aabe639620d7f716c433d1348f96ce727c9989a982dbadc2b9; - /// @dev Gas limit for sending Ether. // - EOA gas used is < 21000 // - For Loopring smart wallet, gas used is about 23000 @@ -203,7 +199,9 @@ contract Bridge is EssentialContract, IBridge { ); // Must reset the context after the message call - _resetContext(); + _storeContext( + bytes32(_PLACEHOLDER), address(uint160(_PLACEHOLDER)), uint64(_PLACEHOLDER) + ); } else { _message.srcOwner.sendEtherAndVerify(_message.value, _SEND_ETHER_GAS_LIMIT); } @@ -515,7 +513,7 @@ contract Bridge is EssentialContract, IBridge { if (_shouldCheckForwardedGas) { _checkForwardedGas(gasLeft, _gasLimit); } - _resetContext(); + _storeContext(bytes32(_PLACEHOLDER), address(uint160(_PLACEHOLDER)), uint64(_PLACEHOLDER)); } /// @notice Updates the status of a bridge message. @@ -529,31 +527,12 @@ contract Bridge is EssentialContract, IBridge { emit MessageStatusChanged(_msgHash, _status); } - /// @notice Resets the call context - function _resetContext() private { - if (LibNetwork.isDencunSupported(block.chainid)) { - _storeContext(bytes32(0), address(0), uint64(0)); - } else { - _storeContext( - bytes32(_PLACEHOLDER), address(uint160(_PLACEHOLDER)), uint64(_PLACEHOLDER) - ); - } - } - /// @notice Stores the call context /// @param _msgHash The message hash. /// @param _from The sender's address. /// @param _srcChainId The source chain ID. - function _storeContext(bytes32 _msgHash, address _from, uint64 _srcChainId) private { - if (LibNetwork.isDencunSupported(block.chainid)) { - assembly { - tstore(_CTX_SLOT, _msgHash) - tstore(add(_CTX_SLOT, 1), _from) - tstore(add(_CTX_SLOT, 2), _srcChainId) - } - } else { - __ctx = Context(_msgHash, _from, _srcChainId); - } + function _storeContext(bytes32 _msgHash, address _from, uint64 _srcChainId) internal virtual { + __ctx = Context(_msgHash, _from, _srcChainId); } /// @notice Checks if the signal was received and caches cross-chain data if requested. @@ -597,20 +576,8 @@ contract Bridge is EssentialContract, IBridge { /// @notice Loads and returns the call context. /// @return ctx_ The call context. - function _loadContext() private view returns (Context memory) { - if (LibNetwork.isDencunSupported(block.chainid)) { - bytes32 msgHash; - address from; - uint64 srcChainId; - assembly { - msgHash := tload(_CTX_SLOT) - from := tload(add(_CTX_SLOT, 1)) - srcChainId := tload(add(_CTX_SLOT, 2)) - } - return Context(msgHash, from, srcChainId); - } else { - return __ctx; - } + function _loadContext() internal view virtual returns (Context memory) { + return __ctx; } /// @notice Checks if the signal was received. diff --git a/packages/protocol/contracts/bridge/IBridge.sol b/packages/protocol/contracts/shared/bridge/IBridge.sol similarity index 99% rename from packages/protocol/contracts/bridge/IBridge.sol rename to packages/protocol/contracts/shared/bridge/IBridge.sol index 598ff3bc73..23e6eecee0 100644 --- a/packages/protocol/contracts/bridge/IBridge.sol +++ b/packages/protocol/contracts/shared/bridge/IBridge.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IBridge /// @notice The bridge used in conjunction with the {ISignalService}. diff --git a/packages/protocol/contracts/bridge/IQuotaManager.sol b/packages/protocol/contracts/shared/bridge/IQuotaManager.sol similarity index 97% rename from packages/protocol/contracts/bridge/IQuotaManager.sol rename to packages/protocol/contracts/shared/bridge/IQuotaManager.sol index b2c296e8b1..02b28292e7 100644 --- a/packages/protocol/contracts/bridge/IQuotaManager.sol +++ b/packages/protocol/contracts/shared/bridge/IQuotaManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IQuotaManager /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/bridge/QuotaManager.sol b/packages/protocol/contracts/shared/bridge/QuotaManager.sol similarity index 98% rename from packages/protocol/contracts/bridge/QuotaManager.sol rename to packages/protocol/contracts/shared/bridge/QuotaManager.sol index 2cb1fe40d0..293eeb7ca8 100644 --- a/packages/protocol/contracts/bridge/QuotaManager.sol +++ b/packages/protocol/contracts/shared/bridge/QuotaManager.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../common/EssentialContract.sol"; import "../common/LibStrings.sol"; -import "../libs/LibMath.sol"; +import "../common/LibMath.sol"; import "./IQuotaManager.sol"; /// @title QuotaManager diff --git a/packages/protocol/contracts/bridge/README.md b/packages/protocol/contracts/shared/bridge/README.md similarity index 100% rename from packages/protocol/contracts/bridge/README.md rename to packages/protocol/contracts/shared/bridge/README.md diff --git a/packages/protocol/contracts/common/AddressManager.sol b/packages/protocol/contracts/shared/common/AddressManager.sol similarity index 98% rename from packages/protocol/contracts/common/AddressManager.sol rename to packages/protocol/contracts/shared/common/AddressManager.sol index d5b0e5c687..ad064952fe 100644 --- a/packages/protocol/contracts/common/AddressManager.sol +++ b/packages/protocol/contracts/shared/common/AddressManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./EssentialContract.sol"; diff --git a/packages/protocol/contracts/common/AddressResolver.sol b/packages/protocol/contracts/shared/common/AddressResolver.sol similarity index 99% rename from packages/protocol/contracts/common/AddressResolver.sol rename to packages/protocol/contracts/shared/common/AddressResolver.sol index d1b17161a7..d00705f925 100644 --- a/packages/protocol/contracts/common/AddressResolver.sol +++ b/packages/protocol/contracts/shared/common/AddressResolver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./IAddressManager.sol"; diff --git a/packages/protocol/contracts/common/EssentialContract.sol b/packages/protocol/contracts/shared/common/EssentialContract.sol similarity index 82% rename from packages/protocol/contracts/common/EssentialContract.sol rename to packages/protocol/contracts/shared/common/EssentialContract.sol index a23723a8bc..777ce8809f 100644 --- a/packages/protocol/contracts/common/EssentialContract.sol +++ b/packages/protocol/contracts/shared/common/EssentialContract.sol @@ -1,26 +1,16 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; import "./AddressResolver.sol"; -import "../libs/LibNetwork.sol"; /// @title EssentialContract /// @custom:security-contact security@taiko.xyz abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable, AddressResolver { uint8 private constant _FALSE = 1; - uint8 private constant _TRUE = 2; - /// @dev The slot in transient storage of the reentry lock. - /// This is the result of keccak256("ownerUUPS.reentry_slot") plus 1. The addition aims to - /// prevent hash collisions with slots defined in EIP-1967, where slots are derived by - /// keccak256("something") - 1, and with slots in SignalService, calculated directly with - /// keccak256("something"). - bytes32 private constant _REENTRY_SLOT = - 0xa5054f728453d3dbe953bdc43e4d0cb97e662ea32d7958190f3dc2da31d9721b; - /// @dev Slot 1. uint8 private __reentry; uint8 private __paused; @@ -153,23 +143,11 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable, // Stores the reentry lock function _storeReentryLock(uint8 _reentry) internal virtual { - if (LibNetwork.isDencunSupported(block.chainid)) { - assembly { - tstore(_REENTRY_SLOT, _reentry) - } - } else { - __reentry = _reentry; - } + __reentry = _reentry; } // Loads the reentry lock function _loadReentryLock() internal view virtual returns (uint8 reentry_) { - if (LibNetwork.isDencunSupported(block.chainid)) { - assembly { - reentry_ := tload(_REENTRY_SLOT) - } - } else { - reentry_ = __reentry; - } + reentry_ = __reentry; } } diff --git a/packages/protocol/contracts/common/IAddressManager.sol b/packages/protocol/contracts/shared/common/IAddressManager.sol similarity index 96% rename from packages/protocol/contracts/common/IAddressManager.sol rename to packages/protocol/contracts/shared/common/IAddressManager.sol index 35da9ff77d..46ee147815 100644 --- a/packages/protocol/contracts/common/IAddressManager.sol +++ b/packages/protocol/contracts/shared/common/IAddressManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IAddressManager /// @notice Manages a mapping of (chainId, name) pairs to Ethereum addresses. diff --git a/packages/protocol/contracts/common/IAddressResolver.sol b/packages/protocol/contracts/shared/common/IAddressResolver.sol similarity index 98% rename from packages/protocol/contracts/common/IAddressResolver.sol rename to packages/protocol/contracts/shared/common/IAddressResolver.sol index 237dd500ca..efeae4a73d 100644 --- a/packages/protocol/contracts/common/IAddressResolver.sol +++ b/packages/protocol/contracts/shared/common/IAddressResolver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IAddressResolver /// @notice This contract acts as a bridge for name-to-address resolution. diff --git a/packages/protocol/contracts/libs/LibAddress.sol b/packages/protocol/contracts/shared/common/LibAddress.sol similarity index 99% rename from packages/protocol/contracts/libs/LibAddress.sol rename to packages/protocol/contracts/shared/common/LibAddress.sol index 342d0222eb..f79bad2610 100644 --- a/packages/protocol/contracts/libs/LibAddress.sol +++ b/packages/protocol/contracts/shared/common/LibAddress.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; diff --git a/packages/protocol/contracts/libs/LibBytes.sol b/packages/protocol/contracts/shared/common/LibBytes.sol similarity index 98% rename from packages/protocol/contracts/libs/LibBytes.sol rename to packages/protocol/contracts/shared/common/LibBytes.sol index c8ab684951..e881832156 100644 --- a/packages/protocol/contracts/libs/LibBytes.sol +++ b/packages/protocol/contracts/shared/common/LibBytes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; library LibBytes { error INNER_ERROR(bytes innerError); diff --git a/packages/protocol/contracts/libs/LibMath.sol b/packages/protocol/contracts/shared/common/LibMath.sol similarity index 97% rename from packages/protocol/contracts/libs/LibMath.sol rename to packages/protocol/contracts/shared/common/LibMath.sol index 6f05b84369..7fc0cf3d28 100644 --- a/packages/protocol/contracts/libs/LibMath.sol +++ b/packages/protocol/contracts/shared/common/LibMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibMath /// @dev This library offers additional math functions for uint256. diff --git a/packages/protocol/contracts/libs/LibNetwork.sol b/packages/protocol/contracts/shared/common/LibNetwork.sol similarity index 99% rename from packages/protocol/contracts/libs/LibNetwork.sol rename to packages/protocol/contracts/shared/common/LibNetwork.sol index ff7e84aea6..2806b474a1 100644 --- a/packages/protocol/contracts/libs/LibNetwork.sol +++ b/packages/protocol/contracts/shared/common/LibNetwork.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibNetwork library LibNetwork { diff --git a/packages/protocol/contracts/common/LibStrings.sol b/packages/protocol/contracts/shared/common/LibStrings.sol similarity index 99% rename from packages/protocol/contracts/common/LibStrings.sol rename to packages/protocol/contracts/shared/common/LibStrings.sol index 9189ae0092..2d889bd22b 100644 --- a/packages/protocol/contracts/common/LibStrings.sol +++ b/packages/protocol/contracts/shared/common/LibStrings.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibStrings /// @custom:security-contact security@taiko.xyz diff --git a/packages/protocol/contracts/libs/LibTrieProof.sol b/packages/protocol/contracts/shared/common/LibTrieProof.sol similarity index 99% rename from packages/protocol/contracts/libs/LibTrieProof.sol rename to packages/protocol/contracts/shared/common/LibTrieProof.sol index 0bcf2a1753..bb3cc7e0d9 100644 --- a/packages/protocol/contracts/libs/LibTrieProof.sol +++ b/packages/protocol/contracts/shared/common/LibTrieProof.sol @@ -4,7 +4,7 @@ // | |/ _` | | / / _ \ | |__/ _` | '_ (_-< // |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@optimism/packages/contracts-bedrock/src/libraries/rlp/RLPReader.sol"; import "@optimism/packages/contracts-bedrock/src/libraries/rlp/RLPWriter.sol"; diff --git a/packages/protocol/contracts/shared/data/LibSharedData.sol b/packages/protocol/contracts/shared/data/LibSharedData.sol new file mode 100644 index 0000000000..3bf9e665fd --- /dev/null +++ b/packages/protocol/contracts/shared/data/LibSharedData.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +library LibSharedData { + /// @dev Struct that represents L2 basefee configurations + struct BaseFeeConfig { + uint8 adjustmentQuotient; + uint8 sharingPctg; + uint32 gasIssuancePerSecond; + uint64 minGasExcess; + uint32 maxGasIssuancePerBlock; + } +} diff --git a/packages/protocol/contracts/signal/ISignalService.sol b/packages/protocol/contracts/shared/signal/ISignalService.sol similarity index 99% rename from packages/protocol/contracts/signal/ISignalService.sol rename to packages/protocol/contracts/shared/signal/ISignalService.sol index 1b1c56d51a..f6e8cc7b81 100644 --- a/packages/protocol/contracts/signal/ISignalService.sol +++ b/packages/protocol/contracts/shared/signal/ISignalService.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title ISignalService /// @notice The SignalService contract serves as a secure cross-chain message diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/shared/signal/SignalService.sol similarity index 99% rename from packages/protocol/contracts/signal/SignalService.sol rename to packages/protocol/contracts/shared/signal/SignalService.sol index 4fab944a7e..8b4416eda8 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/shared/signal/SignalService.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../common/EssentialContract.sol"; import "../common/LibStrings.sol"; -import "../libs/LibTrieProof.sol"; +import "../common/LibTrieProof.sol"; import "./ISignalService.sol"; /// @title SignalService diff --git a/packages/protocol/contracts/tko/TaikoTokenBase.sol b/packages/protocol/contracts/shared/token/TaikoTokenBase.sol similarity index 98% rename from packages/protocol/contracts/tko/TaikoTokenBase.sol rename to packages/protocol/contracts/shared/token/TaikoTokenBase.sol index 870cba3977..b0f373fac6 100644 --- a/packages/protocol/contracts/tko/TaikoTokenBase.sol +++ b/packages/protocol/contracts/shared/token/TaikoTokenBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; import "../common/EssentialContract.sol"; diff --git a/packages/protocol/contracts/tokenvault/BaseNFTVault.sol b/packages/protocol/contracts/shared/tokenvault/BaseNFTVault.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/BaseNFTVault.sol rename to packages/protocol/contracts/shared/tokenvault/BaseNFTVault.sol index 70f42e37f4..e47075803f 100644 --- a/packages/protocol/contracts/tokenvault/BaseNFTVault.sol +++ b/packages/protocol/contracts/shared/tokenvault/BaseNFTVault.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./BaseVault.sol"; diff --git a/packages/protocol/contracts/tokenvault/BaseVault.sol b/packages/protocol/contracts/shared/tokenvault/BaseVault.sol similarity index 98% rename from packages/protocol/contracts/tokenvault/BaseVault.sol rename to packages/protocol/contracts/shared/tokenvault/BaseVault.sol index 41c63722d6..de9db5c831 100644 --- a/packages/protocol/contracts/tokenvault/BaseVault.sol +++ b/packages/protocol/contracts/shared/tokenvault/BaseVault.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol"; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "../bridge/IBridge.sol"; import "../common/EssentialContract.sol"; import "../common/LibStrings.sol"; -import "../libs/LibBytes.sol"; +import "../common/LibBytes.sol"; /// @title INameSymbol /// @notice Interface for contracts that provide name() and symbol() diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/shared/tokenvault/BridgedERC1155.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/BridgedERC1155.sol rename to packages/protocol/contracts/shared/tokenvault/BridgedERC1155.sol index a262ed0177..2edb63ce28 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/shared/tokenvault/BridgedERC1155.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol"; import "../common/EssentialContract.sol"; diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20.sol b/packages/protocol/contracts/shared/tokenvault/BridgedERC20.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/BridgedERC20.sol rename to packages/protocol/contracts/shared/tokenvault/BridgedERC20.sol index 9320df5b04..f8a564680d 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20.sol +++ b/packages/protocol/contracts/shared/tokenvault/BridgedERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol"; diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol b/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/BridgedERC20V2.sol rename to packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol index 10da51b7ab..cc2b58ffa7 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol +++ b/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/interfaces/IERC5267Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol"; diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/shared/tokenvault/BridgedERC721.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/BridgedERC721.sol rename to packages/protocol/contracts/shared/tokenvault/BridgedERC721.sol index fd157570da..979aa00edb 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/shared/tokenvault/BridgedERC721.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; import "../common/EssentialContract.sol"; diff --git a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/ERC1155Vault.sol rename to packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol index eb83c03065..d9de36a88b 100644 --- a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC1155/utils/ERC1155ReceiverUpgradeable.sol"; -import "../libs/LibAddress.sol"; +import "../common/LibAddress.sol"; import "../common/LibStrings.sol"; import "./IBridgedERC1155.sol"; import "./BaseNFTVault.sol"; diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/ERC20Vault.sol rename to packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol index 2c2dfc2ad9..b7b0b0296b 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; @@ -7,7 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "../bridge/IQuotaManager.sol"; import "../common/LibStrings.sol"; -import "../libs/LibAddress.sol"; +import "../common/LibAddress.sol"; import "./IBridgedERC20.sol"; import "./BaseVault.sol"; diff --git a/packages/protocol/contracts/tokenvault/ERC721Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/ERC721Vault.sol rename to packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol index 9d83a1cee0..2784e80d64 100644 --- a/packages/protocol/contracts/tokenvault/ERC721Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; -import "../libs/LibAddress.sol"; +import "../common/LibAddress.sol"; import "../common/LibStrings.sol"; import "./IBridgedERC721.sol"; import "./BaseNFTVault.sol"; diff --git a/packages/protocol/contracts/tokenvault/IBridgedERC1155.sol b/packages/protocol/contracts/shared/tokenvault/IBridgedERC1155.sol similarity index 98% rename from packages/protocol/contracts/tokenvault/IBridgedERC1155.sol rename to packages/protocol/contracts/shared/tokenvault/IBridgedERC1155.sol index bfa4226a58..4c3e721782 100644 --- a/packages/protocol/contracts/tokenvault/IBridgedERC1155.sol +++ b/packages/protocol/contracts/shared/tokenvault/IBridgedERC1155.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IBridgedERC1155 /// @notice Contract for bridging ERC1155 tokens across different chains. diff --git a/packages/protocol/contracts/tokenvault/IBridgedERC20.sol b/packages/protocol/contracts/shared/tokenvault/IBridgedERC20.sol similarity index 99% rename from packages/protocol/contracts/tokenvault/IBridgedERC20.sol rename to packages/protocol/contracts/shared/tokenvault/IBridgedERC20.sol index fe86ca8f08..b8b672b479 100644 --- a/packages/protocol/contracts/tokenvault/IBridgedERC20.sol +++ b/packages/protocol/contracts/shared/tokenvault/IBridgedERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IBridgedERC20 /// @notice Interface for all bridged tokens. diff --git a/packages/protocol/contracts/tokenvault/IBridgedERC721.sol b/packages/protocol/contracts/shared/tokenvault/IBridgedERC721.sol similarity index 98% rename from packages/protocol/contracts/tokenvault/IBridgedERC721.sol rename to packages/protocol/contracts/shared/tokenvault/IBridgedERC721.sol index 05cf26c8b5..8f89632084 100644 --- a/packages/protocol/contracts/tokenvault/IBridgedERC721.sol +++ b/packages/protocol/contracts/shared/tokenvault/IBridgedERC721.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title IBridgedERC721 /// @notice Contract for bridging ERC721 tokens across different chains. diff --git a/packages/protocol/contracts/tokenvault/LibBridgedToken.sol b/packages/protocol/contracts/shared/tokenvault/LibBridgedToken.sol similarity index 98% rename from packages/protocol/contracts/tokenvault/LibBridgedToken.sol rename to packages/protocol/contracts/shared/tokenvault/LibBridgedToken.sol index 16c08853b0..bf6b8125b8 100644 --- a/packages/protocol/contracts/tokenvault/LibBridgedToken.sol +++ b/packages/protocol/contracts/shared/tokenvault/LibBridgedToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/Strings.sol"; diff --git a/packages/protocol/deployments/gen-layouts.sh b/packages/protocol/deployments/gen-layouts.sh deleted file mode 100755 index 2dc43caa84..0000000000 --- a/packages/protocol/deployments/gen-layouts.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -# Define the list of contracts to inspect -# Please try not to change the order -# Contracts shared between layer 1 and layer 2 -contracts_shared=( -"contracts/tokenvault/ERC1155Vault.sol:ERC1155Vault" -"contracts/tokenvault/ERC20Vault.sol:ERC20Vault" -"contracts/tokenvault/ERC721Vault.sol:ERC721Vault" -"contracts/tokenvault/BridgedERC20.sol:BridgedERC20" -"contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2" -"contracts/tokenvault/BridgedERC721.sol:BridgedERC721" -"contracts/tokenvault/BridgedERC1155.sol:BridgedERC1155" -"contracts/bridge/Bridge.sol:Bridge" -"contracts/bridge/QuotaManager.sol:QuotaManager" -"contracts/common/AddressManager.sol:AddressManager" -"contracts/common/AddressResolver.sol:AddressResolver" -"contracts/common/EssentialContract.sol:EssentialContract" -"contracts/signal/SignalService.sol:SignalService" -) - -# Layer 1 contracts -contracts_layer1=( -"contracts/tko/TaikoToken.sol:TaikoToken" -"contracts/verifiers/compose/ComposeVerifier.sol:ComposeVerifier" -"contracts/verifiers/compose/TeeAnyVerifier.sol:TeeAnyVerifier" -"contracts/verifiers/compose/ZkAndTeeVerifier.sol:ZkAndTeeVerifier" -"contracts/verifiers/compose/ZkAnyVerifier.sol:ZkAnyVerifier" -"contracts/verifiers/Risc0Verifier.sol:Risc0Verifier" -"contracts/verifiers/SP1Verifier.sol:SP1Verifier" -"contracts/verifiers/SgxVerifier.sol:SgxVerifier" -"contracts/automata-attestation/AutomataDcapV3Attestation.sol:AutomataDcapV3Attestation" -"contracts/L1/TaikoL1.sol:TaikoL1" -"contracts/L1/tiers/TierProviderV2.sol:TierProviderV2" -"contracts/hekla/HeklaTaikoL1.sol:HeklaTaikoL1" -"contracts/hekla/HeklaTierProvider.sol:HeklaTierProvider" -"contracts/mainnet/shared/MainnetBridge.sol:MainnetBridge" -"contracts/mainnet/shared/MainnetSignalService.sol:MainnetSignalService" -"contracts/mainnet/shared/MainnetERC20Vault.sol:MainnetERC20Vault" -"contracts/mainnet/shared/MainnetERC1155Vault.sol:MainnetERC1155Vault" -"contracts/mainnet/shared/MainnetERC721Vault.sol:MainnetERC721Vault" -"contracts/mainnet/shared/MainnetSharedAddressManager.sol:MainnetSharedAddressManager" -"contracts/mainnet/addrcache/RollupAddressCache.sol:RollupAddressCache" -"contracts/mainnet/addrcache/SharedAddressCache.sol:SharedAddressCache" -"contracts/mainnet/addrcache/AddressCache.sol:AddressCache" -"contracts/mainnet/rollup/verifiers/MainnetSgxVerifier.sol:MainnetSgxVerifier" -"contracts/mainnet/rollup/verifiers/MainnetSP1Verifier.sol:MainnetSP1Verifier" -"contracts/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol:MainnetZkAnyVerifier" -"contracts/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol:MainnetRisc0Verifier" -"contracts/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol:MainnetZkAndTeeVerifier" -"contracts/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol:MainnetTeeAnyVerifier" -"contracts/mainnet/rollup/MainnetGuardianProver.sol:MainnetGuardianProver" -"contracts/mainnet/rollup/MainnetTaikoL1.sol:MainnetTaikoL1" -"contracts/mainnet/rollup/MainnetRollupAddressManager.sol:MainnetRollupAddressManager" -"contracts/mainnet/rollup/MainnetTierRouter.sol:MainnetTierRouter" -"contracts/mainnet/rollup/MainnetProverSet.sol:MainnetProverSet" -"contracts/team/tokenunlock/TokenUnlock.sol:TokenUnlock" -"contracts/team/proving/ProverSet.sol:ProverSet" -"contracts/L1/provers/GuardianProver.sol:GuardianProver" -) - -# Layer 2 contracts -contracts_layer2=( -"contracts/tko/BridgedTaikoToken.sol:BridgedTaikoToken" -"contracts/L2/DelegateOwner.sol:DelegateOwner" -"contracts/L2/TaikoL2.sol:TaikoL2" -"contracts/hekla/HeklaTaikoL2.sol:HeklaTaikoL2" -"contracts/mainnet/rollup/MainnetTaikoL2.sol:MainnetTaikoL2" -) - -profile=$1 - -if [ "$profile" == "layer1" ]; then - echo "Generating layer 1 contract layouts..." - contracts=("${contracts_shared[@]}" "${contracts_layer1[@]}") -elif [ "$profile" == "layer2" ]; then - echo "Generating layer 2 contract layouts..." - contracts=("${contracts_shared[@]}" "${contracts_layer2[@]}") -else - echo "Invalid profile. Please enter either 'layer1' or 'layer2'." - exit 1 -fi - -# Empty the output file initially -output_file="contract_layout_${profile}.md" -> $output_file - -# Loop over each contract -for contract in "${contracts[@]}"; do - # Run forge inspect and append to the file - # Ensure correct concatenation of the command without commas - echo "inspect ${contract}" - - echo "## ${contract}" >> $output_file - FOUNDRY_PROFILE=${profile} forge inspect -C ./contracts/${profile} -o ./out/${profile} ${contract} storagelayout --pretty >> $output_file - echo "" >> $output_file - -done - -sed_pattern='s|contracts/.*/\([^/]*\)\.sol:\([^/]*\)|\2|g' - -if [[ "$(uname -s)" == "Darwin" ]]; then - sed -i '' "$sed_pattern" "$output_file" -else - sed -i "$sed_pattern" "$output_file" -fi - diff --git a/packages/protocol/deployments/hekla-contract-logs.md b/packages/protocol/deployments/hekla-contract-logs.md index f4543e4555..8ed476cfae 100644 --- a/packages/protocol/deployments/hekla-contract-logs.md +++ b/packages/protocol/deployments/hekla-contract-logs.md @@ -14,7 +14,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### taiko_token @@ -24,7 +24,7 @@ - logs: - deployed on Mar 29, 2024 at commit `b341a68d5` - upgraded on Jun 18, 2024, added `batchTransfer` method. - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### signal_service @@ -34,7 +34,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### bridge @@ -44,7 +44,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### erc20_vault @@ -54,7 +54,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### erc721_vault @@ -64,7 +64,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### erc1155_vault @@ -74,7 +74,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### bridged_erc20 @@ -103,7 +103,7 @@ - logs: - upgraded on May 10, 2024 at commit `13ad99d` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### taikoL1 @@ -118,7 +118,7 @@ - upgraded on Jun 14, 2024 at [PR #17553](https://github.com/taikoxyz/taiko-mono/pull/17553) @commit `baed5b5` - upgraded on Jun 19, 2024 at commit `b7e12e3` - upgraded on Jun 20, 2024 at commit `6e07ab5` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 - upgraded on Jul 11, 2024 at [PR #17779](https://github.com/taikoxyz/taiko-mono/pull/17779) - upgraded on Jul 15, 2024 at commit `45281b8` - upgraded on Aug 15, 2024 at `protocol-v1.8.0` with [#17919](https://github.com/taikoxyz/taiko-mono/pull/17919) @@ -131,7 +131,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 12, 2024 at commit `04bb81e` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### tierProvider @@ -178,7 +178,7 @@ - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### guardian_minority @@ -188,7 +188,7 @@ - logs: - deployed on May 20, 2024 at commit `6e56475` - upgraded on Jun 10, 2024 at commit `d5965bb` - - transfered ownership on Jul 8, 2024 + - transferred ownership on Jul 8, 2024 ### risc0_groth16_verifier @@ -210,7 +210,6 @@ - logs: - deployed on September 02, 2024 at commit `16ac02e` - ### tier_zkvm_sp1 - proxy : 0xFbE49f777E0078b3Fa0bae6de4794c88d6EA6DDD diff --git a/packages/protocol/docs/how_taiko_is_deployed.md b/packages/protocol/docs/how_taiko_is_deployed.md index 70d2593805..c9a5f33e9a 100644 --- a/packages/protocol/docs/how_taiko_is_deployed.md +++ b/packages/protocol/docs/how_taiko_is_deployed.md @@ -2,6 +2,6 @@ The Taiko protocol smart contracts are deployed on L1 and L2. The L2 contracts are pre-deployed first by creating a genesis block, and then the L1 contracts are deployed using a script. The general flow is like this: -1. A `genesis.json` is generated, which includes the L2 contracts (see: [generate genesis](../utils/generate_genesis/main.ts)). +1. A `genesis.json` is generated, which includes the L2 contracts (see: [generate genesis](../utils/generate_genesis/generate.ts)). 2. The `genesis.json` is used as input to generate the genesis block (see: https://geth.ethereum.org/docs/fundamentals/private-network#creating-genesis-block). 3. The L1 smart contracts are deployed by executing the L1 deployment script, [DeployOnL1.s.sol](../script/DeployOnL1.s.sol). The L1 deployment script takes in artifacts from the L2 deployment such as the deployed contract addresses, and genesis block hash. diff --git a/packages/protocol/foundry.toml b/packages/protocol/foundry.toml index 626e2bce94..144650ef19 100644 --- a/packages/protocol/foundry.toml +++ b/packages/protocol/foundry.toml @@ -1,7 +1,4 @@ [profile.default] -src = "contracts" -out = "out" -test = "test" script = "script" gas_price = 10_000_000_000 # 10 Gwei gas_limit = "18446744073709551615" # u64::MAX @@ -10,7 +7,6 @@ optimizer_runs = 200 ffi = true memory_limit = 2_073_741_824 solc_version = "0.8.27" -evm_version = "cancun" remappings = [ "@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/", "openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/", @@ -54,5 +50,23 @@ multiline_func_header = "all" number_underscore = "thousands" wrap_comments = true +[profile.layer1] +src = "contracts/layer1" +test = "test/layer1" +script = "script/layer1" +out = "out/layer1" +evm_version = "cancun" + +[profile.layer2] +src = "contracts/layer2" +test = "test/layer2" +script = "script/layer2" +out = "out/layer2" +evm_version = "shanghai" + [profile.genesis] -test = "genesis" +src = "contracts/layer2" +test = "test/genesis" +script = "script/layer2" +out = "out/layer2" +evm_version = "shanghai" \ No newline at end of file diff --git a/packages/protocol/monitors/actions/ERC1155Vault-BridgedTokenDeployed.js b/packages/protocol/monitors/actions/ERC1155Vault-BridgedTokenDeployed.js index bfac4d6be9..4a0b8b9573 100644 --- a/packages/protocol/monitors/actions/ERC1155Vault-BridgedTokenDeployed.js +++ b/packages/protocol/monitors/actions/ERC1155Vault-BridgedTokenDeployed.js @@ -1,5 +1,5 @@ -const {ethers} = require("ethers"); -const {Defender} = require("@openzeppelin/defender-sdk"); +const { ethers } = require("ethers"); +const { Defender } = require("@openzeppelin/defender-sdk"); const ABI = [ { @@ -45,7 +45,7 @@ function alertOrg(notificationClient, message) { notificationClient.send({ channelAlias: "discord_bridging", subject: "ERC1155Vault BridgedTokenDeployed Event Count", - message: message, + message, }); } @@ -75,7 +75,7 @@ async function calculateBlockRange(provider) { console.log(`Calculated block range: from ${fromBlock} to ${toBlock}`); - return {fromBlock, toBlock}; + return { fromBlock, toBlock }; } async function fetchLogs( @@ -84,7 +84,7 @@ async function fetchLogs( toBlock, address, abi, - provider + provider, ) { const iface = new ethers.utils.Interface(abi); const eventTopic = iface.getEventTopic(eventName); @@ -120,16 +120,16 @@ function createProvider(apiKey, apiSecret, relayerApiKey, relayerApiSecret) { } exports.handler = async function (event, context) { - const {notificationClient} = context; - const {apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret} = + const { notificationClient } = context; + const { apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret } = event.secrets; const l1Provider = createProvider(apiKey, apiSecret, l1ApiKey, l1ApiSecret); const l2Provider = createProvider(apiKey, apiSecret, l2ApiKey, l2ApiSecret); - const {fromBlock: l1FromBlock, toBlock: l1ToBlock} = + const { fromBlock: l1FromBlock, toBlock: l1ToBlock } = await calculateBlockRange(l1Provider); - const {fromBlock: l2FromBlock, toBlock: l2ToBlock} = + const { fromBlock: l2FromBlock, toBlock: l2ToBlock } = await calculateBlockRange(l2Provider); const l1Logs = await fetchLogs( @@ -138,7 +138,7 @@ exports.handler = async function (event, context) { l1ToBlock, "0xaf145913EA4a56BE22E120ED9C24589659881702", ABI, - l1Provider + l1Provider, ); const l2Logs = await fetchLogs( @@ -147,7 +147,7 @@ exports.handler = async function (event, context) { l2ToBlock, "0x1670000000000000000000000000000000000004", ABI, - l2Provider + l2Provider, ); const l1EventCount = l1Logs.length; diff --git a/packages/protocol/monitors/actions/ERC20Vault-BridgedTokenDeployed.js b/packages/protocol/monitors/actions/ERC20Vault-BridgedTokenDeployed.js index 969f16000e..3939975e8f 100644 --- a/packages/protocol/monitors/actions/ERC20Vault-BridgedTokenDeployed.js +++ b/packages/protocol/monitors/actions/ERC20Vault-BridgedTokenDeployed.js @@ -1,5 +1,5 @@ -const {ethers} = require("ethers"); -const {Defender} = require("@openzeppelin/defender-sdk"); +const { ethers } = require("ethers"); +const { Defender } = require("@openzeppelin/defender-sdk"); const ABI = [ { @@ -51,7 +51,7 @@ function alertOrg(notificationClient, message) { notificationClient.send({ channelAlias: "discord_bridging", subject: "BridgedTokenDeployed Event Count", - message: message, + message, }); } @@ -81,7 +81,7 @@ async function calculateBlockRange(provider) { console.log(`Calculated block range: from ${fromBlock} to ${toBlock}`); - return {fromBlock, toBlock}; + return { fromBlock, toBlock }; } async function fetchLogs( @@ -90,7 +90,7 @@ async function fetchLogs( toBlock, address, abi, - provider + provider, ) { const iface = new ethers.utils.Interface(abi); const eventTopic = iface.getEventTopic(eventName); @@ -126,16 +126,16 @@ function createProvider(apiKey, apiSecret, relayerApiKey, relayerApiSecret) { } exports.handler = async function (event, context) { - const {notificationClient} = context; - const {apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret} = + const { notificationClient } = context; + const { apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret } = event.secrets; const l1Provider = createProvider(apiKey, apiSecret, l1ApiKey, l1ApiSecret); const l2Provider = createProvider(apiKey, apiSecret, l2ApiKey, l2ApiSecret); - const {fromBlock: l1FromBlock, toBlock: l1ToBlock} = + const { fromBlock: l1FromBlock, toBlock: l1ToBlock } = await calculateBlockRange(l1Provider); - const {fromBlock: l2FromBlock, toBlock: l2ToBlock} = + const { fromBlock: l2FromBlock, toBlock: l2ToBlock } = await calculateBlockRange(l2Provider); const l1Logs = await fetchLogs( @@ -144,7 +144,7 @@ exports.handler = async function (event, context) { l1ToBlock, "0x996282cA11E5DEb6B5D122CC3B9A1FcAAD4415Ab", ABI, - l1Provider + l1Provider, ); const l2Logs = await fetchLogs( @@ -153,7 +153,7 @@ exports.handler = async function (event, context) { l2ToBlock, "0x1670000000000000000000000000000000000002", ABI, - l2Provider + l2Provider, ); const l1EventCount = l1Logs.length; diff --git a/packages/protocol/monitors/actions/ERC721Vault-BridgedTokenDeployed.js b/packages/protocol/monitors/actions/ERC721Vault-BridgedTokenDeployed.js index c111fd73d7..7684f22971 100644 --- a/packages/protocol/monitors/actions/ERC721Vault-BridgedTokenDeployed.js +++ b/packages/protocol/monitors/actions/ERC721Vault-BridgedTokenDeployed.js @@ -1,5 +1,5 @@ -const {ethers} = require("ethers"); -const {Defender} = require("@openzeppelin/defender-sdk"); +const { ethers } = require("ethers"); +const { Defender } = require("@openzeppelin/defender-sdk"); const ABI = [ { @@ -45,7 +45,7 @@ function alertOrg(notificationClient, message) { notificationClient.send({ channelAlias: "discord_bridging", subject: "ERC721Vault BridgedTokenDeployed Event Count", - message: message, + message, }); } @@ -75,7 +75,7 @@ async function calculateBlockRange(provider) { console.log(`Calculated block range: from ${fromBlock} to ${toBlock}`); - return {fromBlock, toBlock}; + return { fromBlock, toBlock }; } async function fetchLogs( @@ -84,7 +84,7 @@ async function fetchLogs( toBlock, address, abi, - provider + provider, ) { const iface = new ethers.utils.Interface(abi); const eventTopic = iface.getEventTopic(eventName); @@ -120,16 +120,16 @@ function createProvider(apiKey, apiSecret, relayerApiKey, relayerApiSecret) { } exports.handler = async function (event, context) { - const {notificationClient} = context; - const {apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret} = + const { notificationClient } = context; + const { apiKey, apiSecret, l1ApiKey, l1ApiSecret, l2ApiKey, l2ApiSecret } = event.secrets; const l1Provider = createProvider(apiKey, apiSecret, l1ApiKey, l1ApiSecret); const l2Provider = createProvider(apiKey, apiSecret, l2ApiKey, l2ApiSecret); - const {fromBlock: l1FromBlock, toBlock: l1ToBlock} = + const { fromBlock: l1FromBlock, toBlock: l1ToBlock } = await calculateBlockRange(l1Provider); - const {fromBlock: l2FromBlock, toBlock: l2ToBlock} = + const { fromBlock: l2FromBlock, toBlock: l2ToBlock } = await calculateBlockRange(l2Provider); const l1Logs = await fetchLogs( @@ -138,7 +138,7 @@ exports.handler = async function (event, context) { l1ToBlock, "0x0b470dd3A0e1C41228856Fb319649E7c08f419Aa", ABI, - l1Provider + l1Provider, ); const l2Logs = await fetchLogs( @@ -147,7 +147,7 @@ exports.handler = async function (event, context) { l2ToBlock, "0x1670000000000000000000000000000000000003", ABI, - l2Provider + l2Provider, ); const l1EventCount = l1Logs.length; diff --git a/packages/protocol/package.json b/packages/protocol/package.json index f12de83416..747686c68e 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,24 +1,27 @@ { "name": "@taiko/protocol", - "version": "1.9.0", + "version": "1.8.0", "private": true, "scripts": { "buildMerkle": "ts-node ./utils/airdrop/buildMerkleTree.ts ./utils/airdrop/airdrop_db/example_claimList.json", - "clean": "rm -rf abis cache* && forge clean", - "compile": "forge build --build-info --extra-output storage-layout", - "layout:l1": "./deployments/gen-layouts.sh layer1", - "layout:l2": "./deployments/gen-layouts.sh layer2", + "clean": "rm -rf out abis cache* && forge clean", + "compile:l1": "FOUNDRY_PROFILE=layer1 forge build --build-info --extra-output storage-layout", + "compile:l2": "FOUNDRY_PROFILE=layer2 forge build --build-info --extra-output storage-layout", + "compile:genesis": "FOUNDRY_PROFILE=genesis forge build --build-info --extra-output storage-layout", + "compile": "pnpm compile:l1 && pnpm compile:l2", + "test:l1": "FOUNDRY_PROFILE=layer1 forge test -vvv --extra-output storage-layout", + "test:l2": "FOUNDRY_PROFILE=layer2 forge test -vvv --extra-output storage-layout", + "test": "pnpm test:l1 && pnpm test:l2", + "layout:l1": "./script/gen-layouts.sh layer1", + "layout:l2": "./script/gen-layouts.sh layer2", "layout": "pnpm layout:l1 && pnpm layout:l2", - "test:deploy": "./script/download_solc.sh && ./script/test_deploy_on_l1.sh", + "test:deploy:l1": "./script/download_solc.sh && ./script/layer1/deploy_protocol_on_l1.sh", "eslint": "pnpm exec eslint --fix --ignore-path .eslintignore --ext .js,.ts .", - "fmt:sol": "forge fmt", - "generate:genesis": "ts-node ./utils/generate_genesis/main.ts", - "lint:sol": "forge fmt && pnpm solhint 'contracts/**/*.sol'", - "snapshot": "forge snapshot --match-path 'test/**/*.t.sol'", - "test": "forge test -vvv --match-path test/*.t.sol", + "fmt:sol": "forge fmt && pnpm solhint 'contracts/**/*.sol'", "test:coverage": "mkdir -p coverage && forge coverage --report lcov && lcov --remove ./lcov.info -o ./coverage/lcov.info 'test/' 'script/' 'contracts/thirdparty/' && genhtml coverage/lcov.info --branch-coverage --output-dir coverage --ignore-errors category && open coverage/index.html", - "test:genesis": "pnpm compile && FOUNDRY_PROFILE=genesis ./genesis/generate_genesis.test.sh", - "export:simconf": "mkdir -p simulation/out && forge test --match-test 'test_L2_NoFeeCheck_simulation' -vv > simulation/out/simconf_$(date +%s).txt" + "genesis:gen": "pnpm compile:l2 && ts-node ./test/genesis/generate/generate.ts", + "genesis:test": "./test/genesis/genesis.test.sh", + "export:simconf": "mkdir -p simulation/out && FOUNDRY_PROFILE=layer2 forge test --match-test 'test_L2_NoFeeCheck_simulation' -vv > simulation/out/simconf_$(date +%s).txt" }, "devDependencies": { "@types/node": "^20.11.30", @@ -32,7 +35,7 @@ "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.1.1", "ethers": "^5.7.2", - "solc": "0.8.27", + "solc": "0.8.24", "solhint": "^5.0.3", "ts-node": "^10.9.2", "typescript": "^5.2.2" diff --git a/packages/protocol/script/download_solc.sh b/packages/protocol/script/download_solc.sh index 8c77c315a8..0f07885585 100755 --- a/packages/protocol/script/download_solc.sh +++ b/packages/protocol/script/download_solc.sh @@ -11,7 +11,7 @@ fi mkdir -p "$(dirname "${solc_bin}")" -VERSION=v0.8.24 +VERSION=v0.8.27 if [ "$(uname)" = 'Darwin' ]; then SOLC_FILE_NAME=solc-macos diff --git a/packages/protocol/script/gen-layouts.sh b/packages/protocol/script/gen-layouts.sh new file mode 100755 index 0000000000..6216cbc763 --- /dev/null +++ b/packages/protocol/script/gen-layouts.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +# Define the list of contracts to inspect +# Please try not to change the order +# Contracts shared between layer 1 and layer 2 +contracts_shared=( +"contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault" +"contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault" +"contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault" +"contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20" +"contracts/shared/tokenvault/BridgedERC20V2.sol:BridgedERC20V2" +"contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721" +"contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155" +"contracts/shared/bridge/Bridge.sol:Bridge" +"contracts/shared/bridge/QuotaManager.sol:QuotaManager" +"contracts/shared/common/AddressManager.sol:AddressManager" +"contracts/shared/common/AddressResolver.sol:AddressResolver" +"contracts/shared/common/EssentialContract.sol:EssentialContract" +"contracts/shared/signal/SignalService.sol:SignalService" +) + +# Layer 1 contracts +contracts_layer1=( +"contracts/layer1/token/TaikoToken.sol:TaikoToken" +"contracts/layer1/verifiers/compose/ComposeVerifier.sol:ComposeVerifier" +"contracts/layer1/verifiers/compose/TeeAnyVerifier.sol:TeeAnyVerifier" +"contracts/layer1/verifiers/compose/ZkAndTeeVerifier.sol:ZkAndTeeVerifier" +"contracts/layer1/verifiers/compose/ZkAnyVerifier.sol:ZkAnyVerifier" +"contracts/layer1/verifiers/Risc0Verifier.sol:Risc0Verifier" +"contracts/layer1/verifiers/SP1Verifier.sol:SP1Verifier" +"contracts/layer1/verifiers/SgxVerifier.sol:SgxVerifier" +"contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol:AutomataDcapV3Attestation" +"contracts/layer1/based/TaikoL1.sol:TaikoL1" +"contracts/layer1/tiers/TierProviderV2.sol:TierProviderV2" +"contracts/layer1/hekla/HeklaTaikoL1.sol:HeklaTaikoL1" +"contracts/layer1/hekla/HeklaTierProvider.sol:HeklaTierProvider" +"contracts/layer1/mainnet/multirollup/MainnetBridge.sol:MainnetBridge" +"contracts/layer1/mainnet/multirollup/MainnetSignalService.sol:MainnetSignalService" +"contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol:MainnetERC20Vault" +"contracts/layer1/mainnet/multirollup/MainnetERC1155Vault.sol:MainnetERC1155Vault" +"contracts/layer1/mainnet/multirollup/MainnetERC721Vault.sol:MainnetERC721Vault" +"contracts/layer1/mainnet/multirollup/MainnetSharedAddressManager.sol:MainnetSharedAddressManager" +"contracts/layer1/mainnet/addrcache/RollupAddressCache.sol:RollupAddressCache" +"contracts/layer1/mainnet/addrcache/SharedAddressCache.sol:SharedAddressCache" +"contracts/layer1/mainnet/addrcache/AddressCache.sol:AddressCache" +"contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol:MainnetSgxVerifier" +"contracts/layer1/mainnet/rollup/verifiers/MainnetSP1Verifier.sol:MainnetSP1Verifier" +"contracts/layer1/mainnet/rollup/verifiers/MainnetZkAnyVerifier.sol:MainnetZkAnyVerifier" +"contracts/layer1/mainnet/rollup/verifiers/MainnetRisc0Verifier.sol:MainnetRisc0Verifier" +"contracts/layer1/mainnet/rollup/verifiers/MainnetZkAndTeeVerifier.sol:MainnetZkAndTeeVerifier" +"contracts/layer1/mainnet/rollup/verifiers/MainnetTeeAnyVerifier.sol:MainnetTeeAnyVerifier" +"contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol:MainnetGuardianProver" +"contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol:MainnetTaikoL1" +"contracts/layer1/mainnet/rollup/MainnetRollupAddressManager.sol:MainnetRollupAddressManager" +"contracts/layer1/mainnet/rollup/MainnetTierRouter.sol:MainnetTierRouter" +"contracts/layer1/mainnet/rollup/MainnetProverSet.sol:MainnetProverSet" +"contracts/layer1/team/tokenunlock/TokenUnlock.sol:TokenUnlock" +"contracts/layer1/provers/ProverSet.sol:ProverSet" +"contracts/layer1/provers/GuardianProver.sol:GuardianProver" +) + +# Layer 2 contracts +contracts_layer2=( +"contracts/layer2/token/BridgedTaikoToken.sol:BridgedTaikoToken" +"contracts/layer2/DelegateOwner.sol:DelegateOwner" +"contracts/layer2/based/TaikoL2.sol:TaikoL2" +"contracts/layer2/hekla/HeklaTaikoL2.sol:HeklaTaikoL2" +"contracts/layer2/mainnet/MainnetTaikoL2.sol:MainnetTaikoL2" +) + +profile=$1 + +if [ "$profile" == "layer1" ]; then + echo "Generating layer 1 contract layouts..." + contracts=("${contracts_shared[@]}" "${contracts_layer1[@]}") +elif [ "$profile" == "layer2" ]; then + echo "Generating layer 2 contract layouts..." + contracts=("${contracts_shared[@]}" "${contracts_layer2[@]}") +else + echo "Invalid profile. Please enter either 'layer1' or 'layer2'." + exit 1 +fi + +# Empty the output file initially +output_file="contract_layout_${profile}.md" +> $output_file + +# Loop over each contract +for contract in "${contracts[@]}"; do + # Run forge inspect and append to the file + # Ensure correct concatenation of the command without commas + echo "inspect ${contract}" + + echo "## ${contract}" >> $output_file + FOUNDRY_PROFILE=${profile} forge inspect -C ./contracts/${profile} -o ./out/${profile} ${contract} storagelayout --pretty >> $output_file + echo "" >> $output_file +done + +sed_pattern='s|contracts/.*/\([^/]*\)\.sol:\([^/]*\)|\2|g' + +if [[ "$(uname -s)" == "Darwin" ]]; then + sed -i '' "$sed_pattern" "$output_file" +else + sed -i "$sed_pattern" "$output_file" +fi diff --git a/packages/protocol/script/AddSGXVerifierInstances.s.sol b/packages/protocol/script/layer1/AddSGXVerifierInstances.s.sol similarity index 84% rename from packages/protocol/script/AddSGXVerifierInstances.s.sol rename to packages/protocol/script/layer1/AddSGXVerifierInstances.s.sol index 0c72877445..92800f94f6 100644 --- a/packages/protocol/script/AddSGXVerifierInstances.s.sol +++ b/packages/protocol/script/layer1/AddSGXVerifierInstances.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/verifiers/SgxVerifier.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/verifiers/SgxVerifier.sol"; contract AddSGXVerifierInstances is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/DeployERC20Airdrop.s.sol b/packages/protocol/script/layer1/DeployERC20Airdrop.s.sol similarity index 93% rename from packages/protocol/script/DeployERC20Airdrop.s.sol rename to packages/protocol/script/layer1/DeployERC20Airdrop.s.sol index 68fd858110..939fdfffa3 100644 --- a/packages/protocol/script/DeployERC20Airdrop.s.sol +++ b/packages/protocol/script/layer1/DeployERC20Airdrop.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/team/airdrop/ERC20Airdrop.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/team/airdrop/ERC20Airdrop.sol"; // @KorbinianK , @2manslkh // As written also in the tests the workflow shall be the following (checklist): diff --git a/packages/protocol/script/DeployLabsProverPool.s.sol b/packages/protocol/script/layer1/DeployLabsProverPool.s.sol similarity index 82% rename from packages/protocol/script/DeployLabsProverPool.s.sol rename to packages/protocol/script/layer1/DeployLabsProverPool.s.sol index 57abcc13a3..887bd135b4 100644 --- a/packages/protocol/script/DeployLabsProverPool.s.sol +++ b/packages/protocol/script/layer1/DeployLabsProverPool.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/team/proving/ProverSet.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/provers/ProverSet.sol"; contract DeployLabsProverPool is DeployCapability { address public addressManager = 0x579f40D0BE111b823962043702cabe6Aaa290780; diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol similarity index 90% rename from packages/protocol/script/DeployOnL1.s.sol rename to packages/protocol/script/layer1/DeployProtocolOnL1.s.sol index c935f913ae..ec97f9c8f5 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/Strings.sol"; import "@risc0/contracts/groth16/RiscZeroGroth16Verifier.sol"; @@ -11,38 +11,38 @@ import { SP1Verifier as SP1Verifier120rc } from "@sp1-contracts/src/v1.2.0-rc/SP // - https://github.com/rdubois-crypto/FreshCryptoLib import "@p256-verifier/contracts/P256Verifier.sol"; -import "../contracts/common/LibStrings.sol"; -import "../contracts/tko/TaikoToken.sol"; -import "../contracts/mainnet/rollup/MainnetTaikoL1.sol"; -import "../contracts/devnet/DevnetTaikoL1.sol"; -import "../contracts/L1/provers/GuardianProver.sol"; -import "../contracts/L1/tiers/DevnetTierProvider.sol"; -import "../contracts/L1/tiers/TierProviderV2.sol"; -import "../contracts/mainnet/shared/MainnetBridge.sol"; -import "../contracts/tokenvault/BridgedERC20.sol"; -import "../contracts/tokenvault/BridgedERC721.sol"; -import "../contracts/tokenvault/BridgedERC1155.sol"; -import "../contracts/mainnet/shared/MainnetERC20Vault.sol"; -import "../contracts/mainnet/shared/MainnetERC1155Vault.sol"; -import "../contracts/mainnet/shared/MainnetERC721Vault.sol"; -import "../contracts/mainnet/shared/MainnetSignalService.sol"; -import "../contracts/mainnet/rollup/MainnetGuardianProver.sol"; -import "../contracts/automata-attestation/AutomataDcapV3Attestation.sol"; -import "../contracts/automata-attestation/utils/SigVerifyLib.sol"; -import "../contracts/automata-attestation/lib/PEMCertChainLib.sol"; -import "../contracts/mainnet/rollup/verifiers/MainnetSgxVerifier.sol"; -import "../contracts/team/proving/ProverSet.sol"; -import "../test/common/erc20/FreeMintERC20.sol"; -import "../test/common/erc20/MayFailFreeMintERC20.sol"; -import "../test/L1/TestTierProvider.sol"; -import "../test/DeployCapability.sol"; -import "../contracts/verifiers/Risc0Verifier.sol"; -import "../contracts/verifiers/SP1Verifier.sol"; - -/// @title DeployOnL1 +import "../../contracts/shared/common/LibStrings.sol"; +import "../../contracts/shared/tokenvault/BridgedERC1155.sol"; +import "../../contracts/shared/tokenvault/BridgedERC20.sol"; +import "../../contracts/shared/tokenvault/BridgedERC721.sol"; +import "../../contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol"; +import "../../contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol"; +import "../../contracts/layer1/automata-attestation/utils/SigVerifyLib.sol"; +import "../../contracts/layer1/devnet/DevnetTaikoL1.sol"; +import "../../contracts/layer1/devnet/DevnetTierProvider.sol"; +import "../../contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol"; +import "../../contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol"; +import "../../contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol"; +import "../../contracts/layer1/mainnet/multirollup/MainnetBridge.sol"; +import "../../contracts/layer1/mainnet/multirollup/MainnetERC1155Vault.sol"; +import "../../contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol"; +import "../../contracts/layer1/mainnet/multirollup/MainnetERC721Vault.sol"; +import "../../contracts/layer1/mainnet/multirollup/MainnetSignalService.sol"; +import "../../contracts/layer1/provers/GuardianProver.sol"; +import "../../contracts/layer1/provers/ProverSet.sol"; +import "../../contracts/layer1/tiers/TierProviderV2.sol"; +import "../../contracts/layer1/token/TaikoToken.sol"; +import "../../contracts/layer1/verifiers/Risc0Verifier.sol"; +import "../../contracts/layer1/verifiers/SP1Verifier.sol"; +import "../../test/layer1/based/TestTierProvider.sol"; +import "../../test/shared/token/FreeMintERC20.sol"; +import "../../test/shared/token/MayFailFreeMintERC20.sol"; +import "../../test/shared/DeployCapability.sol"; + +/// @title DeployProtocolOnL1 /// @notice This script deploys the core Taiko protocol smart contract on L1, /// initializing the rollup. -contract DeployOnL1 is DeployCapability { +contract DeployProtocolOnL1 is DeployCapability { uint256 public NUM_MIN_MAJORITY_GUARDIANS = vm.envUint("NUM_MIN_MAJORITY_GUARDIANS"); uint256 public NUM_MIN_MINORITY_GUARDIANS = vm.envUint("NUM_MIN_MINORITY_GUARDIANS"); diff --git a/packages/protocol/script/DeployProverSet.s.sol b/packages/protocol/script/layer1/DeployProverSet.s.sol similarity index 90% rename from packages/protocol/script/DeployProverSet.s.sol rename to packages/protocol/script/layer1/DeployProverSet.s.sol index 4a0306ae41..eb874c2ba7 100644 --- a/packages/protocol/script/DeployProverSet.s.sol +++ b/packages/protocol/script/layer1/DeployProverSet.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../contracts/team/proving/ProverSet.sol"; -import "../test/DeployCapability.sol"; +import "../../contracts/layer1/provers/ProverSet.sol"; +import "../../test/shared/DeployCapability.sol"; contract DeployProverSet is DeployCapability { modifier broadcast() { diff --git a/packages/protocol/script/DeployL1QuotaManager.s.sol b/packages/protocol/script/layer1/DeployQuotaManager.s.sol similarity index 89% rename from packages/protocol/script/DeployL1QuotaManager.s.sol rename to packages/protocol/script/layer1/DeployQuotaManager.s.sol index bd90935509..d3d2f8122a 100644 --- a/packages/protocol/script/DeployL1QuotaManager.s.sol +++ b/packages/protocol/script/layer1/DeployQuotaManager.s.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/bridge/QuotaManager.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/shared/bridge/QuotaManager.sol"; -contract DeployL1QuotaManager is DeployCapability { +contract DeployQuotaManager is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); // MAINNET_L1_SHARED_ADDRESS_MANAGER: 0xEf9EaA1dd30a9AA1df01c36411b5F082aA65fBaa address public addressManager = vm.envAddress("L1_SHARED_ADDRESS_MANAGER"); diff --git a/packages/protocol/script/DeployRisc0Verifier.s.sol b/packages/protocol/script/layer1/DeployRisc0Verifier.s.sol similarity index 88% rename from packages/protocol/script/DeployRisc0Verifier.s.sol rename to packages/protocol/script/layer1/DeployRisc0Verifier.s.sol index 772e110cba..76dc325a72 100644 --- a/packages/protocol/script/DeployRisc0Verifier.s.sol +++ b/packages/protocol/script/layer1/DeployRisc0Verifier.s.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@risc0/contracts/groth16/RiscZeroGroth16Verifier.sol"; -import "../test/DeployCapability.sol"; -import "../contracts/verifiers/Risc0Verifier.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/verifiers/Risc0Verifier.sol"; contract DeployRisc0Verifier is DeployCapability { uint256 public deployerPrivKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/DeploySP1Verifier.s.sol b/packages/protocol/script/layer1/DeploySP1Verifier.s.sol similarity index 88% rename from packages/protocol/script/DeploySP1Verifier.s.sol rename to packages/protocol/script/layer1/DeploySP1Verifier.s.sol index 7306c615c2..c17a09ebb6 100644 --- a/packages/protocol/script/DeploySP1Verifier.s.sol +++ b/packages/protocol/script/layer1/DeploySP1Verifier.s.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import { SP1Verifier as SP1Verifier120rc } from "@sp1-contracts/src/v1.2.0-rc/SP1VerifierPlonk.sol"; -import "../test/DeployCapability.sol"; -import "../contracts/verifiers/SP1Verifier.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/verifiers/SP1Verifier.sol"; contract DeploySP1Verifier is DeployCapability { uint256 public deployerPrivKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/DeployTaikoToken.s.sol b/packages/protocol/script/layer1/DeployTaikoToken.s.sol similarity index 87% rename from packages/protocol/script/DeployTaikoToken.s.sol rename to packages/protocol/script/layer1/DeployTaikoToken.s.sol index 5513431201..fafcebd8cc 100644 --- a/packages/protocol/script/DeployTaikoToken.s.sol +++ b/packages/protocol/script/layer1/DeployTaikoToken.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/tko/TaikoToken.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer1/token/TaikoToken.sol"; contract DeployTaikoToken is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/SendMessageToDelegateOwner.s.sol b/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol similarity index 91% rename from packages/protocol/script/SendMessageToDelegateOwner.s.sol rename to packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol index d90e0ade26..f202a1bd86 100644 --- a/packages/protocol/script/SendMessageToDelegateOwner.s.sol +++ b/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Script.sol"; -import "../contracts/L2/DelegateOwner.sol"; -import "../contracts/bridge/IBridge.sol"; -import "../test/thirdparty/Multicall3.sol"; +import "../../contracts/shared/bridge/IBridge.sol"; +import "../../contracts/layer2/DelegateOwner.sol"; +import "../../test/shared/thirdparty/Multicall3.sol"; contract SendMessageToDelegateOwner is Script { address public delegateOwner = 0x5995941Df88F30Ac140515AA39832db963E2f863; diff --git a/packages/protocol/script/SetDcapParams.s.sol b/packages/protocol/script/layer1/SetDcapParams.s.sol similarity index 96% rename from packages/protocol/script/SetDcapParams.s.sol rename to packages/protocol/script/layer1/SetDcapParams.s.sol index 3429e816b3..411c322e52 100644 --- a/packages/protocol/script/SetDcapParams.s.sol +++ b/packages/protocol/script/layer1/SetDcapParams.s.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Script.sol"; import "forge-std/src/console2.sol"; -import "../test/automata-attestation/common/AttestationBase.t.sol"; +import "../../test/layer1/automata-attestation/common/AttestationBase.t.sol"; contract SetDcapParams is Script, AttestationBase { uint256 public ownerPrivateKey = vm.envUint("PRIVATE_KEY"); // Owner of the attestation contract diff --git a/packages/protocol/script/config_dcap_sgx_verifier.sh b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh similarity index 99% rename from packages/protocol/script/config_dcap_sgx_verifier.sh rename to packages/protocol/script/layer1/config_dcap_sgx_verifier.sh index 98874c1ae9..4043f5f8ae 100755 --- a/packages/protocol/script/config_dcap_sgx_verifier.sh +++ b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh @@ -63,7 +63,7 @@ toggle_check=0 vm_file_path() { local file_path="$1" local parent_dir=$(dirname "$file_path") - local trimmed_path="/test/automata-attestation/assets/$(basename "$parent_dir")/$(basename "$file_path")" + local trimmed_path="/test/layer1/automata-attestation/assets/$(basename "$parent_dir")/$(basename "$file_path")" echo "$trimmed_path" } diff --git a/packages/protocol/script/test_deploy_on_l1.sh b/packages/protocol/script/layer1/deploy_protocol_on_l1.sh similarity index 84% rename from packages/protocol/script/test_deploy_on_l1.sh rename to packages/protocol/script/layer1/deploy_protocol_on_l1.sh index c4df51742f..b225c2279a 100755 --- a/packages/protocol/script/test_deploy_on_l1.sh +++ b/packages/protocol/script/layer1/deploy_protocol_on_l1.sh @@ -1,6 +1,6 @@ #!/bin/sh -# This script is only used by `pnpm test:deploy`. +# This script is only used by `pnpm test:deploy:l1`. set -e export PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 @@ -13,7 +13,7 @@ L2_SIGNAL_SERVICE=0x1000777700000000000000000000000000000007 \ CONTRACT_OWNER=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \ PROVER_SET_ADMIN=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \ TAIKO_TOKEN_PREMINT_RECIPIENT=0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 \ -TAIKO_TOKEN_NAME="Taiko Token Katla" \ +TAIKO_TOKEN_NAME="Taiko Token Test" \ TAIKO_TOKEN_SYMBOL=TTKOk \ SHARED_ADDRESS_MANAGER=0x0000000000000000000000000000000000000000 \ L2_GENESIS_HASH=0xee1950562d42f0da28bd4550d88886bc90894c77c9c9eaefef775d4c8223f259 \ @@ -22,7 +22,8 @@ PAUSE_BRIDGE=true \ NUM_MIN_MAJORITY_GUARDIANS=7 \ NUM_MIN_MINORITY_GUARDIANS=2 \ TIER_PROVIDER="devnet" \ -forge script script/DeployOnL1.s.sol:DeployOnL1 \ +FOUNDRY_PROFILE="layer1" \ +forge script ./script/layer1/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \ --fork-url http://localhost:8545 \ --broadcast \ --ffi \ @@ -34,8 +35,9 @@ export PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f SECURITY_COUNCIL=0x60997970C51812dc3A010C7d01b50e0d17dc79C8 \ TAIKO_TOKEN_PREMINT_RECIPIENT=0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 \ TAIKO_TOKEN_NAME="Taiko Token" \ -TAIKO_TOKEN_SYMBOL=TTKO \ -forge script script/DeployTaikoToken.s.sol:DeployTaikoToken \ +TAIKO_TOKEN_SYMBOL=TAIKO \ +FOUNDRY_PROFILE="layer1" \ +forge script ./script/layer1/DeployTaikoToken.s.sol:DeployTaikoToken \ --fork-url http://localhost:8545 \ --broadcast \ --ffi \ diff --git a/packages/protocol/script/tokenunlock/Deploy.data.json b/packages/protocol/script/layer1/tokenunlock/Deploy.data.json similarity index 100% rename from packages/protocol/script/tokenunlock/Deploy.data.json rename to packages/protocol/script/layer1/tokenunlock/Deploy.data.json diff --git a/packages/protocol/script/tokenunlock/Deploy.s.sol b/packages/protocol/script/layer1/tokenunlock/Deploy.s.sol similarity index 92% rename from packages/protocol/script/tokenunlock/Deploy.s.sol rename to packages/protocol/script/layer1/tokenunlock/Deploy.s.sol index 14200c9ab2..2b13bec09d 100644 --- a/packages/protocol/script/tokenunlock/Deploy.s.sol +++ b/packages/protocol/script/layer1/tokenunlock/Deploy.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../test/DeployCapability.sol"; -import "../../contracts/team/tokenunlock/TokenUnlock.sol"; +import "../../../test/shared/DeployCapability.sol"; +import "../../../contracts/layer1/team/tokenunlock/TokenUnlock.sol"; contract DeployTokenUnlock is DeployCapability { using stdJson for string; diff --git a/packages/protocol/script/tokenunlock/Vest.data.json b/packages/protocol/script/layer1/tokenunlock/Vest.data.json similarity index 100% rename from packages/protocol/script/tokenunlock/Vest.data.json rename to packages/protocol/script/layer1/tokenunlock/Vest.data.json diff --git a/packages/protocol/script/tokenunlock/Vest.s.sol b/packages/protocol/script/layer1/tokenunlock/Vest.s.sol similarity index 95% rename from packages/protocol/script/tokenunlock/Vest.s.sol rename to packages/protocol/script/layer1/tokenunlock/Vest.s.sol index 1b146bfecc..9b7a7285a0 100644 --- a/packages/protocol/script/tokenunlock/Vest.s.sol +++ b/packages/protocol/script/layer1/tokenunlock/Vest.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Script.sol"; import "forge-std/src/console2.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "../../contracts/team/tokenunlock/TokenUnlock.sol"; +import "../../../contracts/layer1/team/tokenunlock/TokenUnlock.sol"; contract VestTokenUnlock is Script { using stdJson for string; diff --git a/packages/protocol/script/tokenunlock/exercise1.data.json b/packages/protocol/script/layer1/tokenunlock/exercise1.data.json similarity index 100% rename from packages/protocol/script/tokenunlock/exercise1.data.json rename to packages/protocol/script/layer1/tokenunlock/exercise1.data.json diff --git a/packages/protocol/script/DeployL2DelegateOwner.s.sol b/packages/protocol/script/layer2/DeployDelegateOwner.s.sol similarity index 77% rename from packages/protocol/script/DeployL2DelegateOwner.s.sol rename to packages/protocol/script/layer2/DeployDelegateOwner.s.sol index 93621c025a..ad07e0970b 100644 --- a/packages/protocol/script/DeployL2DelegateOwner.s.sol +++ b/packages/protocol/script/layer2/DeployDelegateOwner.s.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/L2/DelegateOwner.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/layer2/DelegateOwner.sol"; -// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/DeployL2DelegateOwner.s.sol -contract DeployL2DelegateOwner is DeployCapability { +// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/DeployDelegateOwner.s.sol +contract DeployDelegateOwner is DeployCapability { address public l2Sam = 0x1670000000000000000000000000000000000006; address public testAccount2 = 0x3c181965C5cFAE61a9010A283e5e0C1445649810; // owned by Daniel W diff --git a/packages/protocol/script/L2PostGenesisConfig.s.sol b/packages/protocol/script/layer2/PostGenesisConfig.s.sol similarity index 93% rename from packages/protocol/script/L2PostGenesisConfig.s.sol rename to packages/protocol/script/layer2/PostGenesisConfig.s.sol index 46390b5854..1c59866f9f 100644 --- a/packages/protocol/script/L2PostGenesisConfig.s.sol +++ b/packages/protocol/script/layer2/PostGenesisConfig.s.sol @@ -1,20 +1,20 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Script.sol"; import "forge-std/src/console2.sol"; -import "../contracts/tokenvault/ERC20Vault.sol"; -import "../contracts/bridge/Bridge.sol"; -import "../contracts/common/AddressManager.sol"; +import "../../contracts/shared/tokenvault/ERC20Vault.sol"; +import "../../contracts/shared/bridge/Bridge.sol"; +import "../../contracts/shared/common/AddressManager.sol"; interface USDCProxy { function configureMinter(address minter, uint256 minterAllowedAmount) external; } // Run with: -// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/L2PostGenesisConfig.s.sol -contract L2PostGenesisConfig is Script { +// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/PostGenesisConfig.s.sol +contract PostGenesisConfig is Script { // All following addresses are L2 addresses address public bridgedTKO = 0xA9d23408b9bA935c230493c40C73824Df71A0975; address public bridgedUSDC = 0x07d83526730c7438048D55A4fc0b850e2aaB6f0b; diff --git a/packages/protocol/script/L2PostGenesisQuery.s.sol b/packages/protocol/script/layer2/PostGenesisQuery.s.sol similarity index 92% rename from packages/protocol/script/L2PostGenesisQuery.s.sol rename to packages/protocol/script/layer2/PostGenesisQuery.s.sol index b69999229b..7c8882f9ed 100644 --- a/packages/protocol/script/L2PostGenesisQuery.s.sol +++ b/packages/protocol/script/layer2/PostGenesisQuery.s.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/common/AddressManager.sol"; -import "../contracts/bridge/Bridge.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/shared/common/AddressManager.sol"; +import "../../contracts/shared/bridge/Bridge.sol"; // Run with: -// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/L2PostGenesisQuery.s.sol -contract L2PostGenesisQuery is DeployCapability { +// forge script --rpc-url https://rpc.mainnet.taiko.xyz script/PostGenesisQuery.s.sol +contract PostGenesisQuery is DeployCapability { uint64 taiko_id = 167_000; function run() external view { diff --git a/packages/protocol/script/merge_contracts.py b/packages/protocol/script/merge_contracts.py deleted file mode 100644 index 7722d5d5eb..0000000000 --- a/packages/protocol/script/merge_contracts.py +++ /dev/null @@ -1,27 +0,0 @@ -import os -import argparse - -def merge_solidity_files(root_dir, output_file='../out/taiko_protocol.md'): - with open(output_file, 'w') as outfile: - for subdir, dirs, files in os.walk(root_dir): - for file in files: - if file.endswith('.sol') and not file.endswith('.t.sol'): - file_path = os.path.join(subdir, file) - if "/test/" in file_path: - continue - print("merging ", file_path) - relative_path = os.path.relpath(file_path, root_dir) - outfile.write(f"## {relative_path}\n") - outfile.write("```solidity\n") - with open(file_path, 'r') as infile: - outfile.write(infile.read()) - outfile.write("\n```\n\n") - - -if __name__ == "__main__": - # parser = argparse.ArgumentParser(description="Merge Solidity files into a Markdown file.") - # parser.add_argument("root_dir", type=str, help="Root directory containing Solidity files") - # args = parser.parse_args() - # merge_solidity_files(args.root_dir) - merge_solidity_files("../contracts") - print("merged into ../out/taiko_protocol.md") diff --git a/packages/protocol/script/AuthorizeTaikoForMultihop.s.sol b/packages/protocol/script/shared/AuthorizeTaikoForMultihop.s.sol similarity index 83% rename from packages/protocol/script/AuthorizeTaikoForMultihop.s.sol rename to packages/protocol/script/shared/AuthorizeTaikoForMultihop.s.sol index bd236c699b..db7b01f427 100644 --- a/packages/protocol/script/AuthorizeTaikoForMultihop.s.sol +++ b/packages/protocol/script/shared/AuthorizeTaikoForMultihop.s.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; -import "../contracts/signal/SignalService.sol"; +import "../../test/shared/DeployCapability.sol"; +import "../../contracts/shared/signal/SignalService.sol"; contract AuthorizeTaikoForMultihop is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/SetAddress.s.sol b/packages/protocol/script/shared/SetAddress.s.sol similarity index 91% rename from packages/protocol/script/SetAddress.s.sol rename to packages/protocol/script/shared/SetAddress.s.sol index 8a4f4e0432..422b061f49 100644 --- a/packages/protocol/script/SetAddress.s.sol +++ b/packages/protocol/script/shared/SetAddress.s.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Script.sol"; import "forge-std/src/console2.sol"; -import "../contracts/common/AddressManager.sol"; +import "../../contracts/shared/common/AddressManager.sol"; contract SetAddress is Script { uint256 public adminPrivateKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/SetRemoteBridgeSuites.s.sol b/packages/protocol/script/shared/SetRemoteBridgeSuites.s.sol similarity index 96% rename from packages/protocol/script/SetRemoteBridgeSuites.s.sol rename to packages/protocol/script/shared/SetRemoteBridgeSuites.s.sol index 03a65c7b79..5240e50360 100644 --- a/packages/protocol/script/SetRemoteBridgeSuites.s.sol +++ b/packages/protocol/script/shared/SetRemoteBridgeSuites.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../test/DeployCapability.sol"; +import "../../test/shared/DeployCapability.sol"; contract SetRemoteBridgeSuites is DeployCapability { uint256 public privateKey = vm.envUint("PRIVATE_KEY"); diff --git a/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol b/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol deleted file mode 100644 index 7836043b2e..0000000000 --- a/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/common/AddressManager.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeAddressManager is UpgradeScript { - function run() external setUp { - upgrade("AddressManager", address(new AddressManager())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeBridge.s.sol b/packages/protocol/script/upgrade/UpgradeBridge.s.sol deleted file mode 100644 index ccd9265ec4..0000000000 --- a/packages/protocol/script/upgrade/UpgradeBridge.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/bridge/Bridge.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeBridge is UpgradeScript { - function run() external setUp { - upgrade("Bridge", address(new Bridge())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol deleted file mode 100644 index 94977d34fd..0000000000 --- a/packages/protocol/script/upgrade/UpgradeERC1155Vault.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/tokenvault/ERC1155Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC1155Vault is UpgradeScript { - function run() external setUp { - upgrade("ERC1155Vault", address(new ERC1155Vault())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol deleted file mode 100644 index 7e15feda85..0000000000 --- a/packages/protocol/script/upgrade/UpgradeERC20Vault.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/tokenvault/ERC20Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC20Vault is UpgradeScript { - function run() external setUp { - upgrade("ERC20Vault", address(new ERC20Vault())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol b/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol deleted file mode 100644 index dd7d053f28..0000000000 --- a/packages/protocol/script/upgrade/UpgradeERC721Vault.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/tokenvault/ERC721Vault.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeERC721Vault is UpgradeScript { - function run() external setUp { - upgrade("ERC721Vault", address(new ERC721Vault())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeGuardianProver.s.sol b/packages/protocol/script/upgrade/UpgradeGuardianProver.s.sol deleted file mode 100644 index 0065cf2487..0000000000 --- a/packages/protocol/script/upgrade/UpgradeGuardianProver.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/L1/provers/GuardianProver.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeGuardianProver is UpgradeScript { - function run() external setUp { - upgrade("GuardianProver", address(new GuardianProver())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeProverSet.s.sol b/packages/protocol/script/upgrade/UpgradeProverSet.s.sol deleted file mode 100644 index c725614e59..0000000000 --- a/packages/protocol/script/upgrade/UpgradeProverSet.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/team/proving/ProverSet.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeProverSet is UpgradeScript { - function run() external setUp { - upgrade("ProverSet", address(new ProverSet())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeRisc0Verifier.s.sol b/packages/protocol/script/upgrade/UpgradeRisc0Verifier.s.sol deleted file mode 100644 index 7276db5d4d..0000000000 --- a/packages/protocol/script/upgrade/UpgradeRisc0Verifier.s.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; - -import "./UpgradeScript.s.sol"; -import "../../contracts/verifiers/Risc0Verifier.sol"; - -contract UpgradeRisc0Verifier is UpgradeScript { - function run() external setUp { - upgrade("Risc0Verifier", address(new Risc0Verifier())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeScript.s.sol b/packages/protocol/script/upgrade/UpgradeScript.s.sol deleted file mode 100644 index ef3cb45cc2..0000000000 --- a/packages/protocol/script/upgrade/UpgradeScript.s.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol"; - -import "forge-std/src/console2.sol"; -import "forge-std/src/Script.sol"; - -contract UpgradeScript is Script { - uint256 public privateKey = vm.envUint("PRIVATE_KEY"); - address public proxyAddress = vm.envAddress("PROXY_ADDRESS"); - - UUPSUpgradeable proxy; - - modifier setUp() { - require(privateKey != 0, "PRIVATE_KEY not set"); - require(proxyAddress != address(0), "PROXY_ADDRESS not set"); - - proxy = UUPSUpgradeable(payable(proxyAddress)); - vm.startBroadcast(privateKey); - - _; - - vm.stopBroadcast(); - } - - function upgrade(string memory name, address newImpl) public { - console2.log("Upgrading", name, proxyAddress); - proxy.upgradeTo(newImpl); - console2.log("Upgraded", proxyAddress, "to", newImpl); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeSignalService.s.sol b/packages/protocol/script/upgrade/UpgradeSignalService.s.sol deleted file mode 100644 index f0b9ca7e69..0000000000 --- a/packages/protocol/script/upgrade/UpgradeSignalService.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; -import "../../contracts/signal/SignalService.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeSignalService is UpgradeScript { - function run() external setUp { - upgrade("SignalService", address(new SignalService())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol deleted file mode 100644 index c0472ab2cb..0000000000 --- a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "forge-std/src/Script.sol"; -import "forge-std/src/console2.sol"; - -import "../../contracts/hekla/HeklaTaikoL1.sol"; -import "./UpgradeScript.s.sol"; - -contract UpgradeTaikoL1 is UpgradeScript { - function run() external setUp { - upgrade("HeklaTaikoL1", address(new HeklaTaikoL1())); - } -} diff --git a/packages/protocol/script/upgrade/UpgradeTierProvider.s.sol b/packages/protocol/script/upgrade/UpgradeTierProvider.s.sol deleted file mode 100644 index 4b6d9b03fb..0000000000 --- a/packages/protocol/script/upgrade/UpgradeTierProvider.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; - -import "../../test/DeployCapability.sol"; -import "../../test/L1/TestTierProvider.sol"; - -contract UpgradeTierProvider is DeployCapability { - uint256 public privateKey = vm.envUint("PRIVATE_KEY"); - address public addressManager = vm.envAddress("ADDRESS_MANAGER_ADDRESS"); - - function run() external { - vm.startBroadcast(privateKey); - address impl = address(new TestTierProvider()); - AddressManager(addressManager).setAddress(uint64(block.chainid), "tier_provider", impl); - vm.stopBroadcast(); - console2.log("> tier_provider@", addressManager); - console2.log("\t addr : ", impl); - } -} diff --git a/packages/protocol/script/upgrade_to.sh b/packages/protocol/script/upgrade_to.sh deleted file mode 100755 index 59c920490f..0000000000 --- a/packages/protocol/script/upgrade_to.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e -: "${FORK_URL:=http://localhost:8545}" - -forge script script/upgrade/Upgrade$CONTRACT.s.sol:Upgrade$CONTRACT \ - --fork-url $FORK_URL \ - -vvvvv \ - --broadcast \ - --ffi \ diff --git a/packages/protocol/genesis/GenerateGenesis.g.sol b/packages/protocol/test/genesis/GenerateGenesis.g.sol similarity index 91% rename from packages/protocol/genesis/GenerateGenesis.g.sol rename to packages/protocol/test/genesis/GenerateGenesis.g.sol index 81664dc4b1..4140409b79 100644 --- a/packages/protocol/genesis/GenerateGenesis.g.sol +++ b/packages/protocol/test/genesis/GenerateGenesis.g.sol @@ -1,25 +1,25 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/console2.sol"; import "forge-std/src/StdJson.sol"; import "forge-std/src/Test.sol"; -import "../contracts/common/AddressManager.sol"; -import "../contracts/bridge/Bridge.sol"; -import "../contracts/tokenvault/ERC1155Vault.sol"; -import "../contracts/tokenvault/ERC20Vault.sol"; -import "../contracts/tokenvault/ERC721Vault.sol"; -import "../contracts/signal/SignalService.sol"; -import "../contracts/L2/TaikoL2.sol"; -import "../test/common/erc20/RegularERC20.sol"; +import "../../contracts/shared/common/AddressManager.sol"; +import "../../contracts/shared/bridge/Bridge.sol"; +import "../../contracts/shared/tokenvault/ERC1155Vault.sol"; +import "../../contracts/shared/tokenvault/ERC20Vault.sol"; +import "../../contracts/shared/tokenvault/ERC721Vault.sol"; +import "../../contracts/shared/signal/SignalService.sol"; +import "../../contracts/layer2/based/TaikoL2.sol"; +import "../shared/token/RegularERC20.sol"; contract TestGenerateGenesis is Test, AddressResolver { using stdJson for string; string private configJSON = - vm.readFile(string.concat(vm.projectRoot(), "/deployments/genesis_config.json")); + vm.readFile(string.concat(vm.projectRoot(), "/test/genesis/data/genesis_config.json")); string private genesisAllocJSON = - vm.readFile(string.concat(vm.projectRoot(), "/deployments/genesis_alloc.json")); + vm.readFile(string.concat(vm.projectRoot(), "/test/genesis/data/genesis_alloc.json")); address private contractOwner = configJSON.readAddress(".contractOwner"); uint256 private l1ChainId = configJSON.readUint(".l1ChainId"); @@ -272,7 +272,11 @@ contract TestGenerateGenesis is Test, AddressResolver { assertEq(regularERC20.symbol(), "RGL"); } - function getPredeployedContractAddress(string memory contractName) private view returns (address) { + function getPredeployedContractAddress(string memory contractName) + private + view + returns (address) + { return configJSON.readAddress(string.concat(".contractAddresses.", contractName)); } @@ -284,20 +288,11 @@ contract TestGenerateGenesis is Test, AddressResolver { assertEq(address(contractAddress).code, vm.parseBytes(deployedCode)); } - function checkProxyImplementation( - string memory proxyName - ) - private - { - return checkProxyImplementation(proxyName, contractOwner); + function checkProxyImplementation(string memory proxyName) private { + return checkProxyImplementation(proxyName, contractOwner); } - function checkProxyImplementation( - string memory proxyName, - address owner - ) - private - { + function checkProxyImplementation(string memory proxyName, address owner) private { vm.startPrank(owner); // address contractAddress = getPredeployedContractAddress(contractName); address proxyAddress = getPredeployedContractAddress(proxyName); diff --git a/packages/protocol/test/genesis/data/genesis_config.js b/packages/protocol/test/genesis/data/genesis_config.js new file mode 100644 index 0000000000..df60b5b536 --- /dev/null +++ b/packages/protocol/test/genesis/data/genesis_config.js @@ -0,0 +1,61 @@ +"use strict"; +const ADDRESS_LENGTH = 40; + +module.exports = { + // Owner address of the pre-deployed L2 contracts. + contractOwner: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", + l1ChainId: 1, + // Chain ID of the Taiko L2 network. + chainId: 167, + // Account address and pre-mint ETH amount as key-value pairs. + seedAccounts: [ + { "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": 1000 }, + { "0x79fcdef22feed20eddacbb2587640e45491b757f": 1000 }, + ], + // Owner Chain ID, Security Council, and Timelock Controller + l1ChainId: 31337, + ownerSecurityCouncil: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", + ownerTimelockController: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", + get contractAddresses() { + return { + // ============ Implementations ============ + // Shared Contracts + BridgeImpl: getConstantAddress(`0${this.chainId}`, 1), + ERC20VaultImpl: getConstantAddress(`0${this.chainId}`, 2), + ERC721VaultImpl: getConstantAddress(`0${this.chainId}`, 3), + ERC1155VaultImpl: getConstantAddress(`0${this.chainId}`, 4), + SignalServiceImpl: getConstantAddress(`0${this.chainId}`, 5), + SharedAddressManagerImpl: getConstantAddress(`0${this.chainId}`, 6), + BridgedERC20Impl: getConstantAddress(`0${this.chainId}`, 10096), + BridgedERC721Impl: getConstantAddress(`0${this.chainId}`, 10097), + BridgedERC1155Impl: getConstantAddress(`0${this.chainId}`, 10098), + RegularERC20: getConstantAddress(`0${this.chainId}`, 10099), + // Rollup Contracts + TaikoL2Impl: getConstantAddress(`0${this.chainId}`, 10001), + RollupAddressManagerImpl: getConstantAddress(`0${this.chainId}`, 10002), + // ============ Proxies ============ + // Shared Contracts + Bridge: getConstantAddress(this.chainId, 1), + ERC20Vault: getConstantAddress(this.chainId, 2), + ERC721Vault: getConstantAddress(this.chainId, 3), + ERC1155Vault: getConstantAddress(this.chainId, 4), + SignalService: getConstantAddress(this.chainId, 5), + SharedAddressManager: getConstantAddress(this.chainId, 6), + // Rollup Contracts + TaikoL2: getConstantAddress(this.chainId, 10001), + RollupAddressManager: getConstantAddress(this.chainId, 10002), + }; + }, + // L2 EIP-1559 baseFee calculation related fields. + param1559: { + gasExcess: 1, + }, + // Option to pre-deploy an ERC-20 token. + predeployERC20: true, +}; + +function getConstantAddress(prefix, suffix) { + return `0x${prefix}${"0".repeat( + ADDRESS_LENGTH - String(prefix).length - String(suffix).length, + )}${suffix}`; +} diff --git a/packages/protocol/utils/generate_genesis/erc20.ts b/packages/protocol/test/genesis/generate/erc20.ts similarity index 97% rename from packages/protocol/utils/generate_genesis/erc20.ts rename to packages/protocol/test/genesis/generate/erc20.ts index 1d08dd69ec..d85c266c1e 100644 --- a/packages/protocol/utils/generate_genesis/erc20.ts +++ b/packages/protocol/test/genesis/generate/erc20.ts @@ -1,7 +1,7 @@ import { ethers } from "ethers"; import { Result } from "./interface"; const path = require("path"); -const ARTIFACTS_PATH = path.join(__dirname, "../../out"); +const ARTIFACTS_PATH = path.join(__dirname, "../../../out/layer2"); const { computeStorageSlots, getStorageLayout } = require("./utils"); export const TOKEN_NAME = "RegularERC20"; diff --git a/packages/protocol/utils/generate_genesis/main.ts b/packages/protocol/test/genesis/generate/generate.ts similarity index 82% rename from packages/protocol/utils/generate_genesis/main.ts rename to packages/protocol/test/genesis/generate/generate.ts index a792c95a1c..2462397624 100644 --- a/packages/protocol/utils/generate_genesis/main.ts +++ b/packages/protocol/test/genesis/generate/generate.ts @@ -4,20 +4,11 @@ const path = require("path"); const { ethers } = require("ethers"); const { deployTaikoL2 } = require("./taikoL2"); const { deployERC20 } = require("./erc20"); +const config: Config = require("../data/genesis_config.js"); // Generate a L2 genesis JSON based on the given configurations. // ref: https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html async function main() { - if (process.argv.length < 3) { - throw new Error("missing config json"); - } - - const config: Config = require( - path.isAbsolute(process.argv[2]) - ? process.argv[2] - : path.join(process.cwd(), process.argv[2]), - ); - const contractOwner = config.contractOwner; const chainId = config.chainId; const seedAccounts = config.seedAccounts; @@ -60,16 +51,13 @@ async function main() { result = await deployERC20(config, result); } - const allocSavedPath = path.join( - __dirname, - "../../deployments/genesis_alloc.json", - ); + const allocSavedPath = path.join(__dirname, "../data/genesis_alloc.json"); fs.writeFileSync(allocSavedPath, JSON.stringify(result.alloc, null, 2)); const layoutSavedPath = path.join( __dirname, - "../../deployments/genesis_storage_layout.json", + "../data/genesis_storage_layout.json", ); fs.writeFileSync( @@ -79,7 +67,7 @@ async function main() { const configJsonSavedPath = path.join( __dirname, - "../../deployments/genesis_config.json", + "../data/genesis_config.json", ); fs.writeFileSync(configJsonSavedPath, JSON.stringify(config)); diff --git a/packages/protocol/utils/generate_genesis/interface.ts b/packages/protocol/test/genesis/generate/interface.ts similarity index 100% rename from packages/protocol/utils/generate_genesis/interface.ts rename to packages/protocol/test/genesis/generate/interface.ts diff --git a/packages/protocol/utils/generate_genesis/taikoL2.ts b/packages/protocol/test/genesis/generate/taikoL2.ts similarity index 99% rename from packages/protocol/utils/generate_genesis/taikoL2.ts rename to packages/protocol/test/genesis/generate/taikoL2.ts index 30d33fedd4..48e7979c01 100644 --- a/packages/protocol/utils/generate_genesis/taikoL2.ts +++ b/packages/protocol/test/genesis/generate/taikoL2.ts @@ -4,7 +4,7 @@ const { ethers } = require("ethers"); // eslint-disable-next-line node/no-extraneous-require const linker = require("solc/linker"); const { computeStorageSlots, getStorageLayout } = require("./utils"); -const ARTIFACTS_PATH = path.join(__dirname, "../../out"); +const ARTIFACTS_PATH = path.join(__dirname, "../../../out/layer2"); const IMPLEMENTATION_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; diff --git a/packages/protocol/utils/generate_genesis/utils.ts b/packages/protocol/test/genesis/generate/utils.ts similarity index 99% rename from packages/protocol/utils/generate_genesis/utils.ts rename to packages/protocol/test/genesis/generate/utils.ts index 96e1adcf0f..c84f98616a 100644 --- a/packages/protocol/utils/generate_genesis/utils.ts +++ b/packages/protocol/test/genesis/generate/utils.ts @@ -43,7 +43,7 @@ export interface SolidityStorageLayout { export async function getStorageLayout( name: string, ): Promise { - const artifact = require(`../../out/${name}.sol/${name}.json`); + const artifact = require(`../../../out/layer2/${name}.sol/${name}.json`); if (!("storageLayout" in artifact)) { throw new Error(`Storage layout for ${name} not found.`); } diff --git a/packages/protocol/genesis/generate_genesis.test.sh b/packages/protocol/test/genesis/genesis.test.sh similarity index 87% rename from packages/protocol/genesis/generate_genesis.test.sh rename to packages/protocol/test/genesis/genesis.test.sh index 97d3c848da..a0046e1b91 100755 --- a/packages/protocol/genesis/generate_genesis.test.sh +++ b/packages/protocol/test/genesis/genesis.test.sh @@ -14,8 +14,8 @@ if ! docker info > /dev/null 2>&1; then exit 1 fi -GENESIS_JSON=$(cd "$(dirname "$DIR/../..")"; pwd)/deployments/genesis.json -TESTNET_CONFIG=$DIR/testnet/docker-compose.yml +GENESIS_JSON="$DIR/data/genesis.json" +TESTNET_CONFIG="$DIR/testnet/docker-compose.yml" touch "$GENESIS_JSON" @@ -48,13 +48,13 @@ echo ' echo "Starting generate_genesis tests..." # compile the contracts to get latest bytecode -rm -rf out && pnpm compile +rm -rf out && pnpm compile:genesis # run the task -pnpm run generate:genesis $DIR/test_config.js +pnpm run genesis:gen $DIR/test_config.js # generate complete genesis json -cat "$DIR"/../deployments/genesis_alloc.json >> "$GENESIS_JSON" +cat "$DIR/data/genesis_alloc.json" >> "$GENESIS_JSON" echo '}' >> "$GENESIS_JSON" @@ -88,11 +88,11 @@ function waitTestNode { waitTestNode http://localhost:18545 -forge test \ +FOUNDRY_PROFILE=genesis forge test \ -vvv \ --gas-report \ --fork-url http://localhost:18545 \ --fork-retry-backoff 120 \ --no-storage-caching \ - --match-path genesis/*.g.sol \ + --match-path test/genesis/GenerateGenesis.g.sol \ --block-gas-limit 1000000000 diff --git a/packages/protocol/genesis/mainnet.js b/packages/protocol/test/genesis/mainnet.js similarity index 100% rename from packages/protocol/genesis/mainnet.js rename to packages/protocol/test/genesis/mainnet.js diff --git a/packages/protocol/genesis/test_config.js b/packages/protocol/test/genesis/test_config.js similarity index 99% rename from packages/protocol/genesis/test_config.js rename to packages/protocol/test/genesis/test_config.js index 4363719364..8b67ec687b 100644 --- a/packages/protocol/genesis/test_config.js +++ b/packages/protocol/test/genesis/test_config.js @@ -110,7 +110,7 @@ module.exports = { }; }, param1559: { - gasExcess: 20000000000, + gasExcess: 0, }, predeployERC20: true, }; diff --git a/packages/protocol/genesis/testnet/docker-compose.yml b/packages/protocol/test/genesis/testnet/docker-compose.yml similarity index 79% rename from packages/protocol/genesis/testnet/docker-compose.yml rename to packages/protocol/test/genesis/testnet/docker-compose.yml index 069d744f36..745f43de92 100644 --- a/packages/protocol/genesis/testnet/docker-compose.yml +++ b/packages/protocol/test/genesis/testnet/docker-compose.yml @@ -1,11 +1,9 @@ -version: "3.9" - services: geth: image: ethereum/client-go:v1.13.14 restart: unless-stopped volumes: - - ../../deployments:/data + - ../data:/data - .:/host ports: - 18545:8545 diff --git a/packages/protocol/genesis/testnet/init_geth.sh b/packages/protocol/test/genesis/testnet/init_geth.sh similarity index 100% rename from packages/protocol/genesis/testnet/init_geth.sh rename to packages/protocol/test/genesis/testnet/init_geth.sh diff --git a/packages/protocol/genesis/testnet/keyfile.json b/packages/protocol/test/genesis/testnet/keyfile.json similarity index 100% rename from packages/protocol/genesis/testnet/keyfile.json rename to packages/protocol/test/genesis/testnet/keyfile.json diff --git a/packages/protocol/genesis/testnet/password b/packages/protocol/test/genesis/testnet/password similarity index 100% rename from packages/protocol/genesis/testnet/password rename to packages/protocol/test/genesis/testnet/password diff --git a/packages/protocol/test/layer1/TaikoL1Test.sol b/packages/protocol/test/layer1/TaikoL1Test.sol new file mode 100644 index 0000000000..d83f508cf0 --- /dev/null +++ b/packages/protocol/test/layer1/TaikoL1Test.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "../../contracts/layer1/based/TaikoL1.sol"; +import "../../contracts/layer1/token/TaikoToken.sol"; +import "../../contracts/layer1/verifiers/SgxVerifier.sol"; +import "../../contracts/layer1/verifiers/SP1Verifier.sol"; +import "../../contracts/layer1/verifiers/Risc0Verifier.sol"; +import "../../contracts/layer1/provers/GuardianProver.sol"; +import "../../contracts/layer1/team/airdrop/ERC20Airdrop.sol"; +import "../../contracts/shared/bridge/QuotaManager.sol"; +import "../layer1/based/TestTierProvider.sol"; +import "../shared/TaikoTest.sol"; + +abstract contract TaikoL1Test is TaikoTest { } diff --git a/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol b/packages/protocol/test/layer1/automata-attestation/AutomataDcapV3AttestationTest.t.sol similarity index 99% rename from packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol rename to packages/protocol/test/layer1/automata-attestation/AutomataDcapV3AttestationTest.t.sol index 6ec3632126..148cae8a13 100644 --- a/packages/protocol/test/automata-attestation/AutomataDcapV3AttestationTest.t.sol +++ b/packages/protocol/test/layer1/automata-attestation/AutomataDcapV3AttestationTest.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Test.sol"; import "forge-std/src/console.sol"; @@ -10,7 +10,7 @@ contract AutomataDcapV3AttestationTest is Test, AttestationBase { using BytesUtils for bytes; using stdJson for string; - string internal v3QuoteJsonPath = "/test/automata-attestation/assets/0923/v3quote.json"; + string internal v3QuoteJsonPath = "/test/layer1/automata-attestation/assets/0923/v3quote.json"; function setUp() public { // Call the AttestationBase init setup diff --git a/packages/protocol/test/automata-attestation/assets/0424/tcb_00706A100000.json b/packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00706A100000.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0424/tcb_00706A100000.json rename to packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00706A100000.json diff --git a/packages/protocol/test/automata-attestation/assets/0424/tcb_00906ED50000.json b/packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00906ED50000.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0424/tcb_00906ED50000.json rename to packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00906ED50000.json diff --git a/packages/protocol/test/automata-attestation/assets/0424/tcb_00A067110000.json b/packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00A067110000.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0424/tcb_00A067110000.json rename to packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_00A067110000.json diff --git a/packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json b/packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_30606a000000.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0424/tcb_30606a000000.json rename to packages/protocol/test/layer1/automata-attestation/assets/0424/tcb_30606a000000.json diff --git a/packages/protocol/test/automata-attestation/assets/0923/identity.json b/packages/protocol/test/layer1/automata-attestation/assets/0923/identity.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0923/identity.json rename to packages/protocol/test/layer1/automata-attestation/assets/0923/identity.json diff --git a/packages/protocol/test/automata-attestation/assets/0923/tcb_00606A000000.json b/packages/protocol/test/layer1/automata-attestation/assets/0923/tcb_00606A000000.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0923/tcb_00606A000000.json rename to packages/protocol/test/layer1/automata-attestation/assets/0923/tcb_00606A000000.json diff --git a/packages/protocol/test/automata-attestation/assets/0923/v3quote.json b/packages/protocol/test/layer1/automata-attestation/assets/0923/v3quote.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/0923/v3quote.json rename to packages/protocol/test/layer1/automata-attestation/assets/0923/v3quote.json diff --git a/packages/protocol/test/automata-attestation/assets/complex.json b/packages/protocol/test/layer1/automata-attestation/assets/complex.json similarity index 100% rename from packages/protocol/test/automata-attestation/assets/complex.json rename to packages/protocol/test/layer1/automata-attestation/assets/complex.json diff --git a/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol b/packages/protocol/test/layer1/automata-attestation/common/AttestationBase.t.sol similarity index 93% rename from packages/protocol/test/automata-attestation/common/AttestationBase.t.sol rename to packages/protocol/test/layer1/automata-attestation/common/AttestationBase.t.sol index df72befa33..f517f7bb06 100644 --- a/packages/protocol/test/automata-attestation/common/AttestationBase.t.sol +++ b/packages/protocol/test/layer1/automata-attestation/common/AttestationBase.t.sol @@ -1,27 +1,28 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Test.sol"; import "forge-std/src/console.sol"; import "forge-std/src/StdJson.sol"; -import { P256Verifier } from "@p256-verifier/contracts/P256Verifier.sol"; - import "@optimism/packages/contracts-bedrock/src/libraries/Bytes.sol"; +import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { P256Verifier } from "@p256-verifier/contracts/P256Verifier.sol"; -import "../../../contracts/verifiers/SgxVerifier.sol"; +import "../../../../contracts/layer1/verifiers/SgxVerifier.sol"; import { AutomataDcapV3Attestation } from - "../../../contracts/automata-attestation/AutomataDcapV3Attestation.sol"; -import { SigVerifyLib } from "../../../contracts/automata-attestation/utils/SigVerifyLib.sol"; -import { PEMCertChainLib } from "../../../contracts/automata-attestation/lib/PEMCertChainLib.sol"; -import { V3Struct } from "../../../contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; -import { BytesUtils } from "../../../contracts/automata-attestation/utils/BytesUtils.sol"; + "../../../../contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol"; +import { SigVerifyLib } from + "../../../../contracts/layer1/automata-attestation/utils/SigVerifyLib.sol"; +import { PEMCertChainLib } from + "../../../../contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol"; +import { V3Struct } from + "../../../../contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; +import { BytesUtils } from "../../../../contracts/layer1/automata-attestation/utils/BytesUtils.sol"; import { Base64 } from "solady/src/utils/Base64.sol"; import "../utils/DcapTestUtils.t.sol"; import "../utils/V3QuoteParseUtils.t.sol"; -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - contract AttestationBase is Test, DcapTestUtils, V3QuoteParseUtils { using BytesUtils for bytes; using stdJson for string; @@ -34,13 +35,13 @@ contract AttestationBase is Test, DcapTestUtils, V3QuoteParseUtils { // ref: https://github.com/daimo-eth/p256-verifier //string internal rpcUrl = vm.envString("RPC_URL"); string[] internal tcbInfoPaths = [ - "/test/automata-attestation/assets/0923/tcb_00606A000000.json", - "/test/automata-attestation/assets/0424/tcb_00A067110000.json", - "/test/automata-attestation/assets/0424/tcb_00906ED50000.json", - "/test/automata-attestation/assets/0424/tcb_30606a000000.json", - "/test/automata-attestation/assets/0424/tcb_00706A100000.json" + "/test/layer1/automata-attestation/assets/0923/tcb_00606A000000.json", + "/test/layer1/automata-attestation/assets/0424/tcb_00A067110000.json", + "/test/layer1/automata-attestation/assets/0424/tcb_00906ED50000.json", + "/test/layer1/automata-attestation/assets/0424/tcb_30606a000000.json", + "/test/layer1/automata-attestation/assets/0424/tcb_00706A100000.json" ]; - string internal idPath = "/test/automata-attestation/assets/0923/identity.json"; + string internal idPath = "/test/layer1/automata-attestation/assets/0923/identity.json"; address constant admin = address(1); address constant user = 0x0926b716f6aEF52F9F3C3474A2846e1Bf1ACedf6; bytes32 mrEnclave = 0x46049af725ec3986eeb788693df7bc5f14d3f2705106a19cd09b9d89237db1a0; diff --git a/packages/protocol/test/automata-attestation/utils/DcapTestUtils.t.sol b/packages/protocol/test/layer1/automata-attestation/utils/DcapTestUtils.t.sol similarity index 96% rename from packages/protocol/test/automata-attestation/utils/DcapTestUtils.t.sol rename to packages/protocol/test/layer1/automata-attestation/utils/DcapTestUtils.t.sol index 4e0db7d01d..7ffcf22161 100644 --- a/packages/protocol/test/automata-attestation/utils/DcapTestUtils.t.sol +++ b/packages/protocol/test/layer1/automata-attestation/utils/DcapTestUtils.t.sol @@ -1,9 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import { TCBInfoStruct } from "../../../contracts/automata-attestation/lib/TCBInfoStruct.sol"; -import { EnclaveIdStruct } from "../../../contracts/automata-attestation/lib/EnclaveIdStruct.sol"; -import { V3Struct } from "../../../contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; +import { TCBInfoStruct } from + "../../../../contracts/layer1/automata-attestation/lib/TCBInfoStruct.sol"; +import { EnclaveIdStruct } from + "../../../../contracts/layer1/automata-attestation/lib/EnclaveIdStruct.sol"; +import { V3Struct } from + "../../../../contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; import { JSONParserLib } from "solady/src/utils/JSONParserLib.sol"; import { LibString } from "solady/src/utils/LibString.sol"; diff --git a/packages/protocol/test/automata-attestation/utils/V3QuoteParseUtils.t.sol b/packages/protocol/test/layer1/automata-attestation/utils/V3QuoteParseUtils.t.sol similarity index 93% rename from packages/protocol/test/automata-attestation/utils/V3QuoteParseUtils.t.sol rename to packages/protocol/test/layer1/automata-attestation/utils/V3QuoteParseUtils.t.sol index e85886a20e..f27862eef7 100644 --- a/packages/protocol/test/automata-attestation/utils/V3QuoteParseUtils.t.sol +++ b/packages/protocol/test/layer1/automata-attestation/utils/V3QuoteParseUtils.t.sol @@ -1,11 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import { V3Struct } from "../../../contracts/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; -import { V3Parser } from "../../../contracts/automata-attestation/lib/QuoteV3Auth/V3Parser.sol"; +import { V3Struct } from + "../../../../contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; +import { V3Parser } from + "../../../../contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Parser.sol"; import { IPEMCertChainLib } from - "../../../contracts/automata-attestation/lib/interfaces/IPEMCertChainLib.sol"; -import { PEMCertChainLib } from "../../../contracts/automata-attestation/lib/PEMCertChainLib.sol"; + "../../../../contracts/layer1/automata-attestation/lib/interfaces/IPEMCertChainLib.sol"; +import { PEMCertChainLib } from + "../../../../contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol"; import { Base64 } from "solady/src/utils/Base64.sol"; import { JSONParserLib } from "solady/src/utils/JSONParserLib.sol"; import { LibString } from "solady/src/utils/LibString.sol"; diff --git a/packages/protocol/test/L1/GuardianProver1.t.sol b/packages/protocol/test/layer1/based/GuardianProver1.t.sol similarity index 95% rename from packages/protocol/test/L1/GuardianProver1.t.sol rename to packages/protocol/test/layer1/based/GuardianProver1.t.sol index d62b0fceb8..3f8a7705e2 100644 --- a/packages/protocol/test/L1/GuardianProver1.t.sol +++ b/packages/protocol/test/layer1/based/GuardianProver1.t.sol @@ -1,7 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoTest.sol"; +import "../../../contracts/layer1/provers/GuardianProver.sol"; +import "../../shared/TaikoTest.sol"; contract DummyGuardianProver is GuardianProver { uint256 public operationId; diff --git a/packages/protocol/test/L1/GuardianProver2.t.sol b/packages/protocol/test/layer1/based/GuardianProver2.t.sol similarity index 95% rename from packages/protocol/test/L1/GuardianProver2.t.sol rename to packages/protocol/test/layer1/based/GuardianProver2.t.sol index 29f741e381..3fe8ee23cd 100644 --- a/packages/protocol/test/L1/GuardianProver2.t.sol +++ b/packages/protocol/test/layer1/based/GuardianProver2.t.sol @@ -1,7 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; +import "../../../contracts/layer1/provers/GuardianProver.sol"; +import "./TaikoL1TestBase.sol"; /// @author Kirk Baird contract TestGuardianProver2 is TaikoL1TestBase { diff --git a/packages/protocol/test/L1/TaikoL1.t.sol b/packages/protocol/test/layer1/based/TaikoL1.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1.t.sol rename to packages/protocol/test/layer1/based/TaikoL1.t.sol index 9450e4066a..39918e9d14 100644 --- a/packages/protocol/test/L1/TaikoL1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestBase.sol"; @@ -20,7 +20,7 @@ contract Verifier { } } -contract TaikoL1Test is TaikoL1TestBase { +contract TaikoL1Tests is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { return TaikoL1( payable( diff --git a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol b/packages/protocol/test/layer1/based/TaikoL1LibProvingWithTiers.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol rename to packages/protocol/test/layer1/based/TaikoL1LibProvingWithTiers.t.sol index e288b5aa73..cbac7074a5 100644 --- a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1LibProvingWithTiers.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestBase.sol b/packages/protocol/test/layer1/based/TaikoL1TestBase.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestBase.sol rename to packages/protocol/test/layer1/based/TaikoL1TestBase.sol index ac901d0315..f3620aaad0 100644 --- a/packages/protocol/test/L1/TaikoL1TestBase.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestBase.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoTest.sol"; +import "../TaikoL1Test.sol"; abstract contract TaikoL1TestBase is TaikoTest { AddressManager public addressManager; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup1.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup1.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol index a43feae887..7192f3b8e6 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup10.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup10.t.sol similarity index 98% rename from packages/protocol/test/L1/TaikoL1TestGroup10.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup10.t.sol index 06a2cc9b6b..c843b43e60 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup10.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup10.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup2.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup2.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol index 2a6d832040..9bb5f5cf8a 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup2.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup3.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup3.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol index 7011d8f03f..b27ffda2c9 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup3.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup4.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup4.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol index 5b0b9db085..c5850ebf3b 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup4.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup5.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup5.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol index 816d586e64..d6d1a294b2 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup5.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup6.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup6.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol index 1cdcc16110..15fa6b57fb 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup6.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup7.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup7.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol index 1bc3aa48ca..d255a89328 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup7.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup8.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup8.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup8.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup8.t.sol index e39f923bbf..ecb34e99b8 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup8.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup8.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroup9.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroup9.t.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol index 1697861291..e1aa9e67bf 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroup9.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1TestGroupBase.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroupBase.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1TestGroupBase.sol rename to packages/protocol/test/layer1/based/TaikoL1TestGroupBase.sol index 25a18c1f5a..8843b39ff8 100644 --- a/packages/protocol/test/L1/TaikoL1TestGroupBase.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroupBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1testGroupA1.t.sol b/packages/protocol/test/layer1/based/TaikoL1testGroupA1.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1testGroupA1.t.sol rename to packages/protocol/test/layer1/based/TaikoL1testGroupA1.t.sol index a0a95e2227..1aa4a34452 100644 --- a/packages/protocol/test/L1/TaikoL1testGroupA1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1testGroupA1.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TaikoL1testGroupA2.t.sol b/packages/protocol/test/layer1/based/TaikoL1testGroupA2.t.sol similarity index 99% rename from packages/protocol/test/L1/TaikoL1testGroupA2.t.sol rename to packages/protocol/test/layer1/based/TaikoL1testGroupA2.t.sol index 6e7935f31a..764a3d58b8 100644 --- a/packages/protocol/test/L1/TaikoL1testGroupA2.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1testGroupA2.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./TaikoL1TestGroupBase.sol"; diff --git a/packages/protocol/test/L1/TestTierProvider.sol b/packages/protocol/test/layer1/based/TestTierProvider.sol similarity index 90% rename from packages/protocol/test/L1/TestTierProvider.sol rename to packages/protocol/test/layer1/based/TestTierProvider.sol index 5320fa2dac..4832486357 100644 --- a/packages/protocol/test/L1/TestTierProvider.sol +++ b/packages/protocol/test/layer1/based/TestTierProvider.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../contracts/common/LibStrings.sol"; -import "../../contracts/L1/tiers/ITierProvider.sol"; -import "../../contracts/L1/tiers/LibTiers.sol"; -import "../../contracts/L1/tiers/ITierRouter.sol"; +import "../../../contracts/shared/common/LibStrings.sol"; +import "../../../contracts/layer1/tiers/ITierProvider.sol"; +import "../../../contracts/layer1/tiers/LibTiers.sol"; +import "../../../contracts/layer1/tiers/ITierRouter.sol"; /// @title TestTierProvider /// @dev Labeled in AddressResolver as "tier_router" diff --git a/packages/protocol/test/team/airdrop/ERC20Airdrop.t.sol b/packages/protocol/test/layer1/team/airdrop/ERC20Airdrop.t.sol similarity index 98% rename from packages/protocol/test/team/airdrop/ERC20Airdrop.t.sol rename to packages/protocol/test/layer1/team/airdrop/ERC20Airdrop.t.sol index c7d769502e..b96d8454d3 100644 --- a/packages/protocol/test/team/airdrop/ERC20Airdrop.t.sol +++ b/packages/protocol/test/layer1/team/airdrop/ERC20Airdrop.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../TaikoTest.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import "../../TaikoL1Test.sol"; contract MockERC20Airdrop is ERC20Airdrop { function _verifyMerkleProof( diff --git a/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol b/packages/protocol/test/layer1/team/airdrop/MerkleClaimable.t.sol similarity index 98% rename from packages/protocol/test/team/airdrop/MerkleClaimable.t.sol rename to packages/protocol/test/layer1/team/airdrop/MerkleClaimable.t.sol index 7f9240bf32..613a34637c 100644 --- a/packages/protocol/test/team/airdrop/MerkleClaimable.t.sol +++ b/packages/protocol/test/layer1/team/airdrop/MerkleClaimable.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../TaikoTest.sol"; +import "../../TaikoL1Test.sol"; contract MockMerkleClaimable is MerkleClaimable { function init(uint64 _claimStart, uint64 _claimEnd, bytes32 _merkleRoot) external initializer { diff --git a/packages/protocol/test/team/tokenunlock/TokenUnlock.t.sol b/packages/protocol/test/layer1/team/tokenunlock/TokenUnlock.t.sol similarity index 98% rename from packages/protocol/test/team/tokenunlock/TokenUnlock.t.sol rename to packages/protocol/test/layer1/team/tokenunlock/TokenUnlock.t.sol index 9357524bfc..d0d22b9a1e 100644 --- a/packages/protocol/test/team/tokenunlock/TokenUnlock.t.sol +++ b/packages/protocol/test/layer1/team/tokenunlock/TokenUnlock.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; -import "../../TaikoTest.sol"; -import "../../../contracts/team/tokenunlock/TokenUnlock.sol"; +import "../../../shared/TaikoTest.sol"; +import "../../../../contracts/layer1/team/tokenunlock/TokenUnlock.sol"; contract MyERC20 is ERC20, ERC20Votes { constructor(address owner) ERC20("Taiko Token", "TKO") ERC20Permit("Taiko Token") { diff --git a/packages/protocol/test/mocks/MockPlonkVerifier.sol b/packages/protocol/test/layer1/verifiers/MockPlonkVerifier.sol similarity index 96% rename from packages/protocol/test/mocks/MockPlonkVerifier.sol rename to packages/protocol/test/layer1/verifiers/MockPlonkVerifier.sol index dc4fb37627..9ff78e2462 100644 --- a/packages/protocol/test/mocks/MockPlonkVerifier.sol +++ b/packages/protocol/test/layer1/verifiers/MockPlonkVerifier.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@optimism/packages/contracts-bedrock/src/libraries/Bytes.sol"; diff --git a/packages/protocol/test/verifiers/Risc0Verifier.t.sol b/packages/protocol/test/layer1/verifiers/Risc0Verifier.t.sol similarity index 98% rename from packages/protocol/test/verifiers/Risc0Verifier.t.sol rename to packages/protocol/test/layer1/verifiers/Risc0Verifier.t.sol index a3d2bfa0d8..67915c77fa 100644 --- a/packages/protocol/test/verifiers/Risc0Verifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/Risc0Verifier.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; +import "../based/TaikoL1TestBase.sol"; contract MockRisc0RemoteVerifier is IRiscZeroVerifier { // To simulate failing and succeeding diff --git a/packages/protocol/test/verifiers/RiscZeroGroth16Verifier.t.sol b/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol similarity index 98% rename from packages/protocol/test/verifiers/RiscZeroGroth16Verifier.t.sol rename to packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol index e337e7d1b1..5e3667e58e 100644 --- a/packages/protocol/test/verifiers/RiscZeroGroth16Verifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; import "@risc0/contracts/groth16/RiscZeroGroth16Verifier.sol"; import "@risc0/contracts/groth16/ControlID.sol"; +import "../based/TaikoL1TestBase.sol"; contract RiscZeroGroth16VerifierTest is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { diff --git a/packages/protocol/test/verifiers/SP1PlonkVerifier.t.sol b/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol similarity index 98% rename from packages/protocol/test/verifiers/SP1PlonkVerifier.t.sol rename to packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol index 65b8cfaa76..5d66cfd897 100644 --- a/packages/protocol/test/verifiers/SP1PlonkVerifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; import { SP1Verifier as SP1PlonkVerifier } from "@sp1-contracts/src/v1.2.0-rc/SP1VerifierPlonk.sol"; +import "../based/TaikoL1TestBase.sol"; contract SP1PlonkVerifierTest is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { diff --git a/packages/protocol/test/verifiers/SP1Verifier.t.sol b/packages/protocol/test/layer1/verifiers/SP1Verifier.t.sol similarity index 98% rename from packages/protocol/test/verifiers/SP1Verifier.t.sol rename to packages/protocol/test/layer1/verifiers/SP1Verifier.t.sol index 46e48f0076..329031fdd8 100644 --- a/packages/protocol/test/verifiers/SP1Verifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/SP1Verifier.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; +import "../based/TaikoL1TestBase.sol"; contract MockSP1Gateway is ISP1Verifier { // To simulate failing and succeeding diff --git a/packages/protocol/test/verifiers/SgxVerifier.t.sol b/packages/protocol/test/layer1/verifiers/SgxVerifier.t.sol similarity index 99% rename from packages/protocol/test/verifiers/SgxVerifier.t.sol rename to packages/protocol/test/layer1/verifiers/SgxVerifier.t.sol index f650d4cf79..2618a640ba 100644 --- a/packages/protocol/test/verifiers/SgxVerifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/SgxVerifier.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; import "../automata-attestation/common/AttestationBase.t.sol"; +import "../based/TaikoL1TestBase.sol"; contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { address internal SGX_Y = diff --git a/packages/protocol/test/verifiers/compose/ComposeVerifeir.t.sol b/packages/protocol/test/layer1/verifiers/compose/ComposeVerifeir.t.sol similarity index 98% rename from packages/protocol/test/verifiers/compose/ComposeVerifeir.t.sol rename to packages/protocol/test/layer1/verifiers/compose/ComposeVerifeir.t.sol index 045dbb15aa..d6e6ff554b 100644 --- a/packages/protocol/test/verifiers/compose/ComposeVerifeir.t.sol +++ b/packages/protocol/test/layer1/verifiers/compose/ComposeVerifeir.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../TaikoTest.sol"; -import "../../../contracts/verifiers/compose/ComposeVerifier.sol"; +import "../../../shared/TaikoTest.sol"; +import "../../../../contracts/layer1/verifiers/compose/ComposeVerifier.sol"; contract ComposeVerifierForTest is ComposeVerifier { uint256 private threshold; diff --git a/packages/protocol/test/L2/DelegateOwner.t.sol b/packages/protocol/test/layer2/DelegateOwner.t.sol similarity index 98% rename from packages/protocol/test/L2/DelegateOwner.t.sol rename to packages/protocol/test/layer2/DelegateOwner.t.sol index e9e2f342f9..431219d950 100644 --- a/packages/protocol/test/L2/DelegateOwner.t.sol +++ b/packages/protocol/test/layer2/DelegateOwner.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../thirdparty/Multicall3.sol"; -import "../TaikoTest.sol"; +import "../shared/thirdparty/Multicall3.sol"; +import "./TaikoL2Test.sol"; contract Target is EssentialContract { function init(address _owner) external initializer { @@ -10,7 +10,7 @@ contract Target is EssentialContract { } } -contract TestDelegateOwner is TaikoTest { +contract TestDelegateOwner is TaikoL2Test { address public owner; address public remoteOwner; Bridge public bridge; diff --git a/packages/protocol/test/L2/Lib1559Math.t.sol b/packages/protocol/test/layer2/Lib1559Math.t.sol similarity index 97% rename from packages/protocol/test/L2/Lib1559Math.t.sol rename to packages/protocol/test/layer2/Lib1559Math.t.sol index d355f5d9fa..dd821e0e13 100644 --- a/packages/protocol/test/L2/Lib1559Math.t.sol +++ b/packages/protocol/test/layer2/Lib1559Math.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoTest.sol"; +import "./TaikoL2Test.sol"; -contract TestLib1559Math is TaikoTest { +contract TestLib1559Math is TaikoL2Test { using LibMath for uint256; function test_ethQty() external { diff --git a/packages/protocol/test/L2/LibL2Signer.sol b/packages/protocol/test/layer2/LibL2Signer.sol similarity index 98% rename from packages/protocol/test/L2/LibL2Signer.sol rename to packages/protocol/test/layer2/LibL2Signer.sol index 82c626d4e9..42cfc4e873 100644 --- a/packages/protocol/test/L2/LibL2Signer.sol +++ b/packages/protocol/test/layer2/LibL2Signer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../thirdparty/LibUint512Math.sol"; +import "../shared/thirdparty/LibUint512Math.sol"; /// @title LibL2Signer /// @notice This contract allows for signing operations required on Taiko L2. diff --git a/packages/protocol/test/L2/TaikoL2.t.sol b/packages/protocol/test/layer2/TaikoL2.t.sol similarity index 97% rename from packages/protocol/test/L2/TaikoL2.t.sol rename to packages/protocol/test/layer2/TaikoL2.t.sol index ac8103786a..20beeaa94d 100644 --- a/packages/protocol/test/L2/TaikoL2.t.sol +++ b/packages/protocol/test/layer2/TaikoL2.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoTest.sol"; +import "./TaikoL2Test.sol"; contract SkipBasefeeCheckL2 is TaikoL2EIP1559Configurable { function skipFeeCheck() public pure override returns (bool) { @@ -9,7 +9,7 @@ contract SkipBasefeeCheckL2 is TaikoL2EIP1559Configurable { } } -contract TestTaikoL2 is TaikoTest { +contract TaikoL2Tests is TaikoL2Test { using SafeCast for uint256; // Initial salt for semi-random generation diff --git a/packages/protocol/test/L2/TaikoL2EIP1559Configurable.sol b/packages/protocol/test/layer2/TaikoL2EIP1559Configurable.sol similarity index 95% rename from packages/protocol/test/L2/TaikoL2EIP1559Configurable.sol rename to packages/protocol/test/layer2/TaikoL2EIP1559Configurable.sol index b122db18a8..85c3c8450c 100644 --- a/packages/protocol/test/L2/TaikoL2EIP1559Configurable.sol +++ b/packages/protocol/test/layer2/TaikoL2EIP1559Configurable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../../contracts/L2/TaikoL2.sol"; +import "../../contracts/layer2/based/TaikoL2.sol"; /// @title TaikoL2EIP1559Configurable /// @notice TaikoL2 with a setter to change EIP-1559 configurations and states. diff --git a/packages/protocol/test/L2/TaikoL2NoFeeCheck.t.sol b/packages/protocol/test/layer2/TaikoL2NoFeeCheck.t.sol similarity index 98% rename from packages/protocol/test/L2/TaikoL2NoFeeCheck.t.sol rename to packages/protocol/test/layer2/TaikoL2NoFeeCheck.t.sol index e32738ebce..f0a7621959 100644 --- a/packages/protocol/test/L2/TaikoL2NoFeeCheck.t.sol +++ b/packages/protocol/test/layer2/TaikoL2NoFeeCheck.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../TaikoTest.sol"; +import "./TaikoL2Test.sol"; contract SkipBasefeeCheckL2 is TaikoL2EIP1559Configurable { function skipFeeCheck() public pure override returns (bool) { @@ -9,7 +9,7 @@ contract SkipBasefeeCheckL2 is TaikoL2EIP1559Configurable { } } -contract TestTaikoL2NoFeeCheck is TaikoTest { +contract TaikoL2NoFeeCheckTests is TaikoL2Test { using SafeCast for uint256; // Initial salt for semi-random generation diff --git a/packages/protocol/test/layer2/TaikoL2Test.sol b/packages/protocol/test/layer2/TaikoL2Test.sol new file mode 100644 index 0000000000..ad9eeb0e61 --- /dev/null +++ b/packages/protocol/test/layer2/TaikoL2Test.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "../../contracts/layer2/DelegateOwner.sol"; +import "../layer2/TaikoL2EIP1559Configurable.sol"; +import "../layer2/LibL2Signer.sol"; +import "../shared/TaikoTest.sol"; + +abstract contract TaikoL2Test is TaikoTest { } diff --git a/packages/protocol/test/DeployCapability.sol b/packages/protocol/test/shared/DeployCapability.sol similarity index 96% rename from packages/protocol/test/DeployCapability.sol rename to packages/protocol/test/shared/DeployCapability.sol index ae059deef5..aa54d9e077 100644 --- a/packages/protocol/test/DeployCapability.sol +++ b/packages/protocol/test/shared/DeployCapability.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -8,7 +8,7 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "forge-std/src/console2.sol"; import "forge-std/src/Script.sol"; -import "../contracts/common/AddressManager.sol"; +import "../../contracts/shared/common/AddressManager.sol"; /// @title DeployCapability abstract contract DeployCapability is Script { diff --git a/packages/protocol/test/HelperContracts.sol b/packages/protocol/test/shared/HelperContracts.sol similarity index 88% rename from packages/protocol/test/HelperContracts.sol rename to packages/protocol/test/shared/HelperContracts.sol index de21aac136..15b4444dff 100644 --- a/packages/protocol/test/HelperContracts.sol +++ b/packages/protocol/test/shared/HelperContracts.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../contracts/bridge/Bridge.sol"; -import "../contracts/signal/SignalService.sol"; +import "../../contracts/shared/bridge/Bridge.sol"; +import "../../contracts/shared/signal/SignalService.sol"; contract BadReceiver { receive() external payable { diff --git a/packages/protocol/test/TaikoTest.sol b/packages/protocol/test/shared/TaikoTest.sol similarity index 69% rename from packages/protocol/test/TaikoTest.sol rename to packages/protocol/test/shared/TaikoTest.sol index 883289065e..ce24659cd0 100644 --- a/packages/protocol/test/TaikoTest.sol +++ b/packages/protocol/test/shared/TaikoTest.sol @@ -1,37 +1,22 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "forge-std/src/Test.sol"; import "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "../contracts/tokenvault/BridgedERC20V2.sol"; -import "../contracts/tokenvault/BridgedERC721.sol"; -import "../contracts/tokenvault/BridgedERC1155.sol"; -import "../contracts/tokenvault/ERC20Vault.sol"; -import "../contracts/tokenvault/ERC721Vault.sol"; -import "../contracts/tokenvault/ERC1155Vault.sol"; - -import "../contracts/tko/TaikoToken.sol"; -import "../contracts/L1/TaikoL1.sol"; -import "../contracts/verifiers/SgxVerifier.sol"; -import "../contracts/verifiers/SP1Verifier.sol"; -import "../contracts/verifiers/Risc0Verifier.sol"; -import "../test/L1/TestTierProvider.sol"; -import "../contracts/L1/provers/GuardianProver.sol"; -import "../contracts/bridge/QuotaManager.sol"; - -import "../contracts/L2/DelegateOwner.sol"; - -import "../contracts/team/airdrop/ERC20Airdrop.sol"; - -import "../test/common/erc20/FreeMintERC20.sol"; -import "../test/L2/TaikoL2EIP1559Configurable.sol"; - +import "../../contracts/shared/tokenvault/BridgedERC20V2.sol"; +import "../../contracts/shared/tokenvault/BridgedERC721.sol"; +import "../../contracts/shared/tokenvault/BridgedERC1155.sol"; +import "../../contracts/shared/tokenvault/ERC20Vault.sol"; +import "../../contracts/shared/tokenvault/ERC721Vault.sol"; +import "../../contracts/shared/tokenvault/ERC1155Vault.sol"; +import "./token/FreeMintERC20.sol"; +import "./token/RegularERC20.sol"; +import "./token/MayFailFreeMintERC20.sol"; import "./DeployCapability.sol"; import "./HelperContracts.sol"; -import "./L2/LibL2Signer.sol"; abstract contract TaikoTest is Test, DeployCapability { uint256 private _seed = 0x12345678; diff --git a/packages/protocol/test/bridge/Bridge.t.sol b/packages/protocol/test/shared/bridge/Bridge.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge.t.sol rename to packages/protocol/test/shared/bridge/Bridge.t.sol index 86947bb783..9406a70ce1 100644 --- a/packages/protocol/test/bridge/Bridge.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/bridge/Bridge2.t.sol b/packages/protocol/test/shared/bridge/Bridge2.t.sol similarity index 98% rename from packages/protocol/test/bridge/Bridge2.t.sol rename to packages/protocol/test/shared/bridge/Bridge2.t.sol index 070e56614f..95ffe3075b 100644 --- a/packages/protocol/test/bridge/Bridge2.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/bridge/Bridge2_failMessage.t.sol b/packages/protocol/test/shared/bridge/Bridge2_failMessage.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge2_failMessage.t.sol rename to packages/protocol/test/shared/bridge/Bridge2_failMessage.t.sol index 8f50e23dad..c677c76daa 100644 --- a/packages/protocol/test/bridge/Bridge2_failMessage.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2_failMessage.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./Bridge2.t.sol"; diff --git a/packages/protocol/test/bridge/Bridge2_processMessage.t.sol b/packages/protocol/test/shared/bridge/Bridge2_processMessage.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge2_processMessage.t.sol rename to packages/protocol/test/shared/bridge/Bridge2_processMessage.t.sol index ec4c3df667..5c3ed60b74 100644 --- a/packages/protocol/test/bridge/Bridge2_processMessage.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2_processMessage.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./Bridge2.t.sol"; diff --git a/packages/protocol/test/bridge/Bridge2_recallMessage.t.sol b/packages/protocol/test/shared/bridge/Bridge2_recallMessage.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge2_recallMessage.t.sol rename to packages/protocol/test/shared/bridge/Bridge2_recallMessage.t.sol index 4c0bfbc44e..d45331ce74 100644 --- a/packages/protocol/test/bridge/Bridge2_recallMessage.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2_recallMessage.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./Bridge2.t.sol"; diff --git a/packages/protocol/test/bridge/Bridge2_retryMessage.t.sol b/packages/protocol/test/shared/bridge/Bridge2_retryMessage.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge2_retryMessage.t.sol rename to packages/protocol/test/shared/bridge/Bridge2_retryMessage.t.sol index f6da3ab30d..ab4c8a6521 100644 --- a/packages/protocol/test/bridge/Bridge2_retryMessage.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2_retryMessage.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./Bridge2.t.sol"; diff --git a/packages/protocol/test/bridge/Bridge2_sendMessage.t.sol b/packages/protocol/test/shared/bridge/Bridge2_sendMessage.t.sol similarity index 99% rename from packages/protocol/test/bridge/Bridge2_sendMessage.t.sol rename to packages/protocol/test/shared/bridge/Bridge2_sendMessage.t.sol index ba323785c7..5310f242a4 100644 --- a/packages/protocol/test/bridge/Bridge2_sendMessage.t.sol +++ b/packages/protocol/test/shared/bridge/Bridge2_sendMessage.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "./Bridge2.t.sol"; diff --git a/packages/protocol/test/bridge/QuotaManager.t.sol b/packages/protocol/test/shared/bridge/QuotaManager.t.sol similarity index 99% rename from packages/protocol/test/bridge/QuotaManager.t.sol rename to packages/protocol/test/shared/bridge/QuotaManager.t.sol index 5d25eebab4..fa44f0cc9e 100644 --- a/packages/protocol/test/bridge/QuotaManager.t.sol +++ b/packages/protocol/test/shared/bridge/QuotaManager.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/common/AddressManager.t.sol b/packages/protocol/test/shared/common/AddressManager.t.sol similarity index 93% rename from packages/protocol/test/common/AddressManager.t.sol rename to packages/protocol/test/shared/common/AddressManager.t.sol index 91b6383f26..94e64b5c83 100644 --- a/packages/protocol/test/common/AddressManager.t.sol +++ b/packages/protocol/test/shared/common/AddressManager.t.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; +import "../TaikoTest.sol"; /// @author Kirk Baird -contract TestAddressManager is TaikoL1TestBase { +contract TestAddressManager is TaikoTest { function deployTaikoL1() internal override returns (TaikoL1) { return TaikoL1(payable(deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }))); diff --git a/packages/protocol/test/common/AddressResolver.t.sol b/packages/protocol/test/shared/common/AddressResolver.t.sol similarity index 92% rename from packages/protocol/test/common/AddressResolver.t.sol rename to packages/protocol/test/shared/common/AddressResolver.t.sol index ef08e2abef..b416c950db 100644 --- a/packages/protocol/test/common/AddressResolver.t.sol +++ b/packages/protocol/test/shared/common/AddressResolver.t.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; -import "../L1/TaikoL1TestBase.sol"; +import "../TaikoTest.sol"; /// @author Kirk Baird -contract TestAddressResolver is TaikoL1TestBase { +contract TestAddressResolver is TaikoTest { function deployTaikoL1() internal override returns (TaikoL1) { return TaikoL1(payable(deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }))); diff --git a/packages/protocol/test/common/EssentialContract.t.sol b/packages/protocol/test/shared/common/EssentialContract.t.sol similarity index 98% rename from packages/protocol/test/common/EssentialContract.t.sol rename to packages/protocol/test/shared/common/EssentialContract.t.sol index d9aa975ada..dc9d90eeae 100644 --- a/packages/protocol/test/common/EssentialContract.t.sol +++ b/packages/protocol/test/shared/common/EssentialContract.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/libs/LibAddress.t.sol b/packages/protocol/test/shared/common/LibAddress.t.sol similarity index 97% rename from packages/protocol/test/libs/LibAddress.t.sol rename to packages/protocol/test/shared/common/LibAddress.t.sol index 11855ea2d5..ce6b29a5ea 100644 --- a/packages/protocol/test/libs/LibAddress.t.sol +++ b/packages/protocol/test/shared/common/LibAddress.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; -import "../../contracts/libs/LibAddress.sol"; +import "../../../contracts/shared/common/LibAddress.sol"; contract CalldataReceiver { // Returns success diff --git a/packages/protocol/test/libs/LibTrieProof.t.sol b/packages/protocol/test/shared/common/LibTrieProof.t.sol similarity index 99% rename from packages/protocol/test/libs/LibTrieProof.t.sol rename to packages/protocol/test/shared/common/LibTrieProof.t.sol index ed0acad1ff..42f2820d86 100644 --- a/packages/protocol/test/libs/LibTrieProof.t.sol +++ b/packages/protocol/test/shared/common/LibTrieProof.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; +import "../../../contracts/shared/common/LibTrieProof.sol"; import "../TaikoTest.sol"; -import "../../contracts/libs/LibTrieProof.sol"; contract TestLibTrieProof is TaikoTest { function test_verifyMerkleProof() public { diff --git a/packages/protocol/test/signal/SignalService.t.sol b/packages/protocol/test/shared/signal/SignalService.t.sol similarity index 99% rename from packages/protocol/test/signal/SignalService.t.sol rename to packages/protocol/test/shared/signal/SignalService.t.sol index 875fd7677e..289d35fc60 100644 --- a/packages/protocol/test/signal/SignalService.t.sol +++ b/packages/protocol/test/shared/signal/SignalService.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; import "forge-std/src/console2.sol"; diff --git a/packages/protocol/test/thirdparty/LibUint512Math.sol b/packages/protocol/test/shared/thirdparty/LibUint512Math.sol similarity index 99% rename from packages/protocol/test/thirdparty/LibUint512Math.sol rename to packages/protocol/test/shared/thirdparty/LibUint512Math.sol index 927acb48d6..ae732cf8eb 100644 --- a/packages/protocol/test/thirdparty/LibUint512Math.sol +++ b/packages/protocol/test/shared/thirdparty/LibUint512Math.sol @@ -23,7 +23,7 @@ // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title LibUint512Math library LibUint512Math { diff --git a/packages/protocol/test/thirdparty/Multicall3.sol b/packages/protocol/test/shared/thirdparty/Multicall3.sol similarity index 99% rename from packages/protocol/test/thirdparty/Multicall3.sol rename to packages/protocol/test/shared/thirdparty/Multicall3.sol index 62ac791f6c..2b15bc3d11 100644 --- a/packages/protocol/test/thirdparty/Multicall3.sol +++ b/packages/protocol/test/shared/thirdparty/Multicall3.sol @@ -3,7 +3,7 @@ */ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; /// @title Multicall3 /// @notice Aggregate results from multiple function calls diff --git a/packages/protocol/test/common/erc20/FreeMintERC20.sol b/packages/protocol/test/shared/token/FreeMintERC20.sol similarity index 95% rename from packages/protocol/test/common/erc20/FreeMintERC20.sol rename to packages/protocol/test/shared/token/FreeMintERC20.sol index 419fde30cf..96e02962ed 100644 --- a/packages/protocol/test/common/erc20/FreeMintERC20.sol +++ b/packages/protocol/test/shared/token/FreeMintERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/packages/protocol/test/common/erc20/MayFailFreeMintERC20.sol b/packages/protocol/test/shared/token/MayFailFreeMintERC20.sol similarity index 98% rename from packages/protocol/test/common/erc20/MayFailFreeMintERC20.sol rename to packages/protocol/test/shared/token/MayFailFreeMintERC20.sol index c78aedd4a9..4fe4e76501 100644 --- a/packages/protocol/test/common/erc20/MayFailFreeMintERC20.sol +++ b/packages/protocol/test/shared/token/MayFailFreeMintERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/packages/protocol/test/common/erc20/RegularERC20.sol b/packages/protocol/test/shared/token/RegularERC20.sol similarity index 90% rename from packages/protocol/test/common/erc20/RegularERC20.sol rename to packages/protocol/test/shared/token/RegularERC20.sol index be6fa1bf13..5216f9077a 100644 --- a/packages/protocol/test/common/erc20/RegularERC20.sol +++ b/packages/protocol/test/shared/token/RegularERC20.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/packages/protocol/test/tokenvault/BridgedERC20V2.t.sol b/packages/protocol/test/shared/tokenvault/BridgedERC20V2.t.sol similarity index 99% rename from packages/protocol/test/tokenvault/BridgedERC20V2.t.sol rename to packages/protocol/test/shared/tokenvault/BridgedERC20V2.t.sol index 0ba20904a7..9d07025e40 100644 --- a/packages/protocol/test/tokenvault/BridgedERC20V2.t.sol +++ b/packages/protocol/test/shared/tokenvault/BridgedERC20V2.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol b/packages/protocol/test/shared/tokenvault/ERC1155Vault.t.sol similarity index 99% rename from packages/protocol/test/tokenvault/ERC1155Vault.t.sol rename to packages/protocol/test/shared/tokenvault/ERC1155Vault.t.sol index 9aa95614e6..6c28e585e7 100644 --- a/packages/protocol/test/tokenvault/ERC1155Vault.t.sol +++ b/packages/protocol/test/shared/tokenvault/ERC1155Vault.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/shared/tokenvault/ERC20Vault.t.sol similarity index 99% rename from packages/protocol/test/tokenvault/ERC20Vault.t.sol rename to packages/protocol/test/shared/tokenvault/ERC20Vault.t.sol index 26526463d0..1f8804a84f 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/shared/tokenvault/ERC20Vault.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "../TaikoTest.sol"; diff --git a/packages/protocol/test/tokenvault/ERC721Vault.t.sol b/packages/protocol/test/shared/tokenvault/ERC721Vault.t.sol similarity index 99% rename from packages/protocol/test/tokenvault/ERC721Vault.t.sol rename to packages/protocol/test/shared/tokenvault/ERC721Vault.t.sol index e3ddfc2901..0ef7095768 100644 --- a/packages/protocol/test/tokenvault/ERC721Vault.t.sol +++ b/packages/protocol/test/shared/tokenvault/ERC721Vault.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "../TaikoTest.sol"; diff --git a/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json b/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json deleted file mode 100644 index 3208e43309..0000000000 --- a/packages/protocol/utils/airdrop/airdrop_db/example_claimList.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { "address": "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf", "amount": 100 }, - { "address": "0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF", "amount": 100 }, - { "address": "0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69", "amount": 100 }, - { "address": "0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718", "amount": 100 }, - { "address": "0xe1AB8145F7E55DC933d51a18c793F901A3A0b276", "amount": 200 } -] diff --git a/packages/protocol/utils/airdrop/buildMerkleTree.ts b/packages/protocol/utils/airdrop/buildMerkleTree.ts deleted file mode 100644 index f732a115c7..0000000000 --- a/packages/protocol/utils/airdrop/buildMerkleTree.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { MerkleTree } from "merkletreejs/dist/MerkleTree"; -const { ethers } = require("ethers"); -const keccak256 = require("keccak256"); -const fs = require("fs"); - -interface IClaimListData { - address: string; - amount: number; -} - -interface IMerkle { - merkleTree: MerkleTree; - rootHash: string; -} - -async function buildMerkleTree( - allowListDataArr: IClaimListData[], -): Promise { - // create merkle tree - const leafNodes: any = []; - for (let i = 0; i < allowListDataArr.length; i++) { - leafNodes.push(buildLeaf(allowListDataArr[i])); - } - const merkleTree = new MerkleTree(leafNodes, keccak256, { - sortPairs: true, - }); - - const rootHash = merkleTree.getHexRoot(); - - return { - merkleTree, - rootHash, - }; -} - -function buildLeaf(data: IClaimListData) { - const inputData = ethers.utils.defaultAbiCoder.encode( - ["address", "uint256"], - [data.address, data.amount], - ); - - return Buffer.from( - ethers.utils - .keccak256( - ethers.utils.defaultAbiCoder.encode( - ["bytes", "bytes"], - [ - ethers.utils.toUtf8Bytes("CLAIM_TAIKO_AIRDROP"), - inputData, - ], - ), - ) - .slice(2), - "hex", - ); -} - -async function getMerkleProof( - address: string, - amount: number, - claimList: IClaimListData[], -) { - const merkleData = await buildMerkleTree(claimList); - const leaf = buildLeaf({ address, amount }); - - return merkleData.merkleTree.getHexProof(leaf); -} - -async function main() { - const filePath = process.argv[2]; - - if (!filePath) { - console.error( - "Please provide a path to the JSON file as a command-line argument.", - ); - return; - } - - const jsonData = fs.readFileSync(filePath, "utf-8"); - const claimList: IClaimListData[] = JSON.parse(jsonData); - const merkleData = await buildMerkleTree(claimList); - - console.log("Merkle root:", merkleData.rootHash); - console.log("Nr of leaves (entries):", claimList.length); - - const exampleProof = await getMerkleProof( - "0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf", - 100, - claimList, - ); - - console.log("Example proof for Alice (foundry) is: ", exampleProof); -} - -main().catch((error) => { - console.error(error); -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec4e0516c2..5303428e71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -471,8 +471,8 @@ importers: specifier: ^5.7.2 version: 5.7.2 solc: - specifier: 0.8.27 - version: 0.8.27 + specifier: 0.8.24 + version: 0.8.24 solhint: specifier: ^5.0.3 version: 5.0.3(typescript@5.4.5) @@ -10094,11 +10094,6 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - solc@0.8.27: - resolution: {integrity: sha512-BNxMol2tUAbkH7HKlXBcBqrGi2aqgv+uMHz26mJyTtlVgWmBA4ktiw0qVKHfkjf2oaHbwtbtaSeE2dhn/gTAKw==} - engines: {node: '>=10.0.0'} - hasBin: true - solhint@4.5.4: resolution: {integrity: sha512-Cu1XiJXub2q1eCr9kkJ9VPv1sGcmj3V7Zb76B0CoezDOB9bu3DxKIFFH7ggCl9fWpEPD6xBmRLfZrYijkVmujQ==} hasBin: true @@ -25188,18 +25183,6 @@ snapshots: transitivePeerDependencies: - debug - solc@0.8.27: - dependencies: - command-exists: 1.2.9 - commander: 8.3.0 - follow-redirects: 1.15.6(debug@4.3.4) - js-sha3: 0.8.0 - memorystream: 0.3.1 - semver: 5.7.2 - tmp: 0.0.33 - transitivePeerDependencies: - - debug - solhint@4.5.4(typescript@5.4.5): dependencies: '@solidity-parser/parser': 0.18.0 From 548884d10ca3dc9931c025428f827335e42b55db Mon Sep 17 00:00:00 2001 From: Matthew Scerri <32162885+scermat@users.noreply.github.com> Date: Thu, 12 Sep 2024 02:34:58 +0200 Subject: [PATCH 02/56] docs(docs-site): added documentation for PORTERS (#18033) Co-authored-by: Roger <50648015+RogerLamTd@users.noreply.github.com> --- .../src/content/docs/resources/developer-tools.mdx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/docs-site/src/content/docs/resources/developer-tools.mdx b/packages/docs-site/src/content/docs/resources/developer-tools.mdx index c548170982..681e736a0f 100644 --- a/packages/docs-site/src/content/docs/resources/developer-tools.mdx +++ b/packages/docs-site/src/content/docs/resources/developer-tools.mdx @@ -38,4 +38,14 @@ import { LinkCard, CardGrid } from "@astrojs/starlight/components"; description="API3 offers over 200 first-party, OEV-enabled price feeds on Taiko Mainnet and Testnet, providing reliable and decentralized data through the API3 Market." href="https://market.api3.org/taiko" /> + + +## Node Providers + + + \ No newline at end of file From bf45889e18e97f1186cd60fd55e1b2664dc4bf43 Mon Sep 17 00:00:00 2001 From: taiko-bot <160625009+taiko-kitty@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:42:22 -0700 Subject: [PATCH 03/56] chore(main): release protocol 1.9.0 (#18052) Co-authored-by: Daniel Wang <99078276+dantaik@users.noreply.github.com> --- .release-please-manifest.json | 2 +- packages/protocol/CHANGELOG.md | 118 +++++++++++++++++++++++++++++++++ packages/protocol/package.json | 2 +- 3 files changed, 120 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 607076805a..6106d8ce7c 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -5,7 +5,7 @@ "packages/fork-diff": "0.6.0", "packages/guardian-prover-health-check": "0.1.0", "packages/guardian-prover-health-check-ui": "0.2.0", - "packages/protocol": "1.8.0", + "packages/protocol": "1.9.0", "packages/relayer": "0.12.0", "packages/snaefell-ui": "1.1.0", "packages/supplementary-contracts": "1.0.0", diff --git a/packages/protocol/CHANGELOG.md b/packages/protocol/CHANGELOG.md index 02a6798bdc..e3cd132ef6 100644 --- a/packages/protocol/CHANGELOG.md +++ b/packages/protocol/CHANGELOG.md @@ -1,5 +1,123 @@ # Changelog +## [1.9.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.8.0...protocol-v1.9.0) (2024-09-12) + + +### Features + +* **protocol:** add `DevnetTaikoL1` ([#17900](https://github.com/taikoxyz/taiko-mono/issues/17900)) ([d864cea](https://github.com/taikoxyz/taiko-mono/commit/d864cea2eb8346127992acfbd9012e675a3400cc)) +* **protocol:** add `proveBlocks` method to `ProverSet` ([#18025](https://github.com/taikoxyz/taiko-mono/issues/18025)) ([36a2ae5](https://github.com/taikoxyz/taiko-mono/commit/36a2ae51c21a2359179755457a8933a346ccd8b3)) +* **protocol:** add `proveBlocks` to TaikoL1.sol ([fe687b3](https://github.com/taikoxyz/taiko-mono/commit/fe687b378fcb440184fd423088432dc63cf5989e)) +* **protocol:** add `TIER_ZKVM_RISC0` tier and `HeklaTierProvider` ([#17913](https://github.com/taikoxyz/taiko-mono/issues/17913)) ([64ed666](https://github.com/taikoxyz/taiko-mono/commit/64ed66628a18cb1b3fff2c4ab5d3c0149288dfe6)) +* **protocol:** add a batch proposing block function ([#17864](https://github.com/taikoxyz/taiko-mono/issues/17864)) ([3649785](https://github.com/taikoxyz/taiko-mono/commit/36497857dd3d5edb718a5cb0057327f3cde39c02)) +* **protocol:** add ComposeVerifier, TeeAnyVerifier, and ZkAnyVerifier ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) +* **protocol:** add EIP-2612 (permit extension) to bridged ERC20 tokens ([#17818](https://github.com/taikoxyz/taiko-mono/issues/17818)) ([185ef91](https://github.com/taikoxyz/taiko-mono/commit/185ef91d8debb0c3a88734f2552ca396c8d23a66)) +* **protocol:** add preconfirmation support based on https://github.com/taikoxyz/taiko-mono/pull/17654 (with some renaming) (https://github.com/taikoxyz/taiko-mono/issues/14793) ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) +* **protocol:** add proposeBlock2 in TaikoL1.sol and approve2 in GuardianProver.sol ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) +* **protocol:** add proposer address to getMinTier func ([#17919](https://github.com/taikoxyz/taiko-mono/issues/17919)) ([d6ea6f3](https://github.com/taikoxyz/taiko-mono/commit/d6ea6f33d6bf54cba3bd6ab153e38d09abf19912)) +* **protocol:** add SP1 verification support ([#17861](https://github.com/taikoxyz/taiko-mono/issues/17861)) ([2936312](https://github.com/taikoxyz/taiko-mono/commit/29363123233f9d2d749eb626095d0c645801e384)) +* **protocol:** add withdraw eth function to proverset ([#17800](https://github.com/taikoxyz/taiko-mono/issues/17800)) ([bb2abc5](https://github.com/taikoxyz/taiko-mono/commit/bb2abc510c98e62c89e0bfd9382c11720fb9edc7)) +* **protocol:** adjust gas excess once the gas target has changed ([a1e217e](https://github.com/taikoxyz/taiko-mono/commit/a1e217e457546d63a89da0b02135b3b63b22d19e)) +* **protocol:** allow a grace period (4h) to defer proof submission to reduce cost ([fe687b3](https://github.com/taikoxyz/taiko-mono/commit/fe687b378fcb440184fd423088432dc63cf5989e)) +* **protocol:** allow any address to withdraw token to the recipient address ([#17843](https://github.com/taikoxyz/taiko-mono/issues/17843)) ([3d89d24](https://github.com/taikoxyz/taiko-mono/commit/3d89d24b14fea7b9e59659e689c3011fbcf4b852)) +* **protocol:** allow contract proposers to use calldata for DA ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) +* **protocol:** allow msg.sender to customize block proposer addresses ([#18048](https://github.com/taikoxyz/taiko-mono/issues/18048)) ([22055cc](https://github.com/taikoxyz/taiko-mono/commit/22055cc95e51d07b6b57ab5cb2e4ccd9a97d594a)) +* **protocol:** enhance nextTxId logics in DelegateOwner ([#17718](https://github.com/taikoxyz/taiko-mono/issues/17718)) ([85b2cad](https://github.com/taikoxyz/taiko-mono/commit/85b2cad6216d93e3811bc3523ab8b3200cdfbdd3)) +* **protocol:** improve L2 basefee calculation ([920bd68](https://github.com/taikoxyz/taiko-mono/commit/920bd6873d3e9e1bbb00751fb9c0056ac85b8554)) +* **protocol:** introduce risc0 proof ([#17877](https://github.com/taikoxyz/taiko-mono/issues/17877)) ([bcb57cb](https://github.com/taikoxyz/taiko-mono/commit/bcb57cb81d12d0c09656582ad9140b38015b3a58)) +* **protocol:** protocol monitors ([#18002](https://github.com/taikoxyz/taiko-mono/issues/18002)) ([45b2087](https://github.com/taikoxyz/taiko-mono/commit/45b2087495d4f9e20083ebe2c61ecfe8d252e4b2)) +* **protocol:** relocate L2 base fee parameters to L1 configuration ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) +* **protocol:** return verification timestamp in getLastVerifiedBlock ([#17868](https://github.com/taikoxyz/taiko-mono/issues/17868)) ([1998288](https://github.com/taikoxyz/taiko-mono/commit/19982889f7f4c073d182a6076633c5e2c892c73a)) +* **protocol:** revert removing time as input for L2 base fee calculation ([a1e217e](https://github.com/taikoxyz/taiko-mono/commit/a1e217e457546d63a89da0b02135b3b63b22d19e)) +* **protocol:** script of `UpgradeRisc0Verifier` ([#17949](https://github.com/taikoxyz/taiko-mono/issues/17949)) ([fc12e04](https://github.com/taikoxyz/taiko-mono/commit/fc12e040c391e0f37c906b270743d3b57710f69d)) +* **protocol:** support backward-compatible batch-proof verification ([#17968](https://github.com/taikoxyz/taiko-mono/issues/17968)) ([c476aab](https://github.com/taikoxyz/taiko-mono/commit/c476aabe130d151f5678cd35fab99f258997f629)) +* **protocol:** update `HeklaTierProvider` to introduce sp1 proof ([#18022](https://github.com/taikoxyz/taiko-mono/issues/18022)) ([76b6514](https://github.com/taikoxyz/taiko-mono/commit/76b6514fd42ba7fa2124b44443728fa32304c324)) +* **protocol:** update `ontakeForkHeight` to Sep 24, 2024 ([#18046](https://github.com/taikoxyz/taiko-mono/issues/18046)) ([30c9316](https://github.com/taikoxyz/taiko-mono/commit/30c9316aea083d187617f5342fb4a955e604226b)) +* **protocol:** update Hekla `ontakeForkHeight` ([#17983](https://github.com/taikoxyz/taiko-mono/issues/17983)) ([8819e3a](https://github.com/taikoxyz/taiko-mono/commit/8819e3a5a59675dcc6a1f333620ce6e75b7d2887)) +* **protocol:** update Hekla deployment ([#17795](https://github.com/taikoxyz/taiko-mono/issues/17795)) ([cadaef8](https://github.com/taikoxyz/taiko-mono/commit/cadaef882c0751496809c88ee03ff818e49c4b4a)) +* **protocol:** update risc0 verifier contract to release-1.0 ([#17776](https://github.com/taikoxyz/taiko-mono/issues/17776)) ([2dd30ab](https://github.com/taikoxyz/taiko-mono/commit/2dd30ab2dc92b25105f19a4bcc1ddf7b40886039)) +* **protocol:** update script of deploying sp1 ([#18019](https://github.com/taikoxyz/taiko-mono/issues/18019)) ([9464967](https://github.com/taikoxyz/taiko-mono/commit/94649671bdf0304d96bf83d7d18dcbe21eff6067)) +* **protocol:** use SP1 1.2.0-rc with more proof verification tests ([#18001](https://github.com/taikoxyz/taiko-mono/issues/18001)) ([f7bcf1d](https://github.com/taikoxyz/taiko-mono/commit/f7bcf1d63d19b641ac6b9e0e972a7f6e2ec5b38f)) + + +### Bug Fixes + +* **protocol:** fix `chainId` in `HeklaTaikoL1` ([#17912](https://github.com/taikoxyz/taiko-mono/issues/17912)) ([8f31dd0](https://github.com/taikoxyz/taiko-mono/commit/8f31dd0ed519809f0ea0797b1e6b5937ee087108)) +* **protocol:** fix BridgedERC20V2.sol initializer logic ([#17823](https://github.com/taikoxyz/taiko-mono/issues/17823)) ([d538d99](https://github.com/taikoxyz/taiko-mono/commit/d538d99f9542852821d958008d913c028629bbef)) +* **protocol:** fix bug in adjustExcess ([920bd68](https://github.com/taikoxyz/taiko-mono/commit/920bd6873d3e9e1bbb00751fb9c0056ac85b8554)) +* **protocol:** fix tier id conflicts ([#18004](https://github.com/taikoxyz/taiko-mono/issues/18004)) ([0df1ad4](https://github.com/taikoxyz/taiko-mono/commit/0df1ad4274e6ebc3db79acbbdaedbe2d519262d6)) +* **protocol:** make sure new instance is not zero address in SgxVerifier ([#17918](https://github.com/taikoxyz/taiko-mono/issues/17918)) ([d559ce8](https://github.com/taikoxyz/taiko-mono/commit/d559ce80c1314e9ddbe02798f1c61a2e8349da6e)) +* **protocol:** reduce MainnetTaikoL1 code size ([#17792](https://github.com/taikoxyz/taiko-mono/issues/17792)) ([45281b8](https://github.com/taikoxyz/taiko-mono/commit/45281b848f3ef3c45487bfcd1bfd38b382eff4d0)) +* **protocol:** use block header's extraData for `basefeeSharingPctg` ([#17889](https://github.com/taikoxyz/taiko-mono/issues/17889)) ([5f3cbc9](https://github.com/taikoxyz/taiko-mono/commit/5f3cbc97cbe2636314c4a2945fdf01ef641702e7)) + + +### Chores + +* **main:** release protocol 1.9.0 ([#17783](https://github.com/taikoxyz/taiko-mono/issues/17783)) ([7bfd28a](https://github.com/taikoxyz/taiko-mono/commit/7bfd28a2b332c927cd8b6358623551814260f94e)) +* **main:** release protocol 1.9.0 ([#18051](https://github.com/taikoxyz/taiko-mono/issues/18051)) ([2547ba9](https://github.com/taikoxyz/taiko-mono/commit/2547ba9409705bb759b62e59a7e5d5821349c71a)) +* **protocol:** make two state variables in TaikoL2.sol public and add `adjustExcess` ([#17891](https://github.com/taikoxyz/taiko-mono/issues/17891)) ([ba21f68](https://github.com/taikoxyz/taiko-mono/commit/ba21f6836845ea0227116b701e701815f210d56d)) +* **protocol:** move two files to simplify folder structure ([#17929](https://github.com/taikoxyz/taiko-mono/issues/17929)) ([9dca4fa](https://github.com/taikoxyz/taiko-mono/commit/9dca4faa43ad938880c8e1ac54236ab292bcce6e)) +* **protocol:** re-generate layout files with diff order for comparison with new PR ([#18067](https://github.com/taikoxyz/taiko-mono/issues/18067)) ([078d336](https://github.com/taikoxyz/taiko-mono/commit/078d3367dce86a57d71d48291537e925cb1b4b91)) +* **protocol:** revert `TAIKO_TOKEN` name changes in `DeployOnL1` ([#17927](https://github.com/taikoxyz/taiko-mono/issues/17927)) ([cf1a15f](https://github.com/taikoxyz/taiko-mono/commit/cf1a15f46344e60448c5fdcbcae02521fb5b7c04)) +* **protocol:** revert releasing protocol 1.9.0 ([#17783](https://github.com/taikoxyz/taiko-mono/issues/17783)) ([#18049](https://github.com/taikoxyz/taiko-mono/issues/18049)) ([c033810](https://github.com/taikoxyz/taiko-mono/commit/c033810ecc4c80a4581a95b06ab5127747efd191)) + + +### Documentation + +* **docs-site:** address docs and scripts friction points ([#17815](https://github.com/taikoxyz/taiko-mono/issues/17815)) ([c74968b](https://github.com/taikoxyz/taiko-mono/commit/c74968b61828babf218fbc8e8ded001a853a93c3)) +* **protocol:** add L2 `DelegateOwner` address in Hekla deployment docs ([#17925](https://github.com/taikoxyz/taiko-mono/issues/17925)) ([fdec8db](https://github.com/taikoxyz/taiko-mono/commit/fdec8dbe8c8aef21f71c9c4ca2213944880c1a47)) +* **protocol:** update `tier_router`with compatibility modifications ([#18028](https://github.com/taikoxyz/taiko-mono/issues/18028)) ([c43cb0c](https://github.com/taikoxyz/taiko-mono/commit/c43cb0c05f7cbba281076568f4e72033ebbcd0f3)) +* **protocol:** update hekla change log about `tier_router` ([#18023](https://github.com/taikoxyz/taiko-mono/issues/18023)) ([11e27d6](https://github.com/taikoxyz/taiko-mono/commit/11e27d60b3da9a34e07bfafadb8ec3d3223867d2)) +* **protocol:** update hekla change log about sp1 ([#18020](https://github.com/taikoxyz/taiko-mono/issues/18020)) ([434bf3c](https://github.com/taikoxyz/taiko-mono/commit/434bf3ccc1715171b8cd4e7581b282f85744ebe3)) +* **protocol:** update Hekla deployment ([#17845](https://github.com/taikoxyz/taiko-mono/issues/17845)) ([d95cc36](https://github.com/taikoxyz/taiko-mono/commit/d95cc36260ee4bf2aaf69181fa6444f419cc44af)) +* **protocol:** update Hekla deployment ([#17924](https://github.com/taikoxyz/taiko-mono/issues/17924)) ([46a3e00](https://github.com/taikoxyz/taiko-mono/commit/46a3e00659534a715fb315859463bd05bbdb65a9)) +* **protocol:** update Hekla deployments ([#17975](https://github.com/taikoxyz/taiko-mono/issues/17975)) ([c96627f](https://github.com/taikoxyz/taiko-mono/commit/c96627fcdd9ba91f26eeea2b329f0eb96dd36660)) +* **protocol:** update L1 deployment ([#17789](https://github.com/taikoxyz/taiko-mono/issues/17789)) ([a889f1a](https://github.com/taikoxyz/taiko-mono/commit/a889f1a3e6c27b6758e873572c371ac9399a3d9a)) +* **protocol:** update L1 deployment ([#17804](https://github.com/taikoxyz/taiko-mono/issues/17804)) ([25ace9b](https://github.com/taikoxyz/taiko-mono/commit/25ace9bd2b18d91cbf165968cc27d34ccbd7067a)) +* **protocol:** update L1 deployment ([#17812](https://github.com/taikoxyz/taiko-mono/issues/17812)) ([5b43df1](https://github.com/taikoxyz/taiko-mono/commit/5b43df170b6f97cb89360e2d210d4a768d9247c3)) +* **protocol:** update L1 deployment ([#17817](https://github.com/taikoxyz/taiko-mono/issues/17817)) ([311c948](https://github.com/taikoxyz/taiko-mono/commit/311c948850e8b4d46218fd4aba92d03bc6349445)) +* **protocol:** update mainnet deployment ([#17846](https://github.com/taikoxyz/taiko-mono/issues/17846)) ([ba6bf94](https://github.com/taikoxyz/taiko-mono/commit/ba6bf942213468310c6233051a90356268dea70f)) +* **protocol:** update mainnet deployment ([#17847](https://github.com/taikoxyz/taiko-mono/issues/17847)) ([92344df](https://github.com/taikoxyz/taiko-mono/commit/92344dfb8c97bae370d722f887fb2c603f96c480)) +* **protocol:** upgrade sp1 verifier in hekla ([#18027](https://github.com/taikoxyz/taiko-mono/issues/18027)) ([de27e6e](https://github.com/taikoxyz/taiko-mono/commit/de27e6e586e14410c309e68ce6b81504b9ba9a5b)) + + +### Code Refactoring + +* **protocol:** add MainnetGuardianProver ([#17805](https://github.com/taikoxyz/taiko-mono/issues/17805)) ([6f68316](https://github.com/taikoxyz/taiko-mono/commit/6f68316e89373670cf2c58bde5e64de196b9c139)) +* **protocol:** add MainnetSgxVerifier ([#17803](https://github.com/taikoxyz/taiko-mono/issues/17803)) ([a4be247](https://github.com/taikoxyz/taiko-mono/commit/a4be247e181861300d79af6454b3fd3776100b48)) +* **protocol:** added cached version of the bridge and vaults ([#17801](https://github.com/taikoxyz/taiko-mono/issues/17801)) ([b70cc57](https://github.com/taikoxyz/taiko-mono/commit/b70cc57704d750081a62a7e8e44f68f32efdc4c1)) +* **protocol:** avoid writing `livenessBond`, `proposedAt`, and `proposedIn` to storage ([17d67d7](https://github.com/taikoxyz/taiko-mono/commit/17d67d74c511bc11c2b7d821d8a381f74ef7b6a1)) +* **protocol:** convert metadata from V2 to V1 only once ([#17842](https://github.com/taikoxyz/taiko-mono/issues/17842)) ([55ced31](https://github.com/taikoxyz/taiko-mono/commit/55ced319d68fe40fe82d1c7e0a268735c3545923)) +* **protocol:** delete packages/protocol/contracts/compiled ([#17849](https://github.com/taikoxyz/taiko-mono/issues/17849)) ([1fd907c](https://github.com/taikoxyz/taiko-mono/commit/1fd907cc81807027e730c0e27e258230670522df)) +* **protocol:** extract an IBlockHash interface from TaikoL2 ([#18045](https://github.com/taikoxyz/taiko-mono/issues/18045)) ([bff481e](https://github.com/taikoxyz/taiko-mono/commit/bff481e8a2898fab8396d368de84f8f343c532f0)) +* **protocol:** improve mainnet gas efficiency with addresses cached ([#17791](https://github.com/taikoxyz/taiko-mono/issues/17791)) ([b12227d](https://github.com/taikoxyz/taiko-mono/commit/b12227d4d2b2636fb80e04ee7ebc2dec3c17faa8)) +* **protocol:** improve MainnetSgxVerifier ([#17811](https://github.com/taikoxyz/taiko-mono/issues/17811)) ([4e7a421](https://github.com/taikoxyz/taiko-mono/commit/4e7a421967a4cea897f1ffbeeae254fbcad27117)) +* **protocol:** introduce BlockV2 for client-side compability ([#17935](https://github.com/taikoxyz/taiko-mono/issues/17935)) ([e46cf29](https://github.com/taikoxyz/taiko-mono/commit/e46cf294862c293b73b817574669115b85e973a7)) +* **protocol:** name address manager param clearer ([#17806](https://github.com/taikoxyz/taiko-mono/issues/17806)) ([1d5a6ff](https://github.com/taikoxyz/taiko-mono/commit/1d5a6ff191e8457ee12c96cb73c074560c556a2a)) +* **protocol:** refactor TierProvider implementations ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) +* **protocol:** remove ProposerAccess for easier composability ([#17994](https://github.com/taikoxyz/taiko-mono/issues/17994)) ([80176a1](https://github.com/taikoxyz/taiko-mono/commit/80176a1525c374039256c779f4a2408971759d22)) +* **protocol:** remove the receive function from TaikoL1.sol ([#17865](https://github.com/taikoxyz/taiko-mono/issues/17865)) ([3542420](https://github.com/taikoxyz/taiko-mono/commit/35424204d9f41d49f4a12869ed4410b6de7f577e)) +* **protocol:** remove uncessary init2() from TaikoL2 ([#17973](https://github.com/taikoxyz/taiko-mono/issues/17973)) ([4e08881](https://github.com/taikoxyz/taiko-mono/commit/4e0888190e172c950dc5e81a5115ee0fb6df3f11)) +* **protocol:** restructure solidity code to match compilation targets ([#18059](https://github.com/taikoxyz/taiko-mono/issues/18059)) ([adc47f4](https://github.com/taikoxyz/taiko-mono/commit/adc47f408282c25c7a50c26e31130fc495734dcc)) +* **protocol:** simplify mainnet address caching ([ee464ca](https://github.com/taikoxyz/taiko-mono/commit/ee464caef68fdec325aa22758bb69e17dd039794)) +* **protocol:** use npm to manage third-party solidity dependency ([#17881](https://github.com/taikoxyz/taiko-mono/issues/17881)) ([d524e69](https://github.com/taikoxyz/taiko-mono/commit/d524e693449de9d65154471786fa4f5e8c45a381)) + + +### Tests + +* **protocol:** add test case of risc0 groth16 ([#17904](https://github.com/taikoxyz/taiko-mono/issues/17904)) ([90bc01d](https://github.com/taikoxyz/taiko-mono/commit/90bc01dfbef1129be1bd94e85c9ecd7c7b28b1da)) +* **taiko-client:** use env names which defined in flag configs ([#17921](https://github.com/taikoxyz/taiko-mono/issues/17921)) ([196b74e](https://github.com/taikoxyz/taiko-mono/commit/196b74eb2b4498bc3e6511915e011a885fcc530f)) + + +### Workflow + +* **protocol:** upgrade to use solc 0.8.27 ([#18037](https://github.com/taikoxyz/taiko-mono/issues/18037)) ([3a56b57](https://github.com/taikoxyz/taiko-mono/commit/3a56b5788b3e2473381429e5fddfaac2f10fa174)) + + +### Build + +* **deps:** bump merkletreejs from 0.3.11 to 0.4.0 ([#17942](https://github.com/taikoxyz/taiko-mono/issues/17942)) ([1624b71](https://github.com/taikoxyz/taiko-mono/commit/1624b711e3fe1862f000e1d2970d6aee1b8990c9)) + ## [1.8.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.7.0...protocol-v1.8.0) (2024-07-11) diff --git a/packages/protocol/package.json b/packages/protocol/package.json index 747686c68e..55940fea2b 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@taiko/protocol", - "version": "1.8.0", + "version": "1.9.0", "private": true, "scripts": { "buildMerkle": "ts-node ./utils/airdrop/buildMerkleTree.ts ./utils/airdrop/airdrop_db/example_claimList.json", From 57f49530828e6da2d28ab3979576befdee626c7d Mon Sep 17 00:00:00 2001 From: David Date: Thu, 12 Sep 2024 09:35:35 +0800 Subject: [PATCH 04/56] feat(taiko-client): update Go contract bindings after protocol restructure (#18075) --- packages/taiko-client/.golangci.yml | 1 - packages/taiko-client/bindings/.githead | 2 +- .../bindings/encoding/protocol_config.go | 6 ++--- .../bindings/gen_guardian_prover.go | 2 +- .../bindings/gen_lib_proposing.go | 2 +- .../taiko-client/bindings/gen_taiko_l1.go | 10 ++++---- .../taiko-client/bindings/gen_taiko_l2.go | 14 +++++------ .../bindings/metadata/interface.go | 2 +- .../bindings/metadata/metadata_legacy.go | 4 ++-- .../bindings/metadata/metadata_ontake.go | 2 +- .../anchor_tx_constructor.go | 6 ++--- .../anchor_tx_constructor_test.go | 2 +- .../driver/chain_syncer/beaconsync/syncer.go | 2 +- .../driver/chain_syncer/blob/syncer.go | 2 -- .../txlist_decompressor.go | 2 -- .../integration_test/deploy_l1_contract.sh | 2 +- .../taiko-client/internal/testutils/helper.go | 2 -- packages/taiko-client/internal/utils/utils.go | 1 - packages/taiko-client/pkg/rpc/methods.go | 7 +++--- packages/taiko-client/pkg/rpc/methods_test.go | 2 +- .../proposer/transaction_builder/blob.go | 2 +- .../taiko-client/prover/event_handler/util.go | 1 - .../proof_producer/guardian_producer_test.go | 9 +++---- packages/taiko-client/scripts/gen_bindings.sh | 24 +++++++++---------- 24 files changed, 50 insertions(+), 59 deletions(-) diff --git a/packages/taiko-client/.golangci.yml b/packages/taiko-client/.golangci.yml index b4a51f8a93..76330f12d5 100644 --- a/packages/taiko-client/.golangci.yml +++ b/packages/taiko-client/.golangci.yml @@ -36,7 +36,6 @@ linters: - goimports - gosimple - govet - - gosec - gofmt - ineffassign - importas diff --git a/packages/taiko-client/bindings/.githead b/packages/taiko-client/bindings/.githead index 8ea4d89348..65f7ccb838 100644 --- a/packages/taiko-client/bindings/.githead +++ b/packages/taiko-client/bindings/.githead @@ -1 +1 @@ -fe2e9b9930db848941a28e8dcfd873ad6361204b +adc47f408282c25c7a50c26e31130fc495734dcc diff --git a/packages/taiko-client/bindings/encoding/protocol_config.go b/packages/taiko-client/bindings/encoding/protocol_config.go index 1dba2ed6be..21f7f9d440 100644 --- a/packages/taiko-client/bindings/encoding/protocol_config.go +++ b/packages/taiko-client/bindings/encoding/protocol_config.go @@ -20,7 +20,7 @@ var ( StateRootSyncInternal: 16, MaxAnchorHeightOffset: 64, OntakeForkHeight: 2, - BaseFeeConfig: bindings.TaikoDataBaseFeeConfig{ + BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ AdjustmentQuotient: 8, SharingPctg: 75, GasIssuancePerSecond: 5_000_000, @@ -38,7 +38,7 @@ var ( StateRootSyncInternal: 16, MaxAnchorHeightOffset: 64, OntakeForkHeight: 840_512, - BaseFeeConfig: bindings.TaikoDataBaseFeeConfig{ + BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ AdjustmentQuotient: 8, SharingPctg: 75, GasIssuancePerSecond: 5_000_000, @@ -57,7 +57,7 @@ var ( MaxAnchorHeightOffset: 64, // TODO: update this value when mainnet fork height is decided OntakeForkHeight: 9_000_000, - BaseFeeConfig: bindings.TaikoDataBaseFeeConfig{ + BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ AdjustmentQuotient: 8, GasIssuancePerSecond: 5_000_000, MinGasExcess: 1_340_000_000, diff --git a/packages/taiko-client/bindings/gen_guardian_prover.go b/packages/taiko-client/bindings/gen_guardian_prover.go index b234a63447..657f347151 100644 --- a/packages/taiko-client/bindings/gen_guardian_prover.go +++ b/packages/taiko-client/bindings/gen_guardian_prover.go @@ -60,7 +60,7 @@ type TaikoDataTierProof struct { // GuardianProverMetaData contains all meta data concerning the GuardianProver contract. var GuardianProverMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approvals\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proofHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"approvalBits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"_meta\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_proof\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"approveV2\",\"inputs\":[{\"name\":\"_metaV2\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"_tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_proof\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableProvingAutoPause\",\"inputs\":[{\"name\":\"_enable\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableTaikoTokenAllowance\",\"inputs\":[{\"name\":\"_enable\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianIds\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardians\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestProofHash\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseTaikoProving\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"provingAutoPauseEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGuardians\",\"inputs\":[{\"name\":\"_newGuardians\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"_minGuardians\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_clearData\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verifyBatchProof\",\"inputs\":[{\"name\":\"_ctxs\",\"type\":\"tuple[]\",\"internalType\":\"structIVerifier.ContextV2[]\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isContesting\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"msgSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyProof\",\"inputs\":[{\"name\":\"_ctx\",\"type\":\"tuple\",\"internalType\":\"structIVerifier.Context\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isContesting\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"msgSender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawTaikoToken\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Approved\",\"inputs\":[{\"name\":\"operationId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"approvalBits\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"minGuardiansReached\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConflictingProofs\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"currentProofHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newProofHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianApproval\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"approved\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"proofData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardiansUpdated\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"guardians\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingAutoPauseEnabled\",\"inputs\":[{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_GUARDIAN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_GUARDIAN_SET\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_MIN_GUARDIANS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GV_PERMISSION_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GV_ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approvals\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proofHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"approvalBits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"_meta\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_proof\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"approveV2\",\"inputs\":[{\"name\":\"_metaV2\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"_tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_proof\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableProvingAutoPause\",\"inputs\":[{\"name\":\"_enable\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableTaikoTokenAllowance\",\"inputs\":[{\"name\":\"_enable\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianIds\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardians\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestProofHash\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseTaikoProving\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"provingAutoPauseEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGuardians\",\"inputs\":[{\"name\":\"_newGuardians\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"_minGuardians\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_clearData\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verifyBatchProof\",\"inputs\":[{\"name\":\"_ctxs\",\"type\":\"tuple[]\",\"internalType\":\"structIVerifier.ContextV2[]\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isContesting\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"msgSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tran\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyProof\",\"inputs\":[{\"name\":\"_ctx\",\"type\":\"tuple\",\"internalType\":\"structIVerifier.Context\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"isContesting\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"msgSender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TierProof\",\"components\":[{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawTaikoToken\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Approved\",\"inputs\":[{\"name\":\"operationId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"approvalBits\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"minGuardiansReached\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConflictingProofs\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"currentProofHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newProofHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianApproval\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"approved\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"proofData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardiansUpdated\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"guardians\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingAutoPauseEnabled\",\"inputs\":[{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_GUARDIAN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_GUARDIAN_SET\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_MIN_GUARDIANS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GP_INVALID_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GV_PERMISSION_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GV_ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", } // GuardianProverABI is the input ABI used to generate the binding from. diff --git a/packages/taiko-client/bindings/gen_lib_proposing.go b/packages/taiko-client/bindings/gen_lib_proposing.go index 04178fe6b0..f1f45d44b9 100644 --- a/packages/taiko-client/bindings/gen_lib_proposing.go +++ b/packages/taiko-client/bindings/gen_lib_proposing.go @@ -31,7 +31,7 @@ var ( // LibProposingMetaData contains all meta data concerning the LibProposing contract. var LibProposingMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"BlockProposed\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"depositsProcessed\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondDebited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CalldataTxList\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"txList\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ETH_TRANSFER_FAILED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_BLOB_NOT_AVAILABLE\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_BLOB_NOT_FOUND\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_ANCHOR_BLOCK\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_CUSTOM_PROPOSER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PROPOSER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_TIMESTAMP\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_TOO_MANY_BLOCKS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_UNEXPECTED_PARENT\",\"inputs\":[]}]", + ABI: "[{\"type\":\"event\",\"name\":\"BlockProposed\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"depositsProcessed\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondDebited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CalldataTxList\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"txList\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ETH_TRANSFER_FAILED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_BLOB_NOT_AVAILABLE\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_BLOB_NOT_FOUND\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_ANCHOR_BLOCK\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_CUSTOM_PROPOSER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PROPOSER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_TIMESTAMP\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_LIVENESS_BOND_NOT_RECEIVED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_TOO_MANY_BLOCKS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_UNEXPECTED_PARENT\",\"inputs\":[]}]", } // LibProposingABI is the input ABI used to generate the binding from. diff --git a/packages/taiko-client/bindings/gen_taiko_l1.go b/packages/taiko-client/bindings/gen_taiko_l1.go index 19a5ee7602..2a35219f6f 100644 --- a/packages/taiko-client/bindings/gen_taiko_l1.go +++ b/packages/taiko-client/bindings/gen_taiko_l1.go @@ -29,8 +29,8 @@ var ( _ = abi.ConvertType ) -// TaikoDataBaseFeeConfig is an auto generated low-level Go binding around an user-defined struct. -type TaikoDataBaseFeeConfig struct { +// LibSharedDataBaseFeeConfig is an auto generated low-level Go binding around an user-defined struct. +type LibSharedDataBaseFeeConfig struct { AdjustmentQuotient uint8 SharingPctg uint8 GasIssuancePerSecond uint32 @@ -89,7 +89,7 @@ type TaikoDataBlockMetadataV2 struct { BlobTxListOffset uint32 BlobTxListLength uint32 BlobIndex uint8 - BaseFeeConfig TaikoDataBaseFeeConfig + BaseFeeConfig LibSharedDataBaseFeeConfig } // TaikoDataBlockV2 is an auto generated low-level Go binding around an user-defined struct. @@ -115,7 +115,7 @@ type TaikoDataConfig struct { LivenessBond *big.Int StateRootSyncInternal uint8 MaxAnchorHeightOffset uint64 - BaseFeeConfig TaikoDataBaseFeeConfig + BaseFeeConfig LibSharedDataBaseFeeConfig OntakeForkHeight uint64 } @@ -169,7 +169,7 @@ type TaikoDataTransitionState struct { // TaikoL1ClientMetaData contains all meta data concerning the TaikoL1Client contract. var TaikoL1ClientMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bondBalanceOf\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositBond\",\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBlock\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"blk_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Block\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nextTransitionId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"verifiedTransitionId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlockV2\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"blk_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockV2\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nextTransitionId\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"livenessBondReturned\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"verifiedTransitionId\",\"type\":\"uint24\",\"internalType\":\"uint24\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Config\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockMaxProposals\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockRingBufferSize\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"stateRootSyncInternal\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"maxAnchorHeightOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"ontakeForkHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getLastSyncedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"blockId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"verifiedAt_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLastVerifiedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"blockId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"verifiedAt_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateVariables\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotA\",\"components\":[{\"name\":\"genesisHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"genesisTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSyncedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSynecdAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransition\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_tid\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TransitionState\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"contester\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reserved1\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransition\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TransitionState\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"contester\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reserved1\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVerifiedBlockProver\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"prover_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_toPause\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"init2\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseProving\",\"inputs\":[{\"name\":\"_pause\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeBlock\",\"inputs\":[{\"name\":\"_params\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_txList\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"meta_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"deposits_\",\"type\":\"tuple[]\",\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"proposeBlockV2\",\"inputs\":[{\"name\":\"_params\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_txList\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"meta_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proposeBlocksV2\",\"inputs\":[{\"name\":\"_paramsArr\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"_txListArr\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[{\"name\":\"metaArr_\",\"type\":\"tuple[]\",\"internalType\":\"structTaikoData.BlockMetadataV2[]\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proveBlock\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proveBlocks\",\"inputs\":[{\"name\":\"_blockIds\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"_inputs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"_batchProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"state\",\"inputs\":[],\"outputs\":[{\"name\":\"__reserve1\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"slotA\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotA\",\"components\":[{\"name\":\"genesisHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"genesisTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSyncedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSynecdAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"slotB\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verifyBlocks\",\"inputs\":[{\"name\":\"_maxBlocksToVerify\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawBond\",\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposed\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"depositsProcessed\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerified\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerified\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerifiedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerifiedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondCredited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondDebited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CalldataTxList\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"txList\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingPaused\",\"inputs\":[{\"name\":\"paused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingPaused\",\"inputs\":[{\"name\":\"paused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateVariablesUpdated\",\"inputs\":[{\"name\":\"slotB\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionContested\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"contester\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionContestedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"contester\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionProved\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionProvedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_FORK_ERROR\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_BLOCK_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_GENESIS_HASH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_PROVING_PAUSED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_TRANSITION_NOT_FOUND\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bondBalanceOf\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositBond\",\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBlock\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"blk_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Block\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nextTransitionId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"verifiedTransitionId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlockV2\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"blk_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockV2\",\"components\":[{\"name\":\"metaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nextTransitionId\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"livenessBondReturned\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"verifiedTransitionId\",\"type\":\"uint24\",\"internalType\":\"uint24\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.Config\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockMaxProposals\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockRingBufferSize\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxBlocksToVerify\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockMaxGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"stateRootSyncInternal\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"maxAnchorHeightOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"ontakeForkHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getLastSyncedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"blockId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"verifiedAt_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLastVerifiedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"blockId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHash_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"verifiedAt_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateVariables\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotA\",\"components\":[{\"name\":\"genesisHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"genesisTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSyncedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSynecdAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransition\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_tid\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TransitionState\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"contester\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reserved1\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransition\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.TransitionState\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"prover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"contester\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reserved1\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVerifiedBlockProver\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"prover_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_genesisBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_toPause\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"init2\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseProving\",\"inputs\":[{\"name\":\"_pause\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposeBlock\",\"inputs\":[{\"name\":\"_params\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_txList\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"meta_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"deposits_\",\"type\":\"tuple[]\",\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"proposeBlockV2\",\"inputs\":[{\"name\":\"_params\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_txList\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"meta_\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proposeBlocksV2\",\"inputs\":[{\"name\":\"_paramsArr\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"_txListArr\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[{\"name\":\"metaArr_\",\"type\":\"tuple[]\",\"internalType\":\"structTaikoData.BlockMetadataV2[]\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proveBlock\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proveBlocks\",\"inputs\":[{\"name\":\"_blockIds\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"_inputs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"_batchProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"state\",\"inputs\":[],\"outputs\":[{\"name\":\"__reserve1\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"slotA\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotA\",\"components\":[{\"name\":\"genesisHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"genesisTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSyncedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastSynecdAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"slotB\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verifyBlocks\",\"inputs\":[{\"name\":\"_maxBlocksToVerify\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawBond\",\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposed\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"assignedProver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadata\",\"components\":[{\"name\":\"l1Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"depositsHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l1Height\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"depositsProcessed\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structTaikoData.EthDeposit[]\",\"components\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockProposedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"meta\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.BlockMetadataV2\",\"components\":[{\"name\":\"anchorBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"difficulty\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blobHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extraData\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"coinbase\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minTier\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"blobUsed\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentMetaHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"livenessBond\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"proposedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blobTxListOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobTxListLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerified\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerified\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerifiedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BlockVerifiedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondCredited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BondDebited\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CalldataTxList\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"txList\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingPaused\",\"inputs\":[{\"name\":\"paused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProvingPaused\",\"inputs\":[{\"name\":\"paused\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateVariablesUpdated\",\"inputs\":[{\"name\":\"slotB\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.SlotB\",\"components\":[{\"name\":\"numBlocks\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastVerifiedBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"provingPaused\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"__reservedB1\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"__reservedB2\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"__reservedB3\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"lastUnpausedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionContested\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"contester\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionContestedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"contester\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"contestBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionProved\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransitionProvedV2\",\"inputs\":[{\"name\":\"blockId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"tran\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structTaikoData.Transition\",\"components\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"graffiti\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"prover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"validityBond\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"tier\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"proposedIn\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_FORK_ERROR\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_BLOCK_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_GENESIS_HASH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_PROVING_PAUSED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_TRANSITION_NOT_FOUND\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L1_UNEXPECTED_TRANSITION_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", } // TaikoL1ClientABI is the input ABI used to generate the binding from. diff --git a/packages/taiko-client/bindings/gen_taiko_l2.go b/packages/taiko-client/bindings/gen_taiko_l2.go index ce1f5a2758..ac1f4a9d47 100644 --- a/packages/taiko-client/bindings/gen_taiko_l2.go +++ b/packages/taiko-client/bindings/gen_taiko_l2.go @@ -37,7 +37,7 @@ type LibL2ConfigConfig struct { // TaikoL2ClientMetaData contains all meta data concerning the TaikoL2Client contract. var TaikoL2ClientMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"adjustExcess\",\"inputs\":[{\"name\":\"_currGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_currGasTarget\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_newGasTarget\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"newGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"anchor\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1BlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"anchorV2\",\"inputs\":[{\"name\":\"_anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_anchorStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateBaseFee\",\"inputs\":[{\"name\":\"_baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structTaikoData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_blocktime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"basefee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"parentGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBasefee\",\"inputs\":[{\"name\":\"_anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"basefee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"parentGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlockHash\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structLibL2Config.Config\",\"components\":[{\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_initialGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastSyncedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ontakeForkHeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentGasExcess\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentGasTarget\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publicInputHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"skipFeeCheck\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Anchored\",\"inputs\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"parentGasExcess\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"EIP1559_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ETH_TRANSFER_FAILED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_BASEFEE_MISMATCH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_FORK_ERROR\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_L1_CHAIN_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_L2_CHAIN_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_PARAM\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_SENDER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_TOO_LATE\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"GOLDEN_TOUCH_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addressManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"adjustExcess\",\"inputs\":[{\"name\":\"_currGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_currGasTarget\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_newGasTarget\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"newGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"anchor\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1BlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"anchorV2\",\"inputs\":[{\"name\":\"_anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_anchorStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateBaseFee\",\"inputs\":[{\"name\":\"_baseFeeConfig\",\"type\":\"tuple\",\"internalType\":\"structLibSharedData.BaseFeeConfig\",\"components\":[{\"name\":\"adjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"sharingPctg\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"gasIssuancePerSecond\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"minGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxGasIssuancePerBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_blocktime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"basefee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"parentGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBasefee\",\"inputs\":[{\"name\":\"_anchorBlockId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_parentGasUsed\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"basefee_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"parentGasExcess_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlockHash\",\"inputs\":[{\"name\":\"_blockId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structLibL2Config.Config\",\"components\":[{\"name\":\"gasTargetPerL1Block\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"basefeeAdjustmentQuotient\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"impl\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inNonReentrant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"init\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupAddressManager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_initialGasExcess\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastSyncedBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastUnpausedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ontakeForkHeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentGasExcess\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentGasTarget\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publicInputHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_allowZeroAddress\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"skipFeeCheck\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeTo\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminChanged\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Anchored\",\"inputs\":[{\"name\":\"parentHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"parentGasExcess\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconUpgraded\",\"inputs\":[{\"name\":\"beacon\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"EIP1559_INVALID_PARAMS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ETH_TRANSFER_FAILED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FUNC_NOT_IMPLEMENTED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"INVALID_PAUSE_STATUS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_BASEFEE_MISMATCH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_FORK_ERROR\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_L1_CHAIN_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_L2_CHAIN_ID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_PARAM\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_INVALID_SENDER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_PUBLIC_INPUT_HASH_MISMATCH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2_TOO_LATE\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"REENTRANT_CALL\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_DENIED\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_INVALID_MANAGER\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_UNEXPECTED_CHAINID\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RESOLVER_ZERO_ADDR\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZERO_ADDRESS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZERO_VALUE\",\"inputs\":[]}]", } // TaikoL2ClientABI is the input ABI used to generate the binding from. @@ -282,7 +282,7 @@ func (_TaikoL2Client *TaikoL2ClientCallerSession) AdjustExcess(_currGasExcess ui // CalculateBaseFee is a free data retrieval call binding the contract method 0xe902461a. // // Solidity: function calculateBaseFee((uint8,uint8,uint32,uint64,uint32) _baseFeeConfig, uint64 _blocktime, uint64 _parentGasExcess, uint32 _parentGasUsed) pure returns(uint256 basefee_, uint64 parentGasExcess_) -func (_TaikoL2Client *TaikoL2ClientCaller) CalculateBaseFee(opts *bind.CallOpts, _baseFeeConfig TaikoDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { +func (_TaikoL2Client *TaikoL2ClientCaller) CalculateBaseFee(opts *bind.CallOpts, _baseFeeConfig LibSharedDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { Basefee *big.Int ParentGasExcess uint64 }, error) { @@ -307,7 +307,7 @@ func (_TaikoL2Client *TaikoL2ClientCaller) CalculateBaseFee(opts *bind.CallOpts, // CalculateBaseFee is a free data retrieval call binding the contract method 0xe902461a. // // Solidity: function calculateBaseFee((uint8,uint8,uint32,uint64,uint32) _baseFeeConfig, uint64 _blocktime, uint64 _parentGasExcess, uint32 _parentGasUsed) pure returns(uint256 basefee_, uint64 parentGasExcess_) -func (_TaikoL2Client *TaikoL2ClientSession) CalculateBaseFee(_baseFeeConfig TaikoDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { +func (_TaikoL2Client *TaikoL2ClientSession) CalculateBaseFee(_baseFeeConfig LibSharedDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { Basefee *big.Int ParentGasExcess uint64 }, error) { @@ -317,7 +317,7 @@ func (_TaikoL2Client *TaikoL2ClientSession) CalculateBaseFee(_baseFeeConfig Taik // CalculateBaseFee is a free data retrieval call binding the contract method 0xe902461a. // // Solidity: function calculateBaseFee((uint8,uint8,uint32,uint64,uint32) _baseFeeConfig, uint64 _blocktime, uint64 _parentGasExcess, uint32 _parentGasUsed) pure returns(uint256 basefee_, uint64 parentGasExcess_) -func (_TaikoL2Client *TaikoL2ClientCallerSession) CalculateBaseFee(_baseFeeConfig TaikoDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { +func (_TaikoL2Client *TaikoL2ClientCallerSession) CalculateBaseFee(_baseFeeConfig LibSharedDataBaseFeeConfig, _blocktime uint64, _parentGasExcess uint64, _parentGasUsed uint32) (struct { Basefee *big.Int ParentGasExcess uint64 }, error) { @@ -1003,21 +1003,21 @@ func (_TaikoL2Client *TaikoL2ClientTransactorSession) Anchor(arg0 [32]byte, _l1S // AnchorV2 is a paid mutator transaction binding the contract method 0xfd85eb2d. // // Solidity: function anchorV2(uint64 _anchorBlockId, bytes32 _anchorStateRoot, uint32 _parentGasUsed, (uint8,uint8,uint32,uint64,uint32) _baseFeeConfig) returns() -func (_TaikoL2Client *TaikoL2ClientTransactor) AnchorV2(opts *bind.TransactOpts, _anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig TaikoDataBaseFeeConfig) (*types.Transaction, error) { +func (_TaikoL2Client *TaikoL2ClientTransactor) AnchorV2(opts *bind.TransactOpts, _anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig LibSharedDataBaseFeeConfig) (*types.Transaction, error) { return _TaikoL2Client.contract.Transact(opts, "anchorV2", _anchorBlockId, _anchorStateRoot, _parentGasUsed, _baseFeeConfig) } // AnchorV2 is a paid mutator transaction binding the contract method 0xfd85eb2d. // // Solidity: function anchorV2(uint64 _anchorBlockId, bytes32 _anchorStateRoot, uint32 _parentGasUsed, (uint8,uint8,uint32,uint64,uint32) _baseFeeConfig) returns() -func (_TaikoL2Client *TaikoL2ClientSession) AnchorV2(_anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig TaikoDataBaseFeeConfig) (*types.Transaction, error) { +func (_TaikoL2Client *TaikoL2ClientSession) AnchorV2(_anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig LibSharedDataBaseFeeConfig) (*types.Transaction, error) { return _TaikoL2Client.Contract.AnchorV2(&_TaikoL2Client.TransactOpts, _anchorBlockId, _anchorStateRoot, _parentGasUsed, _baseFeeConfig) } // AnchorV2 is a paid mutator transaction binding the contract method 0xfd85eb2d. // // Solidity: function anchorV2(uint64 _anchorBlockId, bytes32 _anchorStateRoot, uint32 _parentGasUsed, (uint8,uint8,uint32,uint64,uint32) _baseFeeConfig) returns() -func (_TaikoL2Client *TaikoL2ClientTransactorSession) AnchorV2(_anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig TaikoDataBaseFeeConfig) (*types.Transaction, error) { +func (_TaikoL2Client *TaikoL2ClientTransactorSession) AnchorV2(_anchorBlockId uint64, _anchorStateRoot [32]byte, _parentGasUsed uint32, _baseFeeConfig LibSharedDataBaseFeeConfig) (*types.Transaction, error) { return _TaikoL2Client.Contract.AnchorV2(&_TaikoL2Client.TransactOpts, _anchorBlockId, _anchorStateRoot, _parentGasUsed, _baseFeeConfig) } diff --git a/packages/taiko-client/bindings/metadata/interface.go b/packages/taiko-client/bindings/metadata/interface.go index 4859ac22db..52e9e66b17 100644 --- a/packages/taiko-client/bindings/metadata/interface.go +++ b/packages/taiko-client/bindings/metadata/interface.go @@ -31,7 +31,7 @@ type TaikoBlockMetaData interface { GetBlobTxListOffset() uint32 GetBlobTxListLength() uint32 GetBlobIndex() uint8 - GetBaseFeeConfig() *bindings.TaikoDataBaseFeeConfig + GetBaseFeeConfig() *bindings.LibSharedDataBaseFeeConfig GetRawBlockHeight() *big.Int GetRawBlockHash() common.Hash GetTxIndex() uint diff --git a/packages/taiko-client/bindings/metadata/metadata_legacy.go b/packages/taiko-client/bindings/metadata/metadata_legacy.go index 673f6d59d2..1540834689 100644 --- a/packages/taiko-client/bindings/metadata/metadata_legacy.go +++ b/packages/taiko-client/bindings/metadata/metadata_legacy.go @@ -133,8 +133,8 @@ func (m *TaikoDataBlockMetadataLegacy) GetBlobIndex() uint8 { } // GetBaseFeeConfig returns the L2 block basefee configs. -func (m *TaikoDataBlockMetadataLegacy) GetBaseFeeConfig() *bindings.TaikoDataBaseFeeConfig { - return &bindings.TaikoDataBaseFeeConfig{} +func (m *TaikoDataBlockMetadataLegacy) GetBaseFeeConfig() *bindings.LibSharedDataBaseFeeConfig { + return &bindings.LibSharedDataBaseFeeConfig{} } // GetRawBlockHeight returns the raw L1 block height. diff --git a/packages/taiko-client/bindings/metadata/metadata_ontake.go b/packages/taiko-client/bindings/metadata/metadata_ontake.go index 7ee7843ba1..70f44a6b8c 100644 --- a/packages/taiko-client/bindings/metadata/metadata_ontake.go +++ b/packages/taiko-client/bindings/metadata/metadata_ontake.go @@ -129,7 +129,7 @@ func (m *TaikoDataBlockMetadataOntake) GetBlobIndex() uint8 { } // GetBaseFeeConfig returns the L2 block basefee configs. -func (m *TaikoDataBlockMetadataOntake) GetBaseFeeConfig() *bindings.TaikoDataBaseFeeConfig { +func (m *TaikoDataBlockMetadataOntake) GetBaseFeeConfig() *bindings.LibSharedDataBaseFeeConfig { return &m.BaseFeeConfig } diff --git a/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor.go b/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor.go index fc70d6ae90..58289f5078 100644 --- a/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor.go +++ b/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor.go @@ -66,7 +66,7 @@ func (c *AnchorTxConstructor) AssembleAnchorTx( "baseFee", utils.WeiToGWei(baseFee), "gasUsed", parentGasUsed, ) - // #nosec G115 + return c.rpc.TaikoL2.Anchor(opts, l1Hash, l1Header.Root, l1Height.Uint64(), uint32(parentGasUsed)) } @@ -77,7 +77,7 @@ func (c *AnchorTxConstructor) AssembleAnchorV2Tx( anchorBlockID *big.Int, anchorStateRoot common.Hash, parentGasUsed uint64, - baseFeeConfig *bindings.TaikoDataBaseFeeConfig, + baseFeeConfig *bindings.LibSharedDataBaseFeeConfig, // Height of the L2 block which including the TaikoL2.anchorV2 transaction. l2Height *big.Int, baseFee *big.Int, @@ -97,7 +97,7 @@ func (c *AnchorTxConstructor) AssembleAnchorV2Tx( "basefeeAdjustmentQuotient", baseFeeConfig.AdjustmentQuotient, "baseFee", utils.WeiToGWei(baseFee), ) - // #nosec G115 + return c.rpc.TaikoL2.AnchorV2( opts, anchorBlockID.Uint64(), diff --git a/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor_test.go b/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor_test.go index fea401a75f..e5bb427a63 100644 --- a/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor_test.go +++ b/packages/taiko-client/driver/anchor_tx_constructor/anchor_tx_constructor_test.go @@ -49,7 +49,7 @@ func (s *AnchorTxConstructorTestSuite) TestAssembleAnchorV2Tx() { s.l1Height, s.l1Hash, 1024, - &bindings.TaikoDataBaseFeeConfig{}, + &bindings.LibSharedDataBaseFeeConfig{}, common.Big1, common.Big256, ) diff --git a/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go b/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go index 90d91e86f9..3290cd7f00 100644 --- a/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go +++ b/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go @@ -119,7 +119,7 @@ func (s *Syncer) getBlockPayload(ctx context.Context, blockID uint64) (*engine.E ts, err := s.rpc.GetTransition( ctx, new(big.Int).SetUint64(blockInfo.BlockId), - // #nosec G115 + uint32(blockInfo.VerifiedTransitionId.Uint64()), ) if err != nil { diff --git a/packages/taiko-client/driver/chain_syncer/blob/syncer.go b/packages/taiko-client/driver/chain_syncer/blob/syncer.go index 37ce3073a8..a5287f39d3 100644 --- a/packages/taiko-client/driver/chain_syncer/blob/syncer.go +++ b/packages/taiko-client/driver/chain_syncer/blob/syncer.go @@ -211,7 +211,6 @@ func (s *Syncer) onBlockProposed( // only happen when testing. if meta.GetTimestamp() > uint64(time.Now().Unix()) { log.Warn("Future L2 block, waiting", "L2BlockTimestamp", meta.GetTimestamp(), "now", time.Now().Unix()) - // #nosec G115 time.Sleep(time.Until(time.Unix(int64(meta.GetTimestamp()), 0))) } @@ -586,7 +585,6 @@ func (s *Syncer) retrievePastBlock( ts, err := s.rpc.GetTransition( ctx, new(big.Int).SetUint64(blockInfo.BlockId), - // #nosec G115 uint32(blockInfo.VerifiedTransitionId.Uint64()), ) if err != nil { diff --git a/packages/taiko-client/driver/txlist_decompressor/txlist_decompressor.go b/packages/taiko-client/driver/txlist_decompressor/txlist_decompressor.go index 7e760252d8..e288115fc8 100644 --- a/packages/taiko-client/driver/txlist_decompressor/txlist_decompressor.go +++ b/packages/taiko-client/driver/txlist_decompressor/txlist_decompressor.go @@ -50,7 +50,6 @@ func (v *TxListDecompressor) TryDecompress( // If calldata is used, the compressed bytes of the transaction list must be // less than or equal to maxBytesPerTxList. - // #nosec G115 if !blobUsed && (len(txListBytes) > int(v.maxBytesPerTxList)) { log.Info("Compressed transactions list binary too large", "length", len(txListBytes), "blockID", blockID) return []byte{} @@ -103,7 +102,6 @@ func (v *TxListDecompressor) TryDecompressHekla( // If calldata is used, the compressed bytes of the transaction list must be // less than or equal to maxBytesPerTxList. - // #nosec G115 if !blobUsed && (len(txListBytes) > int(v.maxBytesPerTxList)) { log.Info("Compressed transactions list binary too large", "length", len(txListBytes), "blockID", blockID) return []byte{} diff --git a/packages/taiko-client/integration_test/deploy_l1_contract.sh b/packages/taiko-client/integration_test/deploy_l1_contract.sh index 9bc9e47b11..8b6b5d8fc8 100755 --- a/packages/taiko-client/integration_test/deploy_l1_contract.sh +++ b/packages/taiko-client/integration_test/deploy_l1_contract.sh @@ -6,7 +6,7 @@ source scripts/common.sh source integration_test/l1_env.sh cd ../protocol && - forge script script/DeployOnL1.s.sol:DeployOnL1 \ + forge script script/layer1/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \ --fork-url "$L1_HTTP" \ --broadcast \ --ffi \ diff --git a/packages/taiko-client/internal/testutils/helper.go b/packages/taiko-client/internal/testutils/helper.go index fa51d95f17..f8a96b2a58 100644 --- a/packages/taiko-client/internal/testutils/helper.go +++ b/packages/taiko-client/internal/testutils/helper.go @@ -135,7 +135,6 @@ func (s *ClientTestSuite) ProposeAndInsertValidBlock( close(sink2) }() - // #nosec G115 baseFeeInfo, err := s.RPCClient.TaikoL2.GetBasefee(nil, l1Head.Number.Uint64()+1, uint32(l2Head.GasUsed)) s.Nil(err) @@ -215,7 +214,6 @@ func (s *ClientTestSuite) ProposeValidBlock( close(sink) }() - // #nosec G115 baseFeeInfo, err := s.RPCClient.TaikoL2.GetBasefee(nil, l1Head.Number.Uint64()+1, uint32(l2Head.GasUsed)) s.Nil(err) diff --git a/packages/taiko-client/internal/utils/utils.go b/packages/taiko-client/internal/utils/utils.go index 7e02ec85b7..1eaea75dd8 100644 --- a/packages/taiko-client/internal/utils/utils.go +++ b/packages/taiko-client/internal/utils/utils.go @@ -54,7 +54,6 @@ func RandUint32(max *big.Int) uint32 { max.SetUint64(math.MaxUint32) } num, _ := rand.Int(rand.Reader, max) - // #nosec G115 return uint32(num.Uint64()) } diff --git a/packages/taiko-client/pkg/rpc/methods.go b/packages/taiko-client/pkg/rpc/methods.go index afd058e8d7..4317902e68 100644 --- a/packages/taiko-client/pkg/rpc/methods.go +++ b/packages/taiko-client/pkg/rpc/methods.go @@ -273,7 +273,7 @@ func (c *Client) CalculateBaseFee( l2Head *types.Header, anchorBlockID *big.Int, isOntake bool, - baseFeeConfig *bindings.TaikoDataBaseFeeConfig, + baseFeeConfig *bindings.LibSharedDataBaseFeeConfig, currentTimestamp uint64, ) (*big.Int, error) { var ( @@ -323,7 +323,7 @@ func (c *Client) CalculateBaseFee( *baseFeeConfig, currentTimestamp-l2Head.Time, parentGasExcess, - uint32(l2Head.GasUsed), // #nosec G115 + uint32(l2Head.GasUsed), ) if err != nil { return nil, err @@ -332,7 +332,7 @@ func (c *Client) CalculateBaseFee( baseFeeInfo, err = c.TaikoL2.GetBasefee( &bind.CallOpts{BlockNumber: l2Head.Number, Context: ctx}, anchorBlockID.Uint64(), - uint32(l2Head.GasUsed), // #nosec G115 + uint32(l2Head.GasUsed), ) if err != nil { return nil, err @@ -693,7 +693,6 @@ func (c *Client) checkSyncedL1SnippetFromAnchor( return true, nil } - // #nosec G115 if parentGasUsed != uint32(parent.GasUsed()) { log.Info( "Reorg detected due to parent gas used mismatch", diff --git a/packages/taiko-client/pkg/rpc/methods_test.go b/packages/taiko-client/pkg/rpc/methods_test.go index 47d0fa48ac..0aa743b994 100644 --- a/packages/taiko-client/pkg/rpc/methods_test.go +++ b/packages/taiko-client/pkg/rpc/methods_test.go @@ -81,7 +81,7 @@ func TestGetSyncedL1SnippetFromAnchor(t *testing.T) { l1BlockHash := randomHash() l1StateRoot := randomHash() l1Height := randomHash().Big().Uint64() - parentGasUsed := uint32(randomHash().Big().Uint64()) // #nosec G115 + parentGasUsed := uint32(randomHash().Big().Uint64()) testAddrPrivKey, err := crypto.ToECDSA(common.Hex2Bytes(encoding.GoldenTouchPrivKey)) require.Nil(t, err) diff --git a/packages/taiko-client/proposer/transaction_builder/blob.go b/packages/taiko-client/proposer/transaction_builder/blob.go index 56d8275272..a76741c2a3 100644 --- a/packages/taiko-client/proposer/transaction_builder/blob.go +++ b/packages/taiko-client/proposer/transaction_builder/blob.go @@ -132,7 +132,7 @@ func (b *BlobTransactionBuilder) Build( AnchorBlockId: 0, Timestamp: 0, BlobTxListOffset: 0, - // #nosec G115 + BlobTxListLength: uint32(len(txListBytes)), BlobIndex: 0, }); err != nil { diff --git a/packages/taiko-client/prover/event_handler/util.go b/packages/taiko-client/prover/event_handler/util.go index 1f851941d3..1cf306ce52 100644 --- a/packages/taiko-client/prover/event_handler/util.go +++ b/packages/taiko-client/prover/event_handler/util.go @@ -130,6 +130,5 @@ func IsProvingWindowExpired( now = uint64(time.Now().Unix()) expiredAt = metadata.GetTimestamp() + uint64(provingWindow.Seconds()) ) - // #nosec G115 return now > expiredAt, time.Unix(int64(expiredAt), 0), time.Duration(expiredAt-now) * time.Second, nil } diff --git a/packages/taiko-client/prover/proof_producer/guardian_producer_test.go b/packages/taiko-client/prover/proof_producer/guardian_producer_test.go index 2d51c0073a..85d0663e00 100644 --- a/packages/taiko-client/prover/proof_producer/guardian_producer_test.go +++ b/packages/taiko-client/prover/proof_producer/guardian_producer_test.go @@ -64,10 +64,11 @@ func TestGuardianProducerRequestProofReturnLivenessBond(t *testing.T) { Number: common.Big256, GasLimit: 1024, GasUsed: 1024, - Time: uint64(time.Now().Unix()), - Extra: randHash().Bytes(), - MixDigest: randHash(), - Nonce: types.BlockNonce{}, + + Time: uint64(time.Now().Unix()), + Extra: randHash().Bytes(), + MixDigest: randHash(), + Nonce: types.BlockNonce{}, } var ( diff --git a/packages/taiko-client/scripts/gen_bindings.sh b/packages/taiko-client/scripts/gen_bindings.sh index 23063df5d7..8a527663d7 100755 --- a/packages/taiko-client/scripts/gen_bindings.sh +++ b/packages/taiko-client/scripts/gen_bindings.sh @@ -26,51 +26,51 @@ echo "" echo "Start generating go contract bindings..." echo "" -cat ../protocol/out/TaikoL1.sol/TaikoL1.json | +cat ../protocol/out/layer1/TaikoL1.sol/TaikoL1.json | jq .abi | ${ABIGEN_BIN} --abi - --type TaikoL1Client --pkg bindings --out $DIR/../bindings/gen_taiko_l1.go -cat ../protocol/out/LibProving.sol/LibProving.json | +cat ../protocol/out/layer1/LibProving.sol/LibProving.json | jq .abi | ${ABIGEN_BIN} --abi - --type LibProving --pkg bindings --out $DIR/../bindings/gen_lib_proving.go -cat ../protocol/out/LibProposing.sol/LibProposing.json | +cat ../protocol/out/layer1/LibProposing.sol/LibProposing.json | jq .abi | ${ABIGEN_BIN} --abi - --type LibProposing --pkg bindings --out $DIR/../bindings/gen_lib_proposing.go -cat ../protocol/out/LibUtils.sol/LibUtils.json | +cat ../protocol/out/layer1/LibUtils.sol/LibUtils.json | jq .abi | ${ABIGEN_BIN} --abi - --type LibUtils --pkg bindings --out $DIR/../bindings/gen_lib_utils.go -cat ../protocol/out/LibVerifying.sol/LibVerifying.json | +cat ../protocol/out/layer1/LibVerifying.sol/LibVerifying.json | jq .abi | ${ABIGEN_BIN} --abi - --type LibVerifying --pkg bindings --out $DIR/../bindings/gen_lib_verifying.go -cat ../protocol/out/TaikoL2.sol/TaikoL2.json | +cat ../protocol/out/layer2/TaikoL2.sol/TaikoL2.json | jq .abi | ${ABIGEN_BIN} --abi - --type TaikoL2Client --pkg bindings --out $DIR/../bindings/gen_taiko_l2.go -cat ../protocol/out/TaikoToken.sol/TaikoToken.json | +cat ../protocol/out/layer1/TaikoToken.sol/TaikoToken.json | jq .abi | ${ABIGEN_BIN} --abi - --type TaikoToken --pkg bindings --out $DIR/../bindings/gen_taiko_token.go -cat ../protocol/out/AddressManager.sol/AddressManager.json | +cat ../protocol/out/layer1/AddressManager.sol/AddressManager.json | jq .abi | ${ABIGEN_BIN} --abi - --type AddressManager --pkg bindings --out $DIR/../bindings/gen_address_manager.go -cat ../protocol/out/GuardianProver.sol/GuardianProver.json | +cat ../protocol/out/layer1/GuardianProver.sol/GuardianProver.json | jq .abi | ${ABIGEN_BIN} --abi - --type GuardianProver --pkg bindings --out $DIR/../bindings/gen_guardian_prover.go -cat ../protocol/out/ProverSet.sol/ProverSet.json | +cat ../protocol/out/layer1/ProverSet.sol/ProverSet.json | jq .abi | ${ABIGEN_BIN} --abi - --type ProverSet --pkg bindings --out $DIR/../bindings/gen_prover_set.go -cat ../protocol/out/DevnetTierProvider.sol/DevnetTierProvider.json | +cat ../protocol/out/layer1/DevnetTierProvider.sol/DevnetTierProvider.json | jq .abi | ${ABIGEN_BIN} --abi - --type TierProvider --pkg bindings --out $DIR/../bindings/gen_tier_provider.go -cat ../protocol/out/SgxVerifier.sol/SgxVerifier.json | +cat ../protocol/out/layer1/SgxVerifier.sol/SgxVerifier.json | jq .abi | ${ABIGEN_BIN} --abi - --type SgxVerifier --pkg bindings --out $DIR/../bindings/gen_sgx_verifier.go From d895cd8c0b9a7ab6de94fe80ac8f6d6f686d11f4 Mon Sep 17 00:00:00 2001 From: taiko-bot <160625009+taiko-kitty@users.noreply.github.com> Date: Wed, 11 Sep 2024 20:55:56 -0700 Subject: [PATCH 05/56] chore(main): release taiko-client 0.36.0 (#18076) --- .release-please-manifest.json | 2 +- packages/taiko-client/CHANGELOG.md | 7 +++++++ packages/taiko-client/package.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6106d8ce7c..c1028f9226 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -9,7 +9,7 @@ "packages/relayer": "0.12.0", "packages/snaefell-ui": "1.1.0", "packages/supplementary-contracts": "1.0.0", - "packages/taiko-client": "0.35.0", + "packages/taiko-client": "0.36.0", "packages/taikoon-ui": "1.2.0", "packages/ui-lib": "1.0.0" } diff --git a/packages/taiko-client/CHANGELOG.md b/packages/taiko-client/CHANGELOG.md index 226275a157..af9f8fc6e1 100644 --- a/packages/taiko-client/CHANGELOG.md +++ b/packages/taiko-client/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.36.0](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.35.0...taiko-client-v0.36.0) (2024-09-12) + + +### Features + +* **taiko-client:** update Go contract bindings after protocol restructure ([#18075](https://github.com/taikoxyz/taiko-mono/issues/18075)) ([57f4953](https://github.com/taikoxyz/taiko-mono/commit/57f49530828e6da2d28ab3979576befdee626c7d)) + ## [0.35.0](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.34.1...taiko-client-v0.35.0) (2024-09-10) diff --git a/packages/taiko-client/package.json b/packages/taiko-client/package.json index 2bf3732770..e25875cd69 100644 --- a/packages/taiko-client/package.json +++ b/packages/taiko-client/package.json @@ -1,5 +1,5 @@ { "name": "taiko-client", - "version": "0.35.0", + "version": "0.36.0", "private": true } From a961f8a5708996a1800d2727ddf9c172fdefe7f3 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:05:56 +0800 Subject: [PATCH 06/56] ci(repo): improve workflows to avoid unnecessary actions (#18069) Co-authored-by: dantaik Co-authored-by: gavin Co-authored-by: David Co-authored-by: Roger <50648015+RogerLamTd@users.noreply.github.com> --- .github/workflows/eventindexer.yml | 6 ++++- .../guardian-prover-health-check.yml | 3 ++- .github/workflows/nfts.yml | 6 ++--- .github/workflows/protocol.yml | 6 ++--- .github/workflows/relayer.yml | 6 ++++- .github/workflows/repo--auto-approve-pr.yml | 6 +++-- .github/workflows/repo--typo-check.yml | 3 ++- .github/workflows/repo--validate-pr-title.yml | 4 --- .github/workflows/repo--vercel-deploy.yml | 5 ++++ .github/workflows/snaefell-ui.yml | 25 +++++++++++-------- .github/workflows/supplementary-contracts.yml | 6 ++--- .github/workflows/taiko-client--hive_test.yml | 5 ++-- .github/workflows/taiko-client--test.yml | 7 +++--- .github/workflows/taikoon-ui.yml | 3 +++ 14 files changed, 52 insertions(+), 39 deletions(-) diff --git a/.github/workflows/eventindexer.yml b/.github/workflows/eventindexer.yml index d96f4f3de5..e74085d86f 100644 --- a/.github/workflows/eventindexer.yml +++ b/.github/workflows/eventindexer.yml @@ -6,6 +6,7 @@ on: paths: - "packages/eventindexer/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/eventindexer/**" - "go.mod" @@ -14,6 +15,7 @@ on: jobs: lint-eventindexer: name: lint-eventindexer + if: github.event_name == 'pull_request' runs-on: [taiko-runner] steps: - uses: actions/setup-go@v5 @@ -32,6 +34,7 @@ jobs: test-eventindexer: runs-on: [taiko-runner] + if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} needs: lint-eventindexer steps: - name: Cancel Previous Runs @@ -55,7 +58,8 @@ jobs: flags: eventindexer push-eventindexer-docker-image: - if: ${{ github.event_name == 'pull_request' }} + # Skip dependabot PRs + if: ${{ github.event_name == 'pull_request' && ! startsWith(github.ref, 'refs/heads/dependabot/') }} name: Build and push docker image runs-on: [taiko-runner] diff --git a/.github/workflows/guardian-prover-health-check.yml b/.github/workflows/guardian-prover-health-check.yml index 963662a097..3320991a19 100644 --- a/.github/workflows/guardian-prover-health-check.yml +++ b/.github/workflows/guardian-prover-health-check.yml @@ -55,7 +55,8 @@ jobs: flags: guardian-prover-health-check push-guardian-prover-health-check-docker-image: - if: ${{ github.event_name == 'pull_request' }} + # Skip dependabot PRs + if: ${{ github.event_name == 'pull_request' && ! startsWith(github.ref, 'refs/heads/dependabot/') }} name: Build and push docker image runs-on: [taiko-runner] diff --git a/.github/workflows/nfts.yml b/.github/workflows/nfts.yml index 3a3d0924bf..93a41de561 100644 --- a/.github/workflows/nfts.yml +++ b/.github/workflows/nfts.yml @@ -1,16 +1,14 @@ name: NFTs on: - push: - branches: [main] - paths: - - "packages/nfts/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/nfts/**" jobs: build-nfts-contracts: + if: github.event.pull_request.draft == false runs-on: [taiko-runner] steps: - name: Cancel previous runs diff --git a/.github/workflows/protocol.yml b/.github/workflows/protocol.yml index 2340a2d9be..a48a3aad5f 100644 --- a/.github/workflows/protocol.yml +++ b/.github/workflows/protocol.yml @@ -1,16 +1,14 @@ name: Protocol on: - push: - branches: [main] - paths: - - "packages/protocol/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/protocol/**" jobs: build-protocol: + if: github.event.pull_request.draft == false runs-on: [taiko-runner] permissions: # Give the necessary permissions for stefanzweifel/git-auto-commit-action. diff --git a/.github/workflows/relayer.yml b/.github/workflows/relayer.yml index c946a0cbfb..437def02eb 100644 --- a/.github/workflows/relayer.yml +++ b/.github/workflows/relayer.yml @@ -6,6 +6,7 @@ on: paths: - "packages/relayer/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/relayer/**" - "go.mod" @@ -14,6 +15,7 @@ on: jobs: lint-relayer: name: lint-relayer + if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} runs-on: [taiko-runner] steps: - uses: actions/setup-go@v5 @@ -31,6 +33,7 @@ jobs: args: --config=.golangci.yml --timeout=4m test-relayer: + if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == false }} runs-on: [taiko-runner] needs: lint-relayer steps: @@ -55,7 +58,8 @@ jobs: flags: relayer push-relayer-docker-image: - if: ${{ github.event_name == 'pull_request' }} + # Skip dependabot PRs + if: ${{ github.event_name == 'pull_request' && ! startsWith(github.ref, 'refs/heads/dependabot/') }} name: Build and push docker image runs-on: [taiko-runner] diff --git a/.github/workflows/repo--auto-approve-pr.yml b/.github/workflows/repo--auto-approve-pr.yml index eb73dc2ad4..4763248af8 100644 --- a/.github/workflows/repo--auto-approve-pr.yml +++ b/.github/workflows/repo--auto-approve-pr.yml @@ -1,12 +1,14 @@ name: Auto Approve PR -on: pull_request_target +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] jobs: auto-approve: + if: github.event.pull_request.draft == false && github.actor == 'dependabot[bot]' runs-on: ubuntu-latest permissions: pull-requests: write - if: github.actor == 'dependabot[bot]' steps: - uses: hmarr/auto-approve-action@v4 diff --git a/.github/workflows/repo--typo-check.yml b/.github/workflows/repo--typo-check.yml index d465373143..9ef96a0d37 100644 --- a/.github/workflows/repo--typo-check.yml +++ b/.github/workflows/repo--typo-check.yml @@ -4,7 +4,8 @@ on: [pull_request] jobs: check-for-typos: - runs-on: [taiko-runner] + runs-on: ubuntu-latest + steps: - name: Checkout the repository uses: actions/checkout@v4 diff --git a/.github/workflows/repo--validate-pr-title.yml b/.github/workflows/repo--validate-pr-title.yml index 1977c7ca52..6c0b7a3d32 100644 --- a/.github/workflows/repo--validate-pr-title.yml +++ b/.github/workflows/repo--validate-pr-title.yml @@ -5,10 +5,6 @@ on: types: - opened - edited - - synchronize - push: - branches: - - release-please-* # Trigger for release-please PRs, but skip the job jobs: validate-pr-title: diff --git a/.github/workflows/repo--vercel-deploy.yml b/.github/workflows/repo--vercel-deploy.yml index 1c5ad38138..910a24f643 100644 --- a/.github/workflows/repo--vercel-deploy.yml +++ b/.github/workflows/repo--vercel-deploy.yml @@ -26,8 +26,13 @@ env: jobs: build-deploy: + if: github.actor != 'dependabot' runs-on: [taiko-runner] steps: + - name: Print Vercel Project ID + run: | + echo "Vercel Project ID: ${{ env.VERCEL_PROJECT_ID }}" + - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/snaefell-ui.yml b/.github/workflows/snaefell-ui.yml index 43d378d8da..3a82c19d48 100644 --- a/.github/workflows/snaefell-ui.yml +++ b/.github/workflows/snaefell-ui.yml @@ -2,6 +2,8 @@ name: Snaefell UI CI/CD on: push: + branches-ignore: + - dependabot/** tags: - "snaefull-ui-v*" pull_request: @@ -13,17 +15,18 @@ jobs: uses: ./.github/workflows/snaefell-ui--ci.yml # Deployment name follow the pattern: deploy___ - deploy_snaefell-ui_mainnet_preview: - if: ${{ github.ref_name != 'main' }} - needs: build-and-test - uses: ./.github/workflows/repo--vercel-deploy.yml - with: - environment: "preview" - flags: "" - secrets: - vercel_project_id: ${{ secrets.VERCEL_PROJECT_ID_SNAEFELL_UI_MAINNET }} - vercel_org_id: ${{ secrets.VERCEL_ORG_ID }} - vercel_token: ${{ secrets.VERCEL_TOKEN }} + # The following Vercel project is not found, so disable it at least for now. + # deploy_snaefell-ui_mainnet_preview: + # if: ${{ github.ref_name != 'main' }} + # needs: build-and-test + # uses: ./.github/workflows/repo--vercel-deploy.yml + # with: + # environment: "preview" + # flags: "" + # secrets: + # vercel_project_id: ${{ secrets.VERCEL_PROJECT_ID_SNAEFELL_UI_MAINNET }} + # vercel_org_id: ${{ secrets.VERCEL_ORG_ID }} + # vercel_token: ${{ secrets.VERCEL_TOKEN }} deploy_snaefell-ui_mainnet_production: if: ${{ startsWith(github.ref, 'refs/tags/snaefull-ui-v') }} diff --git a/.github/workflows/supplementary-contracts.yml b/.github/workflows/supplementary-contracts.yml index 5f144d0c9e..76025fb93e 100644 --- a/.github/workflows/supplementary-contracts.yml +++ b/.github/workflows/supplementary-contracts.yml @@ -1,16 +1,14 @@ name: Supplementary Contracts on: - push: - branches: [main] - paths: - - "packages/supplementary-contracts/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/supplementary-contracts/**" jobs: build-supplementary-contracts: + if: github.event.pull_request.draft == false runs-on: [taiko-runner] steps: - name: Cancel previous runs diff --git a/.github/workflows/taiko-client--hive_test.yml b/.github/workflows/taiko-client--hive_test.yml index 4a623332f8..473c5b1add 100644 --- a/.github/workflows/taiko-client--hive_test.yml +++ b/.github/workflows/taiko-client--hive_test.yml @@ -1,8 +1,8 @@ name: "Taiko Client Hive Tests" on: - push: - branches: [main] + pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/taiko-client/**" - "go.mod" @@ -10,6 +10,7 @@ on: jobs: hive_tests: + if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'option.hive-test') name: hive tests runs-on: ubuntu-latest diff --git a/.github/workflows/taiko-client--test.yml b/.github/workflows/taiko-client--test.yml index d1f24f147d..067a9c4153 100644 --- a/.github/workflows/taiko-client--test.yml +++ b/.github/workflows/taiko-client--test.yml @@ -1,11 +1,8 @@ name: "CI" on: - push: - branches: [main] - paths: - - "packages/taiko-client/**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/taiko-client/**" - "go.mod" @@ -13,6 +10,7 @@ on: jobs: lint: + if: github.event.pull_request.draft == false name: Lint runs-on: ubuntu-latest steps: @@ -29,6 +27,7 @@ jobs: run: make lint integration_tests: + if: github.event.pull_request.draft == false name: Integration tests runs-on: ubuntu-latest diff --git a/.github/workflows/taikoon-ui.yml b/.github/workflows/taikoon-ui.yml index c62bccee48..641f402cff 100644 --- a/.github/workflows/taikoon-ui.yml +++ b/.github/workflows/taikoon-ui.yml @@ -2,9 +2,12 @@ name: Taikoon UI CI/CD on: push: + branches-ignore: + - dependabot/** tags: - "taikoon-ui-v*" pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/taikoon-ui/**" From fd68794a2de24b7a32d2d5a1c3f52c2156b6d61a Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Thu, 12 Sep 2024 13:06:53 +0900 Subject: [PATCH 07/56] docs(protocol): update code4rena-2024-03-taiko-final-report.md (#18062) --- packages/protocol/audit/code4rena-2024-03-taiko-final-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/audit/code4rena-2024-03-taiko-final-report.md b/packages/protocol/audit/code4rena-2024-03-taiko-final-report.md index 4f700ec427..63a2699823 100644 --- a/packages/protocol/audit/code4rena-2024-03-taiko-final-report.md +++ b/packages/protocol/audit/code4rena-2024-03-taiko-final-report.md @@ -2109,7 +2109,7 @@ A different bug report titled **_"No incentive for message non-owners to retryMe ### Impact -- Protocol can be gamed by a user to gain rewards while additionaly saving money by providing the least possible gas. +- Protocol can be gamed by a user to gain rewards while additionally saving money by providing the least possible gas. - There is no incentive for any external user now to ever provide more than `{gas: 10_897_060}` (approx figure). From 037ce130ce53fcc88ff4273741127faa6d3bc035 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:52:08 +0800 Subject: [PATCH 08/56] ci(repo): further improve UI workflows (#18078) --- .github/workflows/bridge-ui.yml | 6 ++++++ .github/workflows/eventindexer.yml | 2 ++ .github/workflows/guardian-prover-health-check.yml | 2 ++ .github/workflows/relayer.yml | 2 ++ .github/workflows/snaefell-ui.yml | 4 ++++ .github/workflows/taikoon-ui.yml | 3 +++ 6 files changed, 19 insertions(+) diff --git a/.github/workflows/bridge-ui.yml b/.github/workflows/bridge-ui.yml index ff942d2b9a..2f74794398 100644 --- a/.github/workflows/bridge-ui.yml +++ b/.github/workflows/bridge-ui.yml @@ -2,9 +2,15 @@ name: Bridge UI CI/CD on: push: + paths: + - "packages/bridge-ui/**" + branches-ignore: + - dependabot/** tags: - "bridge-ui-v*" + pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/bridge-ui/**" diff --git a/.github/workflows/eventindexer.yml b/.github/workflows/eventindexer.yml index e74085d86f..4699550398 100644 --- a/.github/workflows/eventindexer.yml +++ b/.github/workflows/eventindexer.yml @@ -5,6 +5,8 @@ on: branches: [main] paths: - "packages/eventindexer/**" + - "go.mod" + - "go.sum" pull_request: types: [opened, synchronize, reopened, ready_for_review] paths: diff --git a/.github/workflows/guardian-prover-health-check.yml b/.github/workflows/guardian-prover-health-check.yml index 3320991a19..e1497f51ca 100644 --- a/.github/workflows/guardian-prover-health-check.yml +++ b/.github/workflows/guardian-prover-health-check.yml @@ -5,6 +5,8 @@ on: branches: [main] paths: - "packages/guardian-prover-health-check/**" + - "go.mod" + - "go.sum" pull_request: paths: - "packages/guardian-prover-health-check/**" diff --git a/.github/workflows/relayer.yml b/.github/workflows/relayer.yml index 437def02eb..48a1f17065 100644 --- a/.github/workflows/relayer.yml +++ b/.github/workflows/relayer.yml @@ -5,6 +5,8 @@ on: branches: [main] paths: - "packages/relayer/**" + - "go.mod" + - "go.sum" pull_request: types: [opened, synchronize, reopened, ready_for_review] paths: diff --git a/.github/workflows/snaefell-ui.yml b/.github/workflows/snaefell-ui.yml index 3a82c19d48..f1dbaffc27 100644 --- a/.github/workflows/snaefell-ui.yml +++ b/.github/workflows/snaefell-ui.yml @@ -2,11 +2,15 @@ name: Snaefell UI CI/CD on: push: + paths: + - "packages/snaefell-ui/**" branches-ignore: - dependabot/** tags: - "snaefull-ui-v*" + pull_request: + types: [opened, synchronize, reopened, ready_for_review] paths: - "packages/snaefell-ui/**" diff --git a/.github/workflows/taikoon-ui.yml b/.github/workflows/taikoon-ui.yml index 641f402cff..57b726c553 100644 --- a/.github/workflows/taikoon-ui.yml +++ b/.github/workflows/taikoon-ui.yml @@ -2,10 +2,13 @@ name: Taikoon UI CI/CD on: push: + paths: + - "packages/taikoon-ui/**" branches-ignore: - dependabot/** tags: - "taikoon-ui-v*" + pull_request: types: [opened, synchronize, reopened, ready_for_review] paths: From 7500852cbdd0c4fa9ae169e4cc0d70a7533b7a91 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:17:25 +0800 Subject: [PATCH 09/56] ci(protocol): improve protocol.yml to avoid duplicate solidity code compilation. (#18079) --- .github/workflows/protocol.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/protocol.yml b/.github/workflows/protocol.yml index a48a3aad5f..5952fb968e 100644 --- a/.github/workflows/protocol.yml +++ b/.github/workflows/protocol.yml @@ -30,21 +30,30 @@ jobs: - name: Install pnpm dependencies uses: ./.github/actions/install-pnpm-dependencies - - name: Unit tests + - name: Clean up and fmt working-directory: ./packages/protocol - run: pnpm clean && forge fmt && pnpm test:l1 && pnpm layout:l1 && pnpm test:l2 && pnpm layout:l2 + run: pnpm clean && forge fmt + + - name: L2-Unit tests + working-directory: ./packages/protocol + run: pnpm compile:l2 && pnpm test:l2 && pnpm layout:l2 + + - name: L2-Generate genesis + working-directory: ./packages/protocol + run: pnpm genesis:test + + - name: L1-Unit tests + working-directory: ./packages/protocol + run: pnpm compile:l1 && pnpm test:l1 && pnpm layout:l1 - name: Commit contract layout table uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "forge fmt & update contract layout tables" - - name: Generate genesis - working-directory: ./packages/protocol - run: pnpm genesis:test - - - name: Deploy L1 contracts + - name: L1-Deploy contracts working-directory: ./packages/protocol + timeout-minutes: 2 run: | anvil --hardfork cancun & while ! nc -z localhost 8545; do From e8618c54a58993499e852ec2ffc2468d4f0274ba Mon Sep 17 00:00:00 2001 From: David Date: Fri, 13 Sep 2024 13:58:08 +0800 Subject: [PATCH 10/56] fix(protocol): fix DCAP configuration script (#18088) Co-authored-by: davidtaikocha --- .../script/layer1/config_dcap_sgx_verifier.sh | 2 +- .../protocol/test/genesis/data/genesis.json | 242 + .../test/genesis/data/genesis_alloc.json | 217 + .../test/genesis/data/genesis_config.json | 1 + .../genesis/data/genesis_storage_layout.json | 4667 +++++++++++++++++ 5 files changed, 5128 insertions(+), 1 deletion(-) create mode 100644 packages/protocol/test/genesis/data/genesis.json create mode 100644 packages/protocol/test/genesis/data/genesis_alloc.json create mode 100644 packages/protocol/test/genesis/data/genesis_config.json create mode 100644 packages/protocol/test/genesis/data/genesis_storage_layout.json diff --git a/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh index 4043f5f8ae..9327476178 100755 --- a/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh +++ b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh @@ -147,7 +147,7 @@ MR_SIGNER=$MR_SIGNER \ QEID_PATH=$QEID_PATH \ TCB_INFO_PATH=$TCB_INFO_PATH \ V3_QUOTE_BYTES=$V3_QUOTE_BYTES \ -forge script script/SetDcapParams.s.sol:SetDcapParams \ +forge script script/layer1/SetDcapParams.s.sol:SetDcapParams \ --fork-url $FORK_URL \ --broadcast \ --evm-version cancun \ diff --git a/packages/protocol/test/genesis/data/genesis.json b/packages/protocol/test/genesis/data/genesis.json new file mode 100644 index 0000000000..6b1549bf7e --- /dev/null +++ b/packages/protocol/test/genesis/data/genesis.json @@ -0,0 +1,242 @@ + +{ + "config": { + "chainId": 167, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "clique": { + "period": 0, + "epoch": 30000 + } + }, + "gasLimit": "30000000", + "difficulty": "1", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "alloc": + +{ + "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": { + "balance": "0x3635c9adc5dea00000" + }, + "0x79fcdef22feed20eddacbb2587640e45491b757f": { + "balance": "0x3635c9adc5dea00000" + }, + "0x0167000000000000000000000000000000000006": { + "contractName": "SharedAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000006": { + "contractName": "SharedAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", + "0x1b59c5b714a9474274d08839cd27e78ebbcde0eb67d55f88e6a8162fdf746fb6": "0x0000000000000000000000001670000000000000000000000000000000000002", + "0x86f2835ec2a9687ca2e2a16b9bca18cc21a3eb0801913c2c1024c94dae29a56f": "0x0000000000000000000000001670000000000000000000000000000000000003", + "0xceda61f04213e952bfa0631c1d6a46e0243feddef01b15830df6d44a883942ef": "0x0000000000000000000000001670000000000000000000000000000000000004", + "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", + "0x7c370492eefc4caa8cbb896169c5fc4597f28c57333bb43e31066f4f66652c55": "0x0000000000000000000000000167000000000000000000000000000000010096", + "0xe6965834a21a9e0a0de81d5e0ea99e149f660508a785a52be0ad77b96b5b1c5c": "0x0000000000000000000000000167000000000000000000000000000000010097", + "0x83e96d9214b47c6368e642dca9daced8ea339555eb83dac20d7cbfb0cc0f5c7b": "0x0000000000000000000000000167000000000000000000000000000000010098", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000006" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000001": { + "contractName": "BridgeImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000001": { + "contractName": "Bridge", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x033b2dc55cae685664a00000" + }, + "0x0167000000000000000000000000000000000002": { + "contractName": "ERC20VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000002": { + "contractName": "ERC20Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000003": { + "contractName": "ERC721VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000003": { + "contractName": "ERC721Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000003" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000004": { + "contractName": "ERC1155VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000004": { + "contractName": "ERC1155Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000004" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010096": { + "contractName": "BridgedERC20", + "storage": {}, + "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010097": { + "contractName": "BridgedERC721", + "storage": {}, + "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010098": { + "contractName": "BridgedERC1155", + "storage": {}, + "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000005": { + "contractName": "SignalServiceImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167000000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000005": { + "contractName": "SignalService", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0xdf3a3dd9c4001d1115304f0841a31ee7b79b184f45ef381343fdf0ae529fbcb4": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000005" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010001": { + "contractName": "TaikoL2Impl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000010001": { + "contractName": "TaikoL2", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000010002", + "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007a69", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x56648745cb667f52a0ae5eb338ad021411cede74141e72933401adba6c132b01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010002": { + "contractName": "RollupAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000010002": { + "contractName": "RollupAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x6f603ad772aee14bf097b20bcdc2c1ce5646bfcfbe0e42c192e55416269268c9": "0x0000000000000000000000001670000000000000000000000000000000010001", + "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", + "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0xbB21206518394cd6DaF38A6C31A3B1461b77CBC8": { + "contractName": "LibNetwork", + "storage": {}, + "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204213774d0b1a3b266888223284a425ae694a8c5e97b18403ec7f442200eae55a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010099": { + "contractName": "RegularERC20", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000000000000000001f4000", + "0x1fe6b582a6b4d9b61da9024a045cb9bafc343b4b12713ba001e47b3500867413": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xaaa7f9b700b86a1f8ec5dacd0ca81e3b1ea8214dae2b1856095f9d44c1f5b380": "0x00000000000000000000000000000000000000000000000000000000000fa000" + }, + "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220a1403924b9774521e0b2e4d325575d166c7612abf0d4b532ee23317cd4225a6b64736f6c634300081b0033", + "balance": "0x0" + } +}} diff --git a/packages/protocol/test/genesis/data/genesis_alloc.json b/packages/protocol/test/genesis/data/genesis_alloc.json new file mode 100644 index 0000000000..31c8726254 --- /dev/null +++ b/packages/protocol/test/genesis/data/genesis_alloc.json @@ -0,0 +1,217 @@ +{ + "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": { + "balance": "0x3635c9adc5dea00000" + }, + "0x79fcdef22feed20eddacbb2587640e45491b757f": { + "balance": "0x3635c9adc5dea00000" + }, + "0x0167000000000000000000000000000000000006": { + "contractName": "SharedAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000006": { + "contractName": "SharedAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", + "0x1b59c5b714a9474274d08839cd27e78ebbcde0eb67d55f88e6a8162fdf746fb6": "0x0000000000000000000000001670000000000000000000000000000000000002", + "0x86f2835ec2a9687ca2e2a16b9bca18cc21a3eb0801913c2c1024c94dae29a56f": "0x0000000000000000000000001670000000000000000000000000000000000003", + "0xceda61f04213e952bfa0631c1d6a46e0243feddef01b15830df6d44a883942ef": "0x0000000000000000000000001670000000000000000000000000000000000004", + "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", + "0x7c370492eefc4caa8cbb896169c5fc4597f28c57333bb43e31066f4f66652c55": "0x0000000000000000000000000167000000000000000000000000000000010096", + "0xe6965834a21a9e0a0de81d5e0ea99e149f660508a785a52be0ad77b96b5b1c5c": "0x0000000000000000000000000167000000000000000000000000000000010097", + "0x83e96d9214b47c6368e642dca9daced8ea339555eb83dac20d7cbfb0cc0f5c7b": "0x0000000000000000000000000167000000000000000000000000000000010098", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000006" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000001": { + "contractName": "BridgeImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000001": { + "contractName": "Bridge", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x033b2dc55cae685664a00000" + }, + "0x0167000000000000000000000000000000000002": { + "contractName": "ERC20VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000002": { + "contractName": "ERC20Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000003": { + "contractName": "ERC721VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000003": { + "contractName": "ERC721Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000003" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000004": { + "contractName": "ERC1155VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000004": { + "contractName": "ERC1155Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000004" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010096": { + "contractName": "BridgedERC20", + "storage": {}, + "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010097": { + "contractName": "BridgedERC721", + "storage": {}, + "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010098": { + "contractName": "BridgedERC1155", + "storage": {}, + "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000000005": { + "contractName": "SignalServiceImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167000000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000000005": { + "contractName": "SignalService", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", + "0xdf3a3dd9c4001d1115304f0841a31ee7b79b184f45ef381343fdf0ae529fbcb4": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000005" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010001": { + "contractName": "TaikoL2Impl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000010001": { + "contractName": "TaikoL2", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000010002", + "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007a69", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x56648745cb667f52a0ae5eb338ad021411cede74141e72933401adba6c132b01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010002": { + "contractName": "RollupAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670000000000000000000000000000000010002": { + "contractName": "RollupAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", + "0x6f603ad772aee14bf097b20bcdc2c1ce5646bfcfbe0e42c192e55416269268c9": "0x0000000000000000000000001670000000000000000000000000000000010001", + "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", + "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", + "balance": "0x0" + }, + "0xbB21206518394cd6DaF38A6C31A3B1461b77CBC8": { + "contractName": "LibNetwork", + "storage": {}, + "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204213774d0b1a3b266888223284a425ae694a8c5e97b18403ec7f442200eae55a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167000000000000000000000000000000010099": { + "contractName": "RegularERC20", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000000000000000001f4000", + "0x1fe6b582a6b4d9b61da9024a045cb9bafc343b4b12713ba001e47b3500867413": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xaaa7f9b700b86a1f8ec5dacd0ca81e3b1ea8214dae2b1856095f9d44c1f5b380": "0x00000000000000000000000000000000000000000000000000000000000fa000" + }, + "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220a1403924b9774521e0b2e4d325575d166c7612abf0d4b532ee23317cd4225a6b64736f6c634300081b0033", + "balance": "0x0" + } +} \ No newline at end of file diff --git a/packages/protocol/test/genesis/data/genesis_config.json b/packages/protocol/test/genesis/data/genesis_config.json new file mode 100644 index 0000000000..8d771d79b1 --- /dev/null +++ b/packages/protocol/test/genesis/data/genesis_config.json @@ -0,0 +1 @@ +{"contractOwner":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","l1ChainId":31337,"chainId":167,"seedAccounts":[{"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39":1000},{"0x79fcdef22feed20eddacbb2587640e45491b757f":1000}],"ownerSecurityCouncil":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","ownerTimelockController":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","contractAddresses":{"BridgeImpl":"0x0167000000000000000000000000000000000001","ERC20VaultImpl":"0x0167000000000000000000000000000000000002","ERC721VaultImpl":"0x0167000000000000000000000000000000000003","ERC1155VaultImpl":"0x0167000000000000000000000000000000000004","SignalServiceImpl":"0x0167000000000000000000000000000000000005","SharedAddressManagerImpl":"0x0167000000000000000000000000000000000006","BridgedERC20Impl":"0x0167000000000000000000000000000000010096","BridgedERC721Impl":"0x0167000000000000000000000000000000010097","BridgedERC1155Impl":"0x0167000000000000000000000000000000010098","RegularERC20":"0x0167000000000000000000000000000000010099","TaikoL2Impl":"0x0167000000000000000000000000000000010001","RollupAddressManagerImpl":"0x0167000000000000000000000000000000010002","Bridge":"0x1670000000000000000000000000000000000001","ERC20Vault":"0x1670000000000000000000000000000000000002","ERC721Vault":"0x1670000000000000000000000000000000000003","ERC1155Vault":"0x1670000000000000000000000000000000000004","SignalService":"0x1670000000000000000000000000000000000005","SharedAddressManager":"0x1670000000000000000000000000000000000006","TaikoL2":"0x1670000000000000000000000000000000010001","RollupAddressManager":"0x1670000000000000000000000000000000010002"},"param1559":{"gasExcess":1},"predeployERC20":true} \ No newline at end of file diff --git a/packages/protocol/test/genesis/data/genesis_storage_layout.json b/packages/protocol/test/genesis/data/genesis_storage_layout.json new file mode 100644 index 0000000000..f8577b300b --- /dev/null +++ b/packages/protocol/test/genesis/data/genesis_storage_layout.json @@ -0,0 +1,4667 @@ +{ + "SharedAddressManagerImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3522, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__addresses", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" + }, + { + "astId": 3526, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(bytes32 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_address)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "SharedAddressManager": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3522, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__addresses", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" + }, + { + "astId": 3526, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(bytes32 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_address)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "BridgeImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 1731, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved1", + "offset": 0, + "slot": "251", + "type": "t_uint64" + }, + { + "astId": 1733, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "nextMessageId", + "offset": 8, + "slot": "251", + "type": "t_uint64" + }, + { + "astId": 1739, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "messageStatus", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_bytes32,t_enum(Status)3347)" + }, + { + "astId": 1743, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__ctx", + "offset": 0, + "slot": "253", + "type": "t_struct(Context)3382_storage" + }, + { + "astId": 1746, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved2", + "offset": 0, + "slot": "255", + "type": "t_uint256" + }, + { + "astId": 1749, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved3", + "offset": 0, + "slot": "256", + "type": "t_uint256" + }, + { + "astId": 1753, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "257", + "type": "t_array(t_uint256)44_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "encoding": "inplace", + "label": "uint256[44]", + "numberOfBytes": "1408", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_enum(Status)3347": { + "encoding": "inplace", + "label": "enum IBridge.Status", + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_enum(Status)3347)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum IBridge.Status)", + "numberOfBytes": "32", + "value": "t_enum(Status)3347" + }, + "t_struct(Context)3382_storage": { + "encoding": "inplace", + "label": "struct IBridge.Context", + "numberOfBytes": "64", + "members": [ + { + "astId": 3377, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "msgHash", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 3379, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "from", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 3381, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "srcChainId", + "offset": 20, + "slot": "1", + "type": "t_uint64" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "Bridge": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 1731, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved1", + "offset": 0, + "slot": "251", + "type": "t_uint64" + }, + { + "astId": 1733, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "nextMessageId", + "offset": 8, + "slot": "251", + "type": "t_uint64" + }, + { + "astId": 1739, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "messageStatus", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_bytes32,t_enum(Status)3347)" + }, + { + "astId": 1743, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__ctx", + "offset": 0, + "slot": "253", + "type": "t_struct(Context)3382_storage" + }, + { + "astId": 1746, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved2", + "offset": 0, + "slot": "255", + "type": "t_uint256" + }, + { + "astId": 1749, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__reserved3", + "offset": 0, + "slot": "256", + "type": "t_uint256" + }, + { + "astId": 1753, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "__gap", + "offset": 0, + "slot": "257", + "type": "t_array(t_uint256)44_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "encoding": "inplace", + "label": "uint256[44]", + "numberOfBytes": "1408", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_enum(Status)3347": { + "encoding": "inplace", + "label": "enum IBridge.Status", + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_enum(Status)3347)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum IBridge.Status)", + "numberOfBytes": "32", + "value": "t_enum(Status)3347" + }, + "t_struct(Context)3382_storage": { + "encoding": "inplace", + "label": "struct IBridge.Context", + "numberOfBytes": "64", + "members": [ + { + "astId": 3377, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "msgHash", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 3379, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "from", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 3381, + "contract": "contracts/shared/bridge/Bridge.sol:Bridge", + "label": "srcChainId", + "offset": 20, + "slot": "1", + "type": "t_uint64" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC20VaultImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 8534, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)" + }, + { + "astId": 8541, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 8546, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "btokenDenylist", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 8553, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "lastMigrationStart", + "offset": 0, + "slot": "304", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 8557, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "305", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ERC20Vault.CanonicalERC20)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalERC20)8512_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalERC20)8512_storage": { + "encoding": "inplace", + "label": "struct ERC20Vault.CanonicalERC20", + "numberOfBytes": "96", + "members": [ + { + "astId": 8503, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 8505, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 8507, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "decimals", + "offset": 28, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 8509, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 8511, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC20Vault": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 8534, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)" + }, + { + "astId": 8541, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 8546, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "btokenDenylist", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 8553, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "lastMigrationStart", + "offset": 0, + "slot": "304", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 8557, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "__gap", + "offset": 0, + "slot": "305", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_struct(CanonicalERC20)8512_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ERC20Vault.CanonicalERC20)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalERC20)8512_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalERC20)8512_storage": { + "encoding": "inplace", + "label": "struct ERC20Vault.CanonicalERC20", + "numberOfBytes": "96", + "members": [ + { + "astId": 8503, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 8505, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 8507, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "decimals", + "offset": 28, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 8509, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 8511, + "contract": "contracts/shared/tokenvault/ERC20Vault.sol:ERC20Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC721VaultImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 6278, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + }, + { + "astId": 6285, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 6289, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "303", + "type": "t_array(t_uint256)48_storage" + }, + { + "astId": 9603, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "351", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalNFT)6252_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalNFT)6252_storage": { + "encoding": "inplace", + "label": "struct BaseNFTVault.CanonicalNFT", + "numberOfBytes": "96", + "members": [ + { + "astId": 6245, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 6247, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6249, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 6251, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC721Vault": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 6278, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + }, + { + "astId": 6285, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 6289, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "303", + "type": "t_array(t_uint256)48_storage" + }, + { + "astId": 9603, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "__gap", + "offset": 0, + "slot": "351", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalNFT)6252_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalNFT)6252_storage": { + "encoding": "inplace", + "label": "struct BaseNFTVault.CanonicalNFT", + "numberOfBytes": "96", + "members": [ + { + "astId": 6245, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 6247, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6249, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 6251, + "contract": "contracts/shared/tokenvault/ERC721Vault.sol:ERC721Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC1155VaultImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 6278, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + }, + { + "astId": 6285, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 6289, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "303", + "type": "t_array(t_uint256)48_storage" + }, + { + "astId": 16755, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "351", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12562, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "401", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 7738, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "451", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalNFT)6252_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalNFT)6252_storage": { + "encoding": "inplace", + "label": "struct BaseNFTVault.CanonicalNFT", + "numberOfBytes": "96", + "members": [ + { + "astId": 6245, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 6247, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6249, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 6251, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "ERC1155Vault": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 6436, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 6278, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "bridgedToCanonical", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)" + }, + { + "astId": 6285, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "canonicalToBridged", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_address))" + }, + { + "astId": 6289, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "303", + "type": "t_array(t_uint256)48_storage" + }, + { + "astId": 16755, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "351", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12562, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "401", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 7738, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "__gap", + "offset": 0, + "slot": "451", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_struct(CanonicalNFT)6252_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BaseNFTVault.CanonicalNFT)", + "numberOfBytes": "32", + "value": "t_struct(CanonicalNFT)6252_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_address)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CanonicalNFT)6252_storage": { + "encoding": "inplace", + "label": "struct BaseNFTVault.CanonicalNFT", + "numberOfBytes": "96", + "members": [ + { + "astId": 6245, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "chainId", + "offset": 0, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 6247, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "addr", + "offset": 8, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6249, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "symbol", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 6251, + "contract": "contracts/shared/tokenvault/ERC1155Vault.sol:ERC1155Vault", + "label": "name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "BridgedERC20": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 12583, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_balances", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 12589, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_allowances", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 12591, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_totalSupply", + "offset": 0, + "slot": "253", + "type": "t_uint256" + }, + { + "astId": 12593, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_name", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 12595, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "_symbol", + "offset": 0, + "slot": "255", + "type": "t_string_storage" + }, + { + "astId": 13175, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "256", + "type": "t_array(t_uint256)45_storage" + }, + { + "astId": 6880, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "srcToken", + "offset": 0, + "slot": "301", + "type": "t_address" + }, + { + "astId": 6882, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__srcDecimals", + "offset": 20, + "slot": "301", + "type": "t_uint8" + }, + { + "astId": 6885, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "srcChainId", + "offset": 0, + "slot": "302", + "type": "t_uint256" + }, + { + "astId": 6888, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "migratingAddress", + "offset": 0, + "slot": "303", + "type": "t_address" + }, + { + "astId": 6891, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "migratingInbound", + "offset": 20, + "slot": "303", + "type": "t_bool" + }, + { + "astId": 6895, + "contract": "contracts/shared/tokenvault/BridgedERC20.sol:BridgedERC20", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)47_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "encoding": "inplace", + "label": "uint256[45]", + "numberOfBytes": "1440", + "base": "t_uint256" + }, + "t_array(t_uint256)47_storage": { + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "BridgedERC721": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16755, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 14292, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_name", + "offset": 0, + "slot": "301", + "type": "t_string_storage" + }, + { + "astId": 14294, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_symbol", + "offset": 0, + "slot": "302", + "type": "t_string_storage" + }, + { + "astId": 14298, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_owners", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 14302, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_balances", + "offset": 0, + "slot": "304", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 14306, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_tokenApprovals", + "offset": 0, + "slot": "305", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 14312, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "_operatorApprovals", + "offset": 0, + "slot": "306", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 15214, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "307", + "type": "t_array(t_uint256)44_storage" + }, + { + "astId": 7519, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "srcToken", + "offset": 0, + "slot": "351", + "type": "t_address" + }, + { + "astId": 7522, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "srcChainId", + "offset": 0, + "slot": "352", + "type": "t_uint256" + }, + { + "astId": 7526, + "contract": "contracts/shared/tokenvault/BridgedERC721.sol:BridgedERC721", + "label": "__gap", + "offset": 0, + "slot": "353", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "encoding": "inplace", + "label": "uint256[44]", + "numberOfBytes": "1408", + "base": "t_uint256" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "BridgedERC1155": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16755, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 11114, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_balances", + "offset": 0, + "slot": "301", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 11120, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_operatorApprovals", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 11122, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "_uri", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 12329, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 6653, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "srcToken", + "offset": 0, + "slot": "351", + "type": "t_address" + }, + { + "astId": 6656, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "srcChainId", + "offset": 0, + "slot": "352", + "type": "t_uint256" + }, + { + "astId": 6659, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "symbol", + "offset": 0, + "slot": "353", + "type": "t_string_storage" + }, + { + "astId": 6662, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "name", + "offset": 0, + "slot": "354", + "type": "t_string_storage" + }, + { + "astId": 6666, + "contract": "contracts/shared/tokenvault/BridgedERC1155.sol:BridgedERC1155", + "label": "__gap", + "offset": 0, + "slot": "355", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_array(t_uint256)47_storage": { + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "SignalServiceImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 5215, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "topBlockId", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))" + }, + { + "astId": 5220, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "isAuthorized", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 5224, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_uint64)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint64)", + "numberOfBytes": "32", + "value": "t_uint64" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => uint64))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_uint64)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "SignalService": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 5215, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "topBlockId", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))" + }, + { + "astId": 5220, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "isAuthorized", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 5224, + "contract": "contracts/shared/signal/SignalService.sol:SignalService", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_uint64)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint64)", + "numberOfBytes": "32", + "value": "t_uint64" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_uint64))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => uint64))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_uint64)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "TaikoL2Impl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 684, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_blockhashes", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_bytes32)" + }, + { + "astId": 687, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "publicInputHash", + "offset": 0, + "slot": "252", + "type": "t_bytes32" + }, + { + "astId": 690, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentGasExcess", + "offset": 0, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 693, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "lastSyncedBlock", + "offset": 8, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 695, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentTimestamp", + "offset": 16, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 697, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentGasTarget", + "offset": 24, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 700, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "l1ChainId", + "offset": 0, + "slot": "254", + "type": "t_uint64" + }, + { + "astId": 704, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "TaikoL2": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 684, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "_blockhashes", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_bytes32)" + }, + { + "astId": 687, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "publicInputHash", + "offset": 0, + "slot": "252", + "type": "t_bytes32" + }, + { + "astId": 690, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentGasExcess", + "offset": 0, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 693, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "lastSyncedBlock", + "offset": 8, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 695, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentTimestamp", + "offset": 16, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 697, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "parentGasTarget", + "offset": 24, + "slot": "253", + "type": "t_uint64" + }, + { + "astId": 700, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "l1ChainId", + "offset": 0, + "slot": "254", + "type": "t_uint64" + }, + { + "astId": 704, + "contract": "contracts/layer2/based/TaikoL2.sol:TaikoL2", + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "RollupAddressManagerImpl": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3522, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__addresses", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" + }, + { + "astId": 3526, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(bytes32 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_address)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "RollupAddressManager": { + "storage": [ + { + "astId": 10922, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 10925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 15756, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10667, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 10787, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 10560, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "_pendingOwner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 10654, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3661, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "addressManager", + "offset": 0, + "slot": "151", + "type": "t_address" + }, + { + "astId": 3665, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3917, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__reentry", + "offset": 0, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3919, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__paused", + "offset": 1, + "slot": "201", + "type": "t_uint8" + }, + { + "astId": 3921, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "lastUnpausedAt", + "offset": 2, + "slot": "201", + "type": "t_uint64" + }, + { + "astId": 3925, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 3522, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__addresses", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))" + }, + { + "astId": 3526, + "contract": "contracts/shared/common/AddressManager.sol:AddressManager", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_mapping(t_bytes32,t_address))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(bytes32 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_address)" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "LibNetwork": { + "storage": [], + "types": {} + }, + "RegularERC20": { + "storage": [ + { + "astId": 20305, + "contract": "test/shared/token/RegularERC20.sol:RegularERC20", + "label": "_balances", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 20311, + "contract": "test/shared/token/RegularERC20.sol:RegularERC20", + "label": "_allowances", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 20313, + "contract": "test/shared/token/RegularERC20.sol:RegularERC20", + "label": "_totalSupply", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 20315, + "contract": "test/shared/token/RegularERC20.sol:RegularERC20", + "label": "_name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 20317, + "contract": "test/shared/token/RegularERC20.sol:RegularERC20", + "label": "_symbol", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file From 0f05299da3b9f401200ee066c49ec2147e44a80f Mon Sep 17 00:00:00 2001 From: David Date: Fri, 13 Sep 2024 14:02:25 +0800 Subject: [PATCH 11/56] ci(taiko-client): introduce timeout for CI tests (#18087) --- .github/workflows/taiko-client--hive_test.yml | 1 + .github/workflows/taiko-client--test.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/taiko-client--hive_test.yml b/.github/workflows/taiko-client--hive_test.yml index 473c5b1add..ae6a2690b2 100644 --- a/.github/workflows/taiko-client--hive_test.yml +++ b/.github/workflows/taiko-client--hive_test.yml @@ -13,6 +13,7 @@ jobs: if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'option.hive-test') name: hive tests runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Cancel Previous Runs diff --git a/.github/workflows/taiko-client--test.yml b/.github/workflows/taiko-client--test.yml index 067a9c4153..8e0d941241 100644 --- a/.github/workflows/taiko-client--test.yml +++ b/.github/workflows/taiko-client--test.yml @@ -30,6 +30,7 @@ jobs: if: github.event.pull_request.draft == false name: Integration tests runs-on: ubuntu-latest + timeout-minutes: 15 steps: - name: Cancel Previous Runs From e340c102f0537d1b1531806f4164d18976bae503 Mon Sep 17 00:00:00 2001 From: Bernat Canal Garceran Date: Fri, 13 Sep 2024 12:16:01 +0200 Subject: [PATCH 12/56] feat(taikoons): updated whitelist (#18082) --- .../taikoon-ui/src/generated/abi/index.ts | 8 +- .../src/generated/whitelist/mainnet.json | 2344 +++++++++-------- 2 files changed, 1179 insertions(+), 1173 deletions(-) diff --git a/packages/taikoon-ui/src/generated/abi/index.ts b/packages/taikoon-ui/src/generated/abi/index.ts index 51915d6049..9f635bd633 100644 --- a/packages/taikoon-ui/src/generated/abi/index.ts +++ b/packages/taikoon-ui/src/generated/abi/index.ts @@ -4,7 +4,7 @@ /** * - [__View Contract on Taiko Mainnet Taikoscan__](https://taikoscan.network/address/0x4A045C5016B200F7E08a4caBB2cdA6E85bF53295) - * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xB6Dfbbc4d1074e214d144cb6aD31a30e4F0DCD1A) + * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xf3FBa6f1E6C1998195239e7DD794c1EcEA8Da66B) */ export const taikoonTokenAbi = [ { @@ -603,16 +603,16 @@ export const taikoonTokenAbi = [ /** * - [__View Contract on Taiko Mainnet Taikoscan__](https://taikoscan.network/address/0x4A045C5016B200F7E08a4caBB2cdA6E85bF53295) - * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xB6Dfbbc4d1074e214d144cb6aD31a30e4F0DCD1A) + * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xf3FBa6f1E6C1998195239e7DD794c1EcEA8Da66B) */ export const taikoonTokenAddress = { 167000: '0x4A045C5016B200F7E08a4caBB2cdA6E85bF53295', - 167009: '0xB6Dfbbc4d1074e214d144cb6aD31a30e4F0DCD1A', + 167009: '0xf3FBa6f1E6C1998195239e7DD794c1EcEA8Da66B', } as const; /** * - [__View Contract on Taiko Mainnet Taikoscan__](https://taikoscan.network/address/0x4A045C5016B200F7E08a4caBB2cdA6E85bF53295) - * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xB6Dfbbc4d1074e214d144cb6aD31a30e4F0DCD1A) + * - [__View Contract on Taiko Hekla L2 Taikoscan__](https://hekla.taikoscan.network/address/0xf3FBa6f1E6C1998195239e7DD794c1EcEA8Da66B) */ export const taikoonTokenConfig = { address: taikoonTokenAddress, diff --git a/packages/taikoon-ui/src/generated/whitelist/mainnet.json b/packages/taikoon-ui/src/generated/whitelist/mainnet.json index 28b2996268..57ca7a4e2c 100644 --- a/packages/taikoon-ui/src/generated/whitelist/mainnet.json +++ b/packages/taikoon-ui/src/generated/whitelist/mainnet.json @@ -1,512 +1,513 @@ { "format": "standard-v1", "tree": [ - "0x289f87241c6b9e84b91b3b90325fc094de75da8620db1caf99697a19e0672cb0", - "0xa6be69ee817e2a27f30d6c57ec8a93989a8f1a4f4d5b09f405bbdd07ba19837f", - "0x62448e4d878abd837fb8ba327dc011b1a19efe996a66b08187dad34b7ebf72ba", - "0x3362da5351ef84765c6c64e8e7ddc30ffafdddf5a2ce2d26af1b3adce4458219", - "0x8d0e887a7bf68fe70e3752c511658ec9afb99d7bebc56683fc8686ef5a0a114e", - "0x6176c8b99d563f4e6f4249d412b652946f27a6c026ed4dec23e70c3e0fc8fd96", - "0xafce5258243c95ac5ae3cd1ad01768c0e75b71017d9a6577fac4176098f2a124", - "0x72dabb1900f6aee2a13d259e2eafd4a41bfafbd0adf36188653c2702690ae657", - "0x0be31baa86ccb7877dbadc1d3aa0920c374deabcf48c1dc6cb4d4562b62fb750", - "0xcf3decb2b2bcc1df7522190907710daeba4b7ca108ba0df4b10fe49f2af71cb0", - "0xc681d2e7a4864618b906927a65b781df502817ee0e18a3ac2a2feab653fac9bc", - "0x2af5bd811458d498ff7e31abb04a377a6ffa499a04e082c9e24fac1bf65c41a4", - "0x207a21df92b9389a05456438ba9fa7f32256c3d420f86f4e5410eadd86e21183", - "0x5e028effbbe92c795765ae792c00456f0736478ca6b1ecc5d8842732c81d05fe", - "0xca710b267b64fb845c96f56c0c1675989b044fa1c26d124df170e1a8e5983f92", - "0xc919f6e10cad8a8f1a5fe818cfa78343ed1c56060a84aa7095e976dc17c7e769", - "0x61435b531d6f3ae4c9b521361d4401d2e11b9b6d3076b2a013e772b3813020f9", - "0xd450004fc7e10d6df89bcb473e7141074343e1cc533eccc9b88ba488226014d5", - "0x59ce70755312d99109468d28cbf7acdb711f6474b24f5df5d4e07d89b7700c48", - "0x3a8dd3f1fbd8c8c1d15b6ed96e89b9054b5032a05d04c6733d72baf3f7343a15", - "0xb97103690764c4cf6a15fe272171682febcc5f20db7defbb877161c02d646ce3", - "0x24ef1765887669abb1bcc1b84fcc05fee4424773447f6b03e6634260a3f84bc9", - "0x6e3d577d559614fff5c7b5c55a7d7a4750055df4a5c8a32c9a9b177e96254406", - "0x46ac78eb18da6b4526d76c0d5248adc9077ad968c3a8a3e98fa5c920059020fe", - "0x85e7bbe9d198247df7d7959c679bc89774a430f0b4b3a01f006d6733079ed52e", - "0xb23ab460111afb043430d87dcd19cb083e8a363d23bb8452c5c6afd2c95dd441", - "0xf471dd64278876a9ccaf573358b128a6a1be15cfba9d8c322ab77b57a7978668", - "0xa1330c3f2f206269970ae803e960bbeb37944aea4c15e961660d0fbea68dd4d2", - "0xadd902fee5153296078659ca16c8acf8f6b3e5910a64b3c73509a76be791407c", - "0x5ab0a74104752272513853768c858de1518e64e49df887730b7c3fc56ba771bb", - "0xa50ff9a9298c60881bb0501f9c118219e6a1f0f892bff771156b221c6493917a", - "0xa3d0e15900fa7515febe008ad28fb58543086508e164780d2298cdf1e74875ad", - "0xf4634706eeaade6d9c7ac04d5d3e1a719ef0c5152e02011a4341f192fae8a7c2", - "0x74b33c92da837124c0a9980f0adc9785faa859edb78c30091dffd4cecbcff624", - "0xd1e4b17ea52958608d3fcf2102ae37704178bf5d6959aa9fe590f48d005a1017", - "0xbde75db281869242a0a52c6a74fd6c536063c0a02716a7b6aa2989eae023c86f", - "0xd72d3ef2dde95a84b552a919f1fa4c42c4449ed44c316d5f39e5b7d0e867d939", - "0x45ea901282753835b95f075d5abe725c54078d3e9fbfedd8c11aa08e2f7c9dd4", - "0xddb8e4c8a9e91ffab72089c8d9fcaed398e84894e9f99a2dc576f9f24645d2c3", - "0xd22f1ae3486fa48e25d71dd604ae37e612f293afc56b6cc85ad2d1736786df75", - "0x16b66d1b220896ff99deb81dc4c58b03ce192818cf2dfd2d94ba92a933efcf2d", - "0xc2d51d9292b511975c70d99818fae5ca9d9802ba366ecfe775f8fe7839588999", - "0x664aa334d55787e75016ab0d4a9bd1f3fdf82d7ae2034b0406c6fbb6d30b45f8", - "0x04315585d43c30a010d65745dd812bbbf3778b8b3a4667dab2a090b059eaf6a9", - "0xea309ab15166a37eb442ed418e144b59ad0dac315c61ac035d29eaf580d84357", - "0x36e6abf260435674e98e3fce8b9a52cebdd8a43b6d2aaf3fbc634aee7f2569c3", - "0xa4299c6c327e9695720749fe6652397af614e31fe2bb3ffb0c652e399b103775", - "0x8cdfd53111a823443ea3bd2a31a78e590c258b0432245861a97c045585a9ea2a", - "0xde6f929e40864b52b8e281e0a6de8fbb0e404cd6f3e234bca26b6d3841e01014", - "0x1d376ae31f4acc5889783a63b65af099a53440b0f35f679110734d8905632384", - "0x709dd7728d67a65ab8cb17c451f68492e2c764a3fe516e0bc87df2c70c8988a8", - "0x6d727ea7a24ac0fab6dbd5b5b1dddb439a124a2f671251c32d4eb3b3dc251f77", - "0x5c4e489a6874bb657cc0ae62a2562c211879179471456297a0803ef976194841", - "0xfac94d53617ad4f64a1c6badb4ef7a2ac346086afdb9f2729a594b05a140ebfc", - "0x1667457ceb7a566628ee190b747cba92474216489676dc5671ac40f1b14dafce", - "0x0a0a963b452f83f902f0ef187743438661dc941532220c54b3e695ee45c0d3fc", - "0xe624f5aa28637aefe7e95a6d9c70b9d4bcdf4dd2f2b01f01f741472bba66d432", - "0x0c958dc1c42c2e8aaea17f1f411707b8d1fdbcdc614d13a48d39a58aa3276755", - "0x16f316099f6406b8307dea0c70589b10778db03f4de49240bea9a0ae87e52903", - "0xb65d8b5161826fed56877ca56db3449b7bb55ce8c55c9d138917cd9a06a19077", - "0xac387c4e77f3fe8eee7bd7bfd513290c91bb819157d426e00a2f5b7a997314f3", - "0xfed7ad04432148630663d89134c2302a107cd3290085a161c005bd5de217c139", - "0x60251238c9f0d58223665c98512074a821526bb04de9acc6c0f676efc9cdc377", - "0xaff17663a7cb62a703f545f7657402eff9fa31ae16c62c423ff8fbe5f76a37a4", - "0x14d9dffa277dc306f82a050add1a348ff67e212c85d48fa4efe21c8233c233fe", - "0x43a70ec8a3fdcb32e05fcd926f3ee2fa9604c77c2b4f0baf765dd0116c20bdd2", - "0xdc7731f7bd282b51360d9a5037852d98c635558f91898cf483c2f9555c458f8f", - "0xb1510516ad20bb66d8a48ba47862423fe2a323b8d8c7793cc999e255a0933270", - "0x7dbf2011da924ecdd6f8ca788061b8669b4834282fe3516516678a7c374105ba", - "0x390263da1b5af937550a288a8ed49ebb07b43668295bd5d5c613761a1963c2f4", - "0xb54cfcfeb86e885571aa390f87bd549b4a0179dceed210b40563e05f07f63d9b", - "0x6bed284617bfa092bc50049c507a6311e1d960cc9047fcc0a4feb4d0ed28a23a", - "0xa3a4e71112b491db431d92f38c260b5f0b23eedefa7eaedadc32498fdb794449", - "0xa2e8fed9f21c826ccbe5b8c9d98fa43e876dd209fac3053a64713f81fa400c27", - "0x72df250927a85815d3de0db0d64abb61cdd1857344a98b8416d01d8e4d51e990", - "0xc2a1c9352265e18cb80f789086d1c9868c688ea60c1d1110b756cda68ea5d5d6", - "0xabd22da2c26d21c63f5e4dd907bbaf08ee3acd49df9613944b09fd5fe6b779d9", - "0xd40aad6556249030017611b9556f96984f92a643ddc94bcac4ad9b7d3e7173ee", - "0xcaa41d5a2b585a7ed6e52a80fa11365c9bb90e591bf6eb71141ea825f02f4633", - "0xeb5e58e53aedeedd0cd611427d144f3aed277ecadf59cc305f59849fd9ab23db", - "0x91c8610e3abbe1d521816e4158d66ab5fa30f910a6e590c8b0ad85298c739e6b", - "0x60d7671d22c5e03dc66bc33a0abcd10e0ba8aa39ea852c11ef535a489178c6a4", - "0xfcd6bee970cfbe4987f776cef0be7246e7bf26a34daafc534d3aa8b009201cdb", - "0x0e168bac7f42f239734d41a4f5c5f56a95cc8cde9031b05b979e85f3f24e7a30", - "0x5ce437cb415a6c5952c64d389a23f06222bbf5f1695985dab5a59b4f10320562", - "0x4ad6b8e6ae4b79189f74ba6bedbfaec074204ba223da3d2b38784828c15b557b", - "0xb4a9ee96f517682c8ac172d8d8f50b44c2c070c0a5f76954fd2b834a20ced601", - "0xe5673a4d99c87433599ad6fe577132f01bbee262543e714753f803d28008e927", - "0x82331b8d3c6373cb34f0dc3b32ffd6e860c718c2d97b39f708ebaa1942ef1c25", - "0xb159852753f78eade6a9bc1daf87200a649d8f80b22397aed066becc9abca1f9", - "0x15d5ed354ccfba17fd76975da05c92a6df6d17e8cd18de4625026686ae0b035e", - "0x5b99222ac51df035674bcae22e54f4aaa339eeb919cb23eacf30947f6cc7a328", - "0x4f4b10c65b97c4e61ab6f0043124382da92c62c1baa0142af0e9a6ba583f1000", - "0x97f1c63068b454f18f6fb5bc2501b4295fdceb0b1649710e1375fc1b8f52e740", - "0xa5f80e7f3595019eec70aeefc73f8687c322d927b6c19c2335bd12fad6d885e9", - "0xd952925ff1cef6d3efaf6343f0f120910bf8931b27474f65b171a0317ccaccd2", - "0x69411d16b243504b9cd98790fbcef35fb102c4dbdeea2668232d6678a9a3779d", - "0x7fcbd31ca23cda26363b35659c4c33be35ae0d22b4a36e81e24a84e046fb9b4c", - "0xc5568ec5c2b57bb25f0ef2a0ee93b453bca983907bb6d85b29fc114ebc4a0835", - "0x0b31fccab6f6af72f406f13a59fc106c70764201cab718cb95e875b91d2f8d90", - "0x684fd3bfc7c1392db214746216bbb796d067e7b35475b3f276bdf97e14b6d4af", - "0x208a2590e377cbd12aded6ec4f5135e961e5350374fb9c3cc53ba0beccc859b0", - "0x328714f117e1b74d79625c12053fc867694971ddbfaf9d46ebbf4a5c8f1950ba", - "0x7cb59ef97655231231a6b3da135ffe1db8c46f231d122269c22d56bd94bfe123", - "0x9dddfe98e5732d2922bf20bc604458f2edaa8bc4d4b90cbb2a2ca2d4624888c3", - "0x76f0b8d30310b5aa2c0aca2a13033c3e35ab3bbe3f0064577f74fcb96d4a5151", - "0x1ab752c00bf5f554c1ff8a5290a91a5bcc6d77f7d8aed0ee1b391da4daa97268", - "0x5f029577be440c2d8f225197e06aeb3aeed61b0a84a8eba85d04f125b8bf2e13", - "0xcf992620188a2076d17224dbce89570ae8bfe134f003a74f6e61f5774e406eeb", - "0xb8d241ba114e3b6eb82e04ea44c00f976b7f59f50fbdfa6ab0b157d9315dc63f", - "0x41388ff2b8aacd56bfd33af71ca3d8babf3e61e07169389dc34b6d6e237d7680", - "0x64d434de3ab7de571b80ac0825376fa2d721991d654a5216218f0dddd9144bc3", - "0xf043daf4075ac187ee94ed7b2eb5069ce37276fe528cbb9ce5f329c9e8d050db", - "0x03f4bdfdcd36d8ffe4edcc0217fc9f598f1d4c74c00575b8ffecc2d4d348400f", - "0xb88bc60b233d4f7e69f3424df96ebbd25309c9ef7cfa82d8f514d958085571f3", - "0x8e16562d698992259dd13ea837d0c2699614185de7d83dba672b825b97581b64", - "0x38142f889f36b6f432fc2a484c83a088f3422a18a6d5bc262da5d4f5b89a03da", - "0x33674e3b3640d5efb17765539b0d0b8cbc5a4af2cd81df2c447148c166dc1f60", - "0xead558f95c83ef460d8c45cfaa1e9a8825c4df001e39bb6143352e088d34abe4", - "0xdb2da076b189a922f719f279c778a51bf962437fd67effd8b63bb41cb3f9716e", - "0x38d385daedc5ceeb0ce673ce3fee7c76caa2d6fef2953966659979f889da0b71", - "0xd1048ceebdbfb688ebe516ce7b244d2cc4198ef61bb43d25d6f211806ae6af83", - "0xcde116fd51e9dae6efd40374072229c264bfc4507249ff60d29ccd42e0a0b2a9", - "0x4565df50e9a4570637e1c8a4f3803d1c9dff26d56e4f50cf9b315a525fb3c136", - "0x935eba819796fbe4898ce5f57edb6967a5909abcef5c7549829fe76241de77a3", - "0x0b25d0ae7f264b9da1d480a336af11bd6cc37a5530d4d0e70c60c4d285fa93d1", - "0xc2f77d8adb46fac8763f59be31b109c55d89cd2a0bb01b09335f01aa125d395e", - "0x3d1999231cbf86a544e2e13aebd4c0cf4304a2172a2d99fea0160388a638dced", - "0x442214ef4204d44bff4538bd4a4f008c0eea6f4d2f95d9e9ccf2df357b294f1e", - "0xb547eb37dce74797e70df0bd4b40eef59520650d74dee586eb8dcc71ad019ae8", - "0x21685ac86602365e0489b8b0103ead2528f3466d46f63c6d0157b3b12e753294", - "0x2b2af14e55d1953bdd0b1a2ba886d27fc461a69aa435d140bcd817e97964ae87", - "0x178eef29c3bd8ddd096e54d038c6f421088bb422258a48e63ce2018f1ac036e6", - "0x614e0afdabb31fb3ce2ae8eacaa9a1849db616f9ec4e4d9970b4d266e71d3b95", - "0xeb272341e7b1625ebb91f724208e998c3428b0da1ef9b07917d9625e45dc45c5", - "0x4fbbf7677aee4b9276c5a5fd5ca3bb4f7aeaa913ff41f68f5fc451ec3a1eb761", - "0x26a246c152e26b5b9c741b2be8cf6d8442c64cba39fd29d1db6ae0fd8c9cdfeb", - "0xb6e954c50e232d53930af82c31b4bf6c4cf0da2be54a7e96cbe13469c49b9250", - "0x1fb2314f099fd9392d8d85d07d98ac0c9fa8a9d470424bb90c6c1771ee828f3b", - "0x75c5f1ebd14a4769e06468f16e87c5da5569a429bdb65ec0e0a81e9fa7bc5927", - "0x772a9d86145ba9e16e481a205be65bdd44a90f277c6fcd13b3210bef97c3060a", - "0xd5bc47e62fd4709bf9316394f849a6e3d1fdc035f099a44f5267f2ad06618cac", - "0xd1a09bb17cf574e45de620d8c1e24a9b01de4c85950db200504ba1964c029e1e", - "0x03b65bb49421cd6f6119d34cda5ec4ad9db862984ae5e9009040f206f08a4896", - "0xbe910a6f212a3c0530c0bc35f79ba53a47daf468f0dd3b65acd2751d83a361f1", - "0x95a7d48a4cc0aa416b5b492414aa0f068421b002fb9987fcead6a14c457f1ece", - "0x988b19746559aa7592fbd5a544e211a3100c0ea9d692464895f26a2dcf74d8d8", - "0xf63eb2f87d9fef6135996bbfbde197b73b6be6b684551133e7a95a9072caf171", - "0xb04530f8215dd2ac9e58f6aa7dcab4b3d09d90b786af5d06e463669f5bc0ffed", - "0xcff877198498121f978fce1ae0c141be4cb78bbfcf8f3e89e01acc35a9fdcc51", - "0x5a66577bde924f3cf537ab58211b0b212f0218dc417af8912c080abe69164381", - "0x48b8d6921aa7f61ae5d758f65e02b074e30301e52fa7f262c48abaf181118923", - "0x18d43fc30938ddcf04a02928610c0d3a11e2444e6475c642236b6f38ee6239f0", - "0x1149344fa121caf477e80fc7ad7528fc29751245e79572dabeb66cc0b6bf3bc7", - "0xa273fe8876a7e19c346a5a8c2eae0c28e20139e37cf1f28fea494bbe13e7dc74", - "0xc67b28cc8b42f9dc01e679422ddd3b8700d06c526d07a581a8efba474057064b", - "0xb57e26e67033a1bde17627d65779da4c0326d78cccba6202317fd08acfd4541b", - "0x36cfa13d9b66c6ed72f60b7300dc50acf99de94777f530cee00235c2f582370a", - "0x85b43986238cf9820d05aebad8cd62e58407b19ee1aac2577e562e7097e59570", - "0x4670b89e37e8ff9406d210859279d147a66c1eb189da025100f1781a639733f1", - "0x1b8b6a74cbaeafd52d7279bca4fb84f3e689d136eb89b8a2b4da80d8c73ec556", - "0xd176f6f15d34317bb2a80247acdc95e8a5559e1591db468f633049e31cefe0e5", - "0xae9653fe1fd7c807bee5d0a0e3f90bed896399cca227b7a5f8bf905eeb6208c8", - "0xf5f3b5428f7042b3745dc4b58fb9f7a4173b54570db1363e5016106300685d72", - "0x5517d33d6b743d008a4d2be2a4d992bc51ad9466ac4fc22b17c05386610fb703", - "0x796d21a253cb9a922d176080ca8d0d81ea1b66239b68941f38646e67773fec77", - "0x96e9a5b8b2a87973e4bf8061c106d8f5014d50e0a27aca2212825424b755dbee", - "0x2a19070a9069af3adfb32332de600bbaa57f2d502cfecdbf6f60f7f0b860901e", - "0xcdcbad3a8ac727c491a9e7cb4aa7c60fbe877ebd712d28030ecec32e4cb850d3", - "0xc5956ab5c4d30038881aa30640cb16f55460889b4e70604b2feee4220bd8a51d", - "0x7a8557d5e255c5a034b5e63562dd19920ade2d34923803de7d9cf8b48eab9bc7", - "0x4360807ceb210a5d7e4a85174ea97b6dfe9ca0b6726d217f4567d77e879b107f", - "0xec954df9a5a64f12d379fe718b8862162b0e65943807a15e7c2fbb0986679c05", - "0xf1541361bba4ce74fd43ee4e5433344260046e86b5b89e034091dc7317c68969", - "0x7ab98893d276aa06d3c6e5ff71149a1490029c93151e3d8083377df2446c85f1", - "0x35a3d1cd430fe0e30a218c087df38ea1af29847a52ba580398cca8e5494f1bf1", - "0x7de260718c22f3e8a2d9939dfa7936e2248d4bcda838137250a7d90c59240c06", - "0xfc21e1f336262b54445a200e71e6988e993efbb465061575d8ec24912bcdc53f", - "0x280e8c59fc6fd8dbfafeeb2e0834d862d341de8d5fa3382f0096d5385cb1a3e3", - "0x4090eb0f97581eaaee16fe46aa23972006cfb6eebda9ae8d277639591052e3dc", - "0x939c1536c3a9a68281e75890ae5e1a659d5c4b9d41a13471074a41ad47d8b0b4", - "0x5f9b22fe147922c5a0c1b0ab84af1dfbebddb8b0aad64a406e3fde3a436b618b", - "0xd541057cc1651b64f2e231ed04fcfc94776071d641f209bdce5f1f9206a3cab4", - "0xccb546aa19ced4ced1c6018ab7d66258a40b416749913e04da2bc757a7beb3ae", - "0xcc516739e648d249612f59e39ce30e2d87f990c93de27c9362e4291f589baf9e", - "0x2f0b2195d720a2254e939fdd7bef9c9afdfddd5a46840c1ea4282c46c4f09c2d", - "0xd01f6534d9d61965838c6e7862ea5bc350c8a12edc7b079dbbf5a157a4e70e66", - "0x8ed3f8183796b7678df3f2b4fe2f3caae80483a4294f88853c6641062db68f2a", - "0x280bd7e80228e436066e834fb140b2e2bf1c0cd1e6543c4b018363637ddaf5d3", - "0x8700d530d252fb60f864ea30bbb9453e2f716dcda3aee17a654a4f1eeab18e6a", - "0x220065e8a87b4c360671914dae13fd9a5ef6dca951735cc137a2b27e29f68882", - "0x746522eb4624b0e4788218f8400017ba436c08e46b5d32db20cffebefa04d2f9", - "0xe7e2ada44ba774a74a64a039b6c85b7c5a2ae05ee4b79dfe5e31292e78ff3a1d", - "0xcce65afc608c50ee0fafd826e29aeb0d579dc3f98d7610df7699a63dd8930066", - "0x1d9031e03172c534df18ba84736d0e99873e7506631af30b8ddda8c6adb9eb6c", - "0x44e40674f528afb0c4187493d8d25e3de12183c36fecd660e206613c3e5ea918", - "0x279ae6f2f6196c7f7bda689cd05ba7c931576098212cddbe504cd307f09a0da7", - "0x780d02169205d515e0e034db0d984945ecdb343639d42a508ccffea6ac937473", - "0x924d913af62b3086d256cffe779d8f3cb61ae08dfdcf45343f8a0b2a2370e127", - "0x89a1f1b09d03046b86927498c965e921f8c8db028e90de8ea264d7a8f6f90309", - "0xfeed658bd7149de9a7fdb51e09fa6f296bc35a2c536c4b50dcee013a88b17472", - "0x633874e4d23fccaaff6eebd63d9fb0d5db2b84c677efac393308a0be488c354d", - "0x16cbae24aa43f656abb789a03a8ff77070046709569a0563e1d3340ad1fbfc15", - "0x72a107e60b622f7ec725a590b414bf3dba4d4532c1848db854083069f36ae152", - "0x54b7cc31ea22e2176de5a303e9b46e70c7ef1813063105e5c7970db3c6403f90", - "0xfa3a66db881542d371dd46bbaf80a2c40505495a3621e99cc6b684aa35f42de4", - "0x029e7019a8f520a6dcc178ba8902f48c3aaf30b4e3572d586daf8daed51d8c64", - "0x68e32476d20c901652a73fd72a0deb14b92d4db716b6115e1cc60a2c39f821fb", - "0x4db2f08742b1b86b80beb8a104fb348251bd7125e7835e84dc38a6c80615e439", - "0xe932ee2d401fffc3bc88f1c9273a5fc453334ddf70db6a50ee5d6ce4218b42c4", - "0x22c56275792ca88bb9023a2bda0d24270eccf2af46d7f806504584e1cc1a5178", - "0xcbe4ac93af7c2d53e9320850fa874c99255a5c41e8bc986794b5ba93bb888002", - "0x24d6b139304dd5444bce4c29f6a8a076369bb1f66aa42485fa03613903a7ddb8", - "0x79333ca2f687686163379b44755d187db1ad3e8a45efb5839989d5b9603c18f3", - "0x4d5e2a9626a4f8e1544822215d794a828ab8d69c31abd2a1690a6e457234d45d", - "0x8bd3d8beb7c1b1bfc4a295f99eb2a0f82c9946112d602b05398844e7f731bfe0", - "0xf57411b424ec9180af78dcb304e7d8be78397de04f6de84a609f9f41f3a9ca5d", - "0x0c0f4420147a66881ba9ba148ed6b95818f769c29f21892dfca40e2cb303065f", - "0x12d7aebb3fb19a9aa20f210deef4a289c55b1b8d576258ebdc958d8042626a5c", - "0x7076f3389f1ca1275d9be3c00913e0486cd93b4d8184fd09bac377cdaf70af0e", - "0x40999b94eceef7c42f8e63ef63bf69053d847a1ef1b45ea89589e7e6358de1a2", - "0xf260441296e1838e2ad4b8533e10b6a7d8d0ef3b70cede59bacdd601686207f7", - "0x11a62406b19d7942c0b3361387521ac0323af0fdd1daf06e0c3c608584154c67", - "0x5479024368d5fa0b9b3dd3556dfa9cea5396aa1032a240c892a004b959b5fe40", - "0x9e2edd07c2c5b5193c7e3de5cfc9db1d4a6f694f1fba5141a8f0343fbdcff963", - "0x061a6767161dc6d02a43280df0f2aee3c53dc504d73159d85e21ecdd94c88e3f", - "0x353d54b6976ad15b2230546296d45e4aa14c5bdf6ee74b3e11ab3fc34c6ee583", - "0xaf6d4efb682c56b676f84f2242c0069fe36e45a1cdf968a4fba33ad53d0535f6", - "0x63b88b547508e0580272526b8cb3799c42792e4866aa35be22c30f06c22a818a", - "0xee7015e21396a08a15c75dba72eeb2179c4633aa13be69d584115f73093a19d7", - "0xfb73fe026532fa174b217ad5fde56572492fa3fc865430b912b1b457ab6d1d66", - "0x6608fa5cbb6740b69ad590979006964a41b4d3f360dc5bd680c8de59481088ab", - "0x36187d30a078b6f2301d7fda7b0c9275982a7687dff1988e3215bc9e17301a76", - "0x0aa813bb7bc879a7208b75017067da914e909d79bd867c30c70d18f0aadc9517", - "0x4d292685a8054e13e54fe0cb252630305a93c9c7997a7201c74604e94ea2a051", - "0x4f821e1e913e1e4432609de95008bdf9afcc4c6cf72c2fe8d3341fe0bce2a770", - "0x2e55e16446be1cd1fe1c8f60b71ed42592779d8a61b574eb481d007d30e0c837", - "0xe137dc6d29de9d09d95d62b4e2e3e32060d9b516d5748cc5a8c585692374fd9a", - "0x602dac374e1f9d222329d2c0702c2d1ad253693dd8ec2d4462cd542ae1118d7c", - "0x7d3d986b74379e569c9d7c34a9b2e420fecb1eccf900add87e6d9c1c7b5b0d67", - "0xa52c920227c69e1d0df700c1d92a491ed6433303c58703a5b008323bb9a3d8be", - "0xdc44c87bb3fe0c4c1359741ff3952da8c608f0d2348f467f271b49c84b2555ff", - "0x4e2a17bc61cdf65294d83e77dc12886972467aa82564ebe1a5991ee8dbe5403d", - "0x2e63680b3d020b497056a51a95bfa523aa1e963c26ae87a630ae3ed2d28e5525", - "0xe714e5e5d7698fcefd269b8d6f44cd74c4af62fb8c8ceb5f52aca241e5b61d10", - "0x876364e6139817f93827fe183319b75e497ca3ad2a9ad57837e47cb43f74762b", - "0x102a023c194c8e97e9bb20571d0b496ac58f934b23980ecb477b97297dbfceef", - "0xdd54cd5b739c58ace9d96eb9ffb64f4353093dd00dd8b3a35551b8b618d8e005", - "0x1d7d587e7826d3e0d786bdbae3a5fdebfcb684ae1ce4ad16b24017ad797696fe", - "0x1aed24ae3d57d99dbba13518acac66786ad51ea66390d63200b670d7b1bda8be", - "0x30499a1af19d55d47344f83fd0ad1a2e60c79e0d6e57b58c745feb6e0f123a8d", - "0xfd385baca8bab242f002f27f9c14514dd2715ca0dbe44c9870660a2195b87451", - "0x49d5f2fd7cc5d3f5448dc5c1ef50011444d3cc72302bfa7f29c3b10f5558c5d7", - "0xc0eafd8a0db80a9618fe136f8ad7bc9529b5507e80bf2a1b71a30c9308590784", - "0x84b1eec00baba1906dbac3759445d4d9d27195d65b9b248b376c30daf1645982", - "0xfa427b218dc8c8324540a61afc61eaad1fd3e91eabe13c912450cd099b42a575", - "0xdee8c4891a9724b2b431e39b73cd3c99adc819af14dea9faed15e81ec8d61023", - "0x9a5cc9f7d0ebdbde6c2fb082e2fd96e12c1581110e4089252a947fcadb0cf666", - "0xd8ca8045e1c62c2c845d85633f75f1d45fc36651e1ac00ba4bbe0efd037c55f0", - "0xe153dc24e917d577c4020c05c21d1dd721553c940ebcce928490db23623e596f", - "0x546421614efc0f2f1afec15385555902cbd8b205fbe83937cc6fd72b554c32d7", - "0x8b3bd6bb064d556da5eb3d13750126c1d6a6db5cf68caabeb4ccbd03655e6aa6", - "0xfd5bd0b28a0dc5a9efc1a7065e3d3bbbeb0c7c5dc4fda1ce042961a055257f5e", - "0x435fb91d64bd633d644eb171842dcdcd319cda4d216f6f4be1d18a6159e863cb", - "0x6c1bbb34b5cde3bacaacd1ee2ec42dc6f33fa7231202e3816639c92a063c0e91", - "0x9655300a4a8ff8fe1925210a702ea9461e2e1e76664e71267ea00cecd5af48e2", - "0x4d9276f20a1a76ff267ee33d90becf3aff520d7ce783113af7c3acbe29ff2141", - "0x3cf961a3326230f6fbd751062e3edf20fe2a101c882ee3be262d2032737cb953", - "0xe731b156d0b97e5bdb93ec0b47a791791245364bd777d1fe2494e088dffe76c8", - "0xa61f6ed368a2a2de4b78a3d3bcf1d0589c8c9481ccbc2d1d269eb0c1521a8b15", - "0xd86ddf9714ba1926ba7c53864f5bf49a560c580f5890db6b9065e0d9e859dfb5", - "0x4e4a82e211b301bc095f064d6df83bcb833938afc9d35c829064249552809f2d", - "0x65639c5e880d338bfe50d102a8b169d2562a18fe7dc8df6fa91bdd4f6010d371", - "0x63c38ba78afb97b98d7931286606ec8d5f5065aa32a026e82733b28a9c0e7ed4", - "0x383b9a43737ac338353c9eec3d5f7e98afe14b6dbe5d36784d9f8602c6a6262a", - "0x3482a1fe9a6d41dd9eae7484ff756149be56fd91a0d772ea4a796e812bd65b10", - "0x2fee05502ac990a9dabce7982d8ca1e52e0fc3bb46316d3d7d5146ce5564267b", - "0x9f2867549450044a02a75a886466c9454f5b664c926621d9576e2555a1ae0e89", - "0x1c5624fd770724971531e6f45ccae002b308bc144041ff851ad5ff1efabf38d6", - "0xd816b852a939aea9ad19a3bc9263cb90bbc2ce866236c5d7dff9ca8cf15638a2", - "0xc1a4bef60826cfe92cda5b176c342e160bb593f5fe233ba52fb2fbe312addff2", - "0xec7b0a7facea9dd72b299e139799d09523fdadfb08c679b2134456b90cf3fa49", - "0x36250c6ad48f802d9b5f95369b154aa581322429ce05bd49648db2984e9c43c9", - "0x1ad22b6f2432d6b2ac1473bbbb6e1aad1a924fa236090f68e2b070c6b168414a", - "0xdd6fc6cf44050668205555baceb634f26aab081e698bcc6d8ff65524fd86f66a", - "0xa5e08f6acade15d481138026a7a25262cd63a555178e72def8052f752eb0807a", - "0x304e82b43eff848721baf1a74915c909f91d2d2f8774445b24aedf6924f92400", - "0x85a6bb2246b1e7e58c5f3ee955302bfb97aa814720d1f3a96ae53a9ecb7d90d4", - "0x40ee29f83469a9c2913f93386bb8caca6f85cdfd7ebe0e9fd8a6cfa4b9a51369", - "0xbcd1e2e05ca555533396ea9a4a3a9c30fc60518c7d1d5512a84fc9c22c5a3161", - "0x5c2eb0dc9801bc4724a45567308c65000cc752432300522e86809b257fe74615", - "0xef99679595d1b5dcc0b077bda3a1510f5e2b24197a8a6337e48b06357dabf4ae", - "0x60f49bc57a7374dea1adbbe8b2c373190b75bdb99a57c7bed3eb7cfbaa1c409a", - "0x9ae7c019d16bffdb3c5305ef1d61b73537b6c3d48c4e8e39fe5c0d6fdc5a3882", - "0x8c1f274330335a9d7975531aaf36e87247b6d634c8633bcc16de7a189416f7e1", - "0xcc49e499fa14289d56a42fed4785cbebb2cb67de30d85f3b2b4fda29c6e73d97", - "0x4a5287f8513ac90688a257a965c6685359aac0792ee7ef8e908893c93d3033aa", - "0xc797c9322a7161a9d1b47deaa76818fa933cebefcd73ca3fe0f9c3ed600f8317", - "0x5ffb64ea44c8af29c29ac591dcd7b7c57ca9cecd8bf1dd7ee34d1cfc88f029bf", - "0x681ec53472af6adf6761f1815f1249a6f562dddc92b7cc6946d501f3a40d6436", - "0x018ce18404d06cb4e57ec515452a5a8a89f072b05f6d6cabb500de25759b5f5d", - "0xc5cba146f9692164c4f1073074d28ff72b3c12c69ac58e0d100186e929177ca1", - "0xfa19ddb6cf195e02f3817e9c7bcd5f95e59e9ca0966473179fa1b86d8de28db0", - "0x22f66f31de90826c53695d47b789ce052e66f5b6f63b2b0e4cb7980eec236b54", - "0xa43c79da278e287144ed4a80143c6a061e50b043863fb6193f39699704cb1a94", - "0xd7403ea4ca9c882fdde4601480623144170a8a951368780ba4a4bb888d2b67e5", - "0x92a40a5a91b56fc3f29c2d126aa4f11547127ddcc5b7d3c4fb9f817b04df8f1b", - "0x80c490b7a0e2aaf7ffd5c22b2150ac62cc0cb3b4d5a2cd70653df8df05af9877", - "0x510f75f7bda1ac26f56bb67e9cd45f96b0bd09cd15162db3ad9c9edc0b1c0c0c", - "0x8ef9cce8704d08f3105e007b0f4566dc99afe1a9f876ea146dea624ce57bd5de", - "0x5fe5f71d23695372b37db4d7d2f67f96f0b264a64a46e0e202fd252899c13c34", - "0x70b14ade39a58b973136ba6b7300ea7024f5e58f9f84a9443a7cfbebcfc66a8c", - "0xb85cf1be91e3117933da3f67c83136d342cc03e20a7c0d5bc6c93e20c873fac8", - "0x4f23859b9dcd47be65b058f51a217b08ece7030b2cbe4abce9d5be96af616962", - "0x96cf051dfdff5305f451fa39f013afa94ac5dfcf9ee7d81c06651dd9ecb93734", - "0x34d3aeef0a46d3a41323ea3fe6d16b8390955235815f8380d72a6b734dccd00f", - "0x5e08d1b0c9f158e2d24a274059c545c9c92884c4ecd875303f71f1bf3a1f5f59", - "0xd9134a2f57cb3a44f327f8b621d4e39dacbdafc19708e2cbce92e02d83cca90e", - "0x8f20328a48146fa8fbf799fc89907278b70f5cabcf09e8a7075f63149324e962", - "0x1ece5cad1f61800b23882c18ed73eaa3fd06e14ab7d6ea0f2e3c1f3026921ee4", - "0x6ca90115c73f61dfcee5fc12d0cbde90db8cdfff2a929379b3bfdfd1528a3c21", - "0x688d8c0c773bd26cf511939e8c276b08413bdb808862171c60c6ecfafc703ea1", - "0xe0bd16ab0d32e71b5fe29003ee08fe7a38f142fabea3d1f5a879c4c3dc27714c", - "0xb876bcb32c708e05cb60d2e83840dca2c1766614bb3cb88ed583cd755938ed71", - "0x6337377b45519331578fb1807829907ab61f8b4f20f1452b0194c7ee739a2c3a", - "0xd038154c7da994d4f2dce74dc58c43411db6d9c748ae412f04c30f2ab62779a1", - "0xde2fc856ad1744cc57821eee52c2018cfa763fa4a181594de46d809733d48ab7", - "0x9f10583ca1024ab4dd6966b5d89f18911b53ad2470089292a299edf35c1126b1", - "0x9270b28959bf6bb87648d0e44239ccfc0a78171a06c3f93a1a369fb2b757b966", - "0x488ed7280c9f631151ba1a6783f267751188bb6059943a870bf9e0616942c520", - "0x04c697bcbf498641f2f916d52be624f5af76f1d2de224431291b2170111e0f37", - "0xb65bc44c33d130d301883b64c6ee956ff36da5ea7a951f6d9a404249a89dd365", - "0xc59a779f7f6a8d6b3309a68b31d7bbb24b92f2f83a41590eb216dd314bef3389", - "0xab98f03f9f3c3809b29e51d6d18c3eff59ab4c982ad104227e81288e7c42b893", - "0x17efb05475125a17704a30180a4d1d977d9154546905251ce4ec9011fd7af203", - "0xdaa067bb9abfd830f1af36824b7fa824617ea60e71994948e8d56e8e570d8dd8", - "0x27b0206651ebae7c64716db3ed5f2328fa2e3ef8121d09adcd35b5e640030c72", - "0xb88fea5bde6f031231c9539aa865f852a66e0749119f5218efa1e14a00f7fd33", - "0x3588a3e821735b4401fd1ad80eeedbdf0993323f9c9e62496357890796dfd074", - "0xa337547ee736f8dab39a1291e002ab5d6560f9d57d1614e05db441491af5f2cc", - "0x6a667bc7e3fb91947ae48bc6f6bf59062897ee52fbb7a9a1e81e9f4f7400ad22", - "0xf779fe4e609f461a8fea22b8be9bcc5e597d20887f9d0382d83f277b6f3543d9", - "0x3ba131e14db22b145a36a5a09c4a9d7a572f35e1ba3a39e989ba910fd6628f58", - "0xc62859556ac1353d8a45a67e5b0b120591575a6e6726dc2308033a99f4ed90eb", - "0x9c1066609f4e69aee49bfc0e37ca4d3342cfba1d3ada8bc08b2eae540219d67d", - "0xca5b028d4d199a5fca063eed1bdee210a28c6683f9445704661b3828ed284f65", - "0x43c8d548591c7ab71f52157d5ac2bc6d0a937a424ca87bdbede84453b4ec8a12", - "0xb33a10cc1b2b08fc4796d300c9e5ea3fa4e9a664898eb9a711935c9fa97440e3", - "0x77c6eb5ced06c4bf1b92498f8224d05c6574b89a36aa1d53db32f4708c5db362", - "0x5ca9e2bb38fd8c0a92e94cc4c3fa3d2f9e179809d4e7ca4f15e1d05fbedc8b94", - "0x066ead76633a18d45b2d50d72e2fbba485fa834e5fc002991beb5fdd2993ceae", - "0xaf09b72e96fe111c787398c56ef3fb6df1e706f090431fc6305267e9952d0a5c", - "0x0b01ab14d14ea779797ae4f7e22c0f96982b3c56aac9ce773474c80f7de5be1b", - "0x49a206c18b480efbb48202b866557132cdac7e60ca16f528f236d87c563f8115", - "0x178eb1d4cb461061297a62fca0e7cabc080399c7844e1fa30448aede2222379d", - "0x7d3d898726788cf88f5b7b9bebbc0e36fbb6c0ebb7561e7a539f49716605bd8b", - "0x34cab86ab1e7d5aaeb7b3ea2ed9e77bb7d685c94ac86e2836129b81a95c0e60d", - "0x9b963c07a6451f0850b7d25677266d59e8f7d68c6c344ba1c1a8925c58ce3181", - "0x59f083418d0796b9eb9e47321eb13c78782cd1613ef847204f6e04a8044963b4", - "0x2b8a50800566718ec8efc339461a56c60c78846d7d1e3f308d43b0d45e98b788", - "0x3cf3908761e06ac258ccb2948e22cacf5b7f8472dbcbd3e60a084cc6422a3824", - "0xaad4078e00d8470c102d872a6593f895e9b9448bd2c7783d23fcfb6f0c332097", - "0x08f2c8e6b18d7f45eb63927d4595d762819850d9a9f3c6a85981e1b483b53cdf", - "0x89fb23651b458228ab94fa264487855f1960e4b6ff9335d7f0d2b6447f1170e2", - "0xb89291cda442bcab599bcafbe1a75a9bdbd92fd6e45211dc6b2e1376d3635e9a", - "0xc7f174a640969f97a51b6dd068d5eeb6d0088286d45c89fc19824c01a3a5252f", - "0xfe98036c85f5084c9307bda7db054bf96ccfbdc43656cb846cd0427dea6a07eb", - "0x9980acb66bf9ee8c9dea8113f238623ab2c7ac2ad58008bf61c6a71bf3381ac3", - "0xe68911257e4906b74ebb04cd18bdfe660c7622c3bda425088bf0c55011275367", - "0x781041622688c8adb7724c21af4c6bc83874d2388b30e5d5eab2fedb01ce1a99", - "0xe8b7108a3db23b3941b02d4aee9dcea04e4e639bc4877fdbc2b38ee5aefb5ce8", - "0x4626d8d330a13e6d65834cbe5f455493c931be575c03415f43603a7770197912", - "0xa89b1868e1b46d6a1594921c898b9ee863b9790c3954f9e59d8e8d0cd5363272", - "0x202fab55e67606efd239a9e76906cc8c9c3eb0e72490407574663f9297c23565", - "0x2a472218028c06faa33b8778cef815052ef271c30cff99bcf38a0e92c38ed01c", - "0xced3a9a0c33f3ade26c614868f89a165f65a378eff46e9addcd063221e585ebc", - "0x94bf3fa4d6e2fca16b2f24eda2a078d6395e6d80e20c5b8f070c477625a017e7", - "0xcfd5b4f2c01e772b432c7ea66867caafaa2e30e04ef0094bcef1610204e63b1f", - "0xae7758087103df74d9c43db88f4c8842a5820145ad5941590afbb22ea4f5c1e0", - "0x70456df490e2a447e55fd32f6377e0c94b23c3c1f0b1dd4dbbc878d0240c73ad", - "0x1d0c97217583b3ebc5d194cda1d43b7158b2d4fa0b4df9dea1dd8ee6c0f9f29d", - "0x02c876403af512a527aeaaaf9a44832c70702db2a824682c7165f3caca997fb4", - "0xb3ca7fd27d67c740262811f91cb1369987f0c7a5363341bf652b0b608ad93def", - "0x1eee63190a3b8165c3951de2ac1122feb89dc4e553a5b0be7d627a0bc17092c4", - "0x8daa5bf9eda723441048b241012f832d3b0084813a59279210c15cdbbefb6df8", - "0x7ffd0992b0b87f9ee8a75ba1f7f815ca6101da8173e83e474d1610aaf99a1017", - "0x9fe671120528faf71ce7ff08af6cd04792480af0fa5dfefa7e9e3e90edef3c74", - "0x761215d1594d0f956e37ef651852c0d3704ec7059b98587bb49aa441c69a3272", - "0xefc76378b93412a2434f31282a64b06bed23247a76e3d3525e5e50d5002f2f72", - "0x5153dc62324cbecb231e45ed4221ebd604af959d0fd5ea1033661c575371814f", - "0xae45a91110e4945b2ccd0038f0f2ea1459642b9aff9c071b076fd2f61958aa38", - "0x700712eaf119e41ab3f90bf50bd3b10bc20a8331980ea98cf16c2e396194af7c", - "0x6afe1a860fc38122a4a4a2a5c29f39e899d674b071ff9341360a5fb04ef80bc0", - "0xe9e7606a4c96278a0e30f56288c9d361e4bbc31fe130278d77fc6b9e08d3a3d6", - "0xae7099c4fee11a5908c4cf736df52d6f1530c8e68b2203b02294fd40c4ec9df0", - "0x35f0a2c11d5afa5c3196884ae6e7a9dc4191b8216abd4bb2b6bfcf032df3f579", - "0xd94baf7c32c26ac39c0d83801ebe53ab0294900ca0cc038e8f65db8e960b698c", - "0xd8eed4503a4c2b06e2516d37d825806d57540f2d596fd12e949c217d63c84705", - "0xc66de238d4c866c8267fda0bf6c4ab75c991018d46a015797ec8d34d7a7b9646", - "0xf8809f1779407a8a25dff89e46f1de89c572d0dec8f78961ab12b2b9b9c1a960", - "0xef71eb0c6af3ab16bd4e7e844a8fd0a438b7b9fd40f604d97e995122a4f44099", - "0xbff2580e9cbc2d8a74a4e484c94a9a4749519f1fa90dda9c8dbbca3db1148139", - "0x3da349213483c0ef14ef7eec97d4f651c2614a02529a4d5c3613ca5e26e699b1", - "0x40c5575c86da1790c5922c7c38c605c8e7e649031a4d514513231994228b54cd", - "0xfa441811115bd08021c4481baa365eb0f3afb7f3cea17fa5e62a8e84024be782", - "0x1fd833b72bfd4a954cc8dd805411db47117c5bda9e8008672b1f403ad775a12f", - "0x84cb1c4d255692ff9a55e6bcbd174e6c4f2ee50a1bd2a2c8cb2642004753cf6a", - "0x1b9146f37ae6a9d0a5231662252b4323c419c6abc59f7bfc3de07968f873423f", - "0xea7d17767a8836bff9be0561d15d0f89f12ae783656f067f081f102ed1a5e280", - "0x5b33cffb9a4d2c3410d99b94ef8279b6b99f5b46a2712d3670132af43fe4bc1c", - "0x23c387119716f1d70be19ef0e3f5a41e7badd874df8815fe6cf8ca2013503f32", - "0xee87159333cdee6915b2cc3eeff6001456e8e99fe55c8be21e91da120a83c6ad", - "0xf1313e522eaee1ddd462f11a8635a5014a5b84a131aa021853f8ba66c3afebe3", - "0x645da769e74d2e378c51490e3f0e9486beac8bfd6756c08a487d1718f73bf5d3", - "0x0cdb239c8d6f557000c7733586a01a4cbde0315e5eaaff8d7fbb0c4ec1826875", - "0x8bf90a7fd9e29d439be0890a9a0e8ffe950ad63e4416c28aee05ef4aa9d7dd17", - "0x611a5fccd8305c75893da423ec77bce9adfaa6c8b89dceac22b50640672189c5", - "0x681241f34e9469a54a4327cb63bd3da0df111a5ca6d6ebdcf84fea4e1e454422", - "0x42e25ca107a29d4f631da50f0af0e783557539755cd352e7bb622abce33a5773", - "0xb88295e72682c008a333a42b027ba50874832add9bd8a95f8bcf644142cea494", - "0x3af9408b8424c6c7153db48a9562767567d158b1cca1be127983541ddf2cbab2", - "0xdd5d4f33a6d5bf3b615f08df4467459a57d9a30558cac836a5f1e60a240c4ec8", - "0x5d4520eac9b7a934b9875b29911875d4eeab95ed7c78aaae0c10515c35d23d77", - "0x9781101b3e945a12b0a714ee260ae8b9bf73378d8a2fc06f2248acb66ccaa508", - "0x9ce15498a9b6c54166c88a3f818f17ea75a44002b5f18818d817308372dae275", - "0x489ecf5bfafe6504e600c7ee3898cd3c7f912c8c076b0ebcde6e96eec5b0afaa", - "0xaef3b57893256328ce3f0a835ae3bfe6ced29ec28c55d237f2e847fa4e34cc45", - "0xc9d611a422fded5a2c84f2ba996633149c59bd9f0e861794e58de0cc92ee3f09", - "0x7cb1a87ebf63675e7994505183c8e506d27edd02557bae6c143c529cc6a767e5", - "0x5ed0f7bd623b60b7437d782792f83a6943b8eb59d9e883c954f90fa64643227b", - "0x701a179622baadea74eb8ae92c92d692de80f6b45c7e7ea6fa89c2d2b58625e8", - "0xca4e6d8e490f91d9e420114227e9cf8f6a8d9174052e06ccd0cdba8ce43ff65c", - "0xa84982a96c89e5f25d2e8c8c0ca3320f39eaf9618d31b850aa068a408ae8a3b3", - "0x6b143564885c7d4ec0cf10ef21747277224d88a2849ae1aeebb812334ca2ab0e", - "0xe284b31175e224fbd6ff6756c04d639ba30754cb3321f505bd6c689ec7e2a5e2", - "0x8b7e2134c2b39bf51fb88eccc5179167f93320e973e872ecf6e2008e1992f128", - "0xa680b39e443b94e54fd7c6c1690ec648b0f6fad89797c5428f8934bca8f970e2", - "0xaacf7433fdbe20b921420d670f10f9638bece08cdc4b2425017f45a06a66a8c1", - "0x697aca9608661bbbce309d1aa675ae86a8379eea36ab7fa3c873411ff13342cc", - "0x1f7d6f682168afecbac8a4788070e42ce75b5109412d3bbf23fd4e7204d941a0", - "0xfbf929255beab2379dbbd2e803a332b4599f825c0afc8a521afb9f8fc516be0c", - "0x326187efbd05c4486faa0f9cbd8f5470a21d6ecc8dc0180c6639d97759720705", - "0x402a292cdb969a042ac5f08237ddbde99baa78d01b99f4e19d28c6ee443413e0", - "0x6106c2d89f966357387b6e4e9c411b1cdd04076d58eadc08b9acae90979acfeb", - "0x8a4e5e52f9387c0bbf4882191bf89c55fe12e1c0d4e53ba90fbca3982bb5c541", - "0x759e84a3ce14d6c948063a6326e8cb9ce862b80e2fee6e0fd173ce8af1e7e834", - "0x2875d4027bbb39e7b396a7b32cbc113c12b11269fb60c62dfac3a63dd05055f8", - "0x6834628af1ba47bd1559649f4c5c880e62b5b930708a7cfade9fdd4c901d7bb7", - "0x1e9bafbe1af5696265a9422093134b5518dac9e0a742cdcf30c8dfa80fdb708c", - "0x026110a5ec79422d662fcc93923803d2db1b62b26bdc106ead63d07a8ee21830", - "0x2a84c0aa91688988eddf5d3fa3d2f4e320ca9f8d38de096fa7e221416b169b8c", - "0xb6d9082930579b93ee9d063479a57fe7f0f9f06d28925b83b02103de7ad4e6b4", - "0x9567504b8fba477559d5cb9bd97e9e7a4180ab915349b2c58900ef9ee2cd8c98", - "0x353a753e6add801d3ad8aa1783a65a458fbe4c10a190c1499d64a5ec8f01ef2f", - "0x743fd234bdf888924c95c6c43dd4c5f32eab4d1df8ed8ff451291ba341cc15d8", - "0x8c6875b5e5a725ca1e34081405f387871f5f9b55e071de0d30f2417110f9061a", - "0x6280dbb8b88c69f10afb21f15ae7a6b47c65768e2d6592dbea315e17ccc463fa", - "0x36b37453aee4b4e4563f76e1982d38e67507225e78e463cc8a273466aa44b90c", - "0xe5f75cec24a80324b70d3a329000f7e803957f0ac554d79b446c1c2affcde0c5", - "0x3ff808fb13176710ebf6260ccd367f73a54b3a8a5b34abef931da30961398902", - "0xcea8df885edc0be705b856f4efa98e1b19f73ff7947b1226c3a2c2967ac64502", - "0x3692ffc2513933fab20d1eda90091b52f539c44876b34f6372797ed3e0213b93", - "0xe4efc5150dbdb72571bb51ebea464055da8bf3b69c612c4dfa76a10b7ccca31c", - "0xf090c4ce33d48c1f1d4e7fcd99bc6d2ada2e6607f62449773efbfc6cb35101f5", - "0x341f63289015e52c5362cdfb53585fafbdfce44d2d649e957da2e1782c30cb02", - "0x534657f19f7f02ebddb5a404a585789c7d95bc6fe3994462ef37ae19605818f2", - "0x489027fa73f905388cb2e183d89a4aa1d332a417bcc2166b3227c0f9c26474e9", - "0x7723e3b833bbc114756f65f07dfc4eb32520948b46d2b5f768ad2f27dbd0e5ca", - "0xb66c22686447b36174affb8e55c3171c38e90811c127c62044b36ee518565843", - "0x5c8d98e2cabdec172d341011e6643864a415de2236f586960e599a6771b25431", - "0xcf6f4daeec6a97b9421551426fedaa9327a03238facff664055c7f4914dc5c8c", - "0x14ccf3b39960db35a674408e463ddc0f03588ca36aeeea9b77a3c04d67201f7b", - "0x0747127e91912d8944d73c34d4288157778818f20e6c87a779a1cbfb3598709f", - "0xf29dbad68d7dcabf07c97cd7837519b00e1da9f8d1fb6a232aa6b07de8f53143", - "0x2075211373c4f514015d1d89bac6691ef41092448d6d8a00354661e2f2de47b2", - "0xb056ff02fc2f41738b769e14a77f8f005cdab6a7c1b91d9d75d2aaf6e017f015", - "0xebfe96f4c9e92540df222fa7b209fcd8c608e81c8a33d467803694c5df87e540", - "0xcba2aaed827bf88e432b3c844ed1238667bd5cf93ea2a3591d11952e4aee65c2", - "0xff906466e6cba6a5cf25397fb75f2eb29a5e804f0cdbbf4ce002efcc6283caeb", - "0x502d9c51b83d9cf068796b1dd1c7bc4aa6e54cc1022c90f166d9587a31c4aa95", - "0x44d13176b2a4ae61cd615103cf5affad31f53539575550f9c14e036a1b1bf106", - "0x51f0209194cab9c1203114e5aae828f6a6155d3f48ec31923923fc1e5cc6ff4d", - "0xa92ebc9b09d087a9de6f53c25f34b1d0e8bcb7ac7aca02cf5538082c44de8fc2", - "0x7925ad3491e8aa0c517ada7a82be412e8c56e5604154f82e10966b57b9e442e1", - "0x6ae527e5e5f55db1603b4009985e6fe1c4d09b994f36b1507b79adf5acbde205", - "0x988b3f441e221f3c8f1cef44bd918cd02600288b780d485655525cbbdabd3d43", - "0x623d02c75733818ee65976ab1ece84496a4e9bd84597f31bd404ffbaf7784b48", - "0xdd4d9b844ebd605494625e4533a6277082f015ed06bc0ec5fb91e84b9ed3c577", - "0x48dd801e352eb4fc5e1c98dbeee9e3a20b03931ebca460723b6e02da0f290ee3", - "0x3dd78149c5b85022c6d4578af88c22ebc39d249b7c2b66123d1cd0e0001a1154", - "0x38804da17223906f2b1250e4cf2fbe210980be8563b313e02ec2fcd36e7e1eed", - "0xb634839f4781d6bf24bf215272ef9cdb4df69db53d32c8768aafba6ea5b259a5", - "0xd937d3be58a5ee05273f640633d5e05b3b696958e4fe1e8c325609dccfa6c249", - "0x3ccb7a02da80d0ae4431b3c4933a5db82d9d2b9fbcc89fce7f7cae338ea9b048", - "0x1c0792e3d5d8301b81d2012959ee96e6784563df4eb327856e9be1bd96064c19", - "0xfa5beec5b308c8eb7c70d06384b0ebaa094156863aaf99861c14352f8a73598d", - "0x93fbc42778ffd41e868fb840e78b3e75f749e104fa1f7c06e7b6cde8751e2994", - "0xa06ac3847f85ea6d0c67b0664123ffcff490033269ab1fc30682abfea0e5b94b", - "0x25090f63425b4c96bfcf84691370cfd7b22cbea1af30563a7ff0844fc4167723", - "0x0c18e5e5ce5d6a421bb13130538296dffc55580b4a5ee595a4893d8355b42a14", - "0xc4ccf1c2418c71cf57e946cb88cae603418fa9bb7d9356512ec8cd8255c3c376", - "0x66badfcbcd3623c32ea0363178dbcc86ca0eb7a2bced44958b962711f7e50d79", - "0x65d7ad1c6a3559ae85394d6f893ac06f897ad9bb2e8dcff05a69fd0287338407", - "0x84a44043630d5983d2ece472f8fad7d8aafb5d76baae76fe12aeac9de78f6f06", - "0x6b23ba93e38c3e3ba1762ea61a4a294f99420ca4434c1bf9dd528bdc571ae6b7", - "0xbd9a29189ae1017ee1708a2801aef681e3d088b9aee8db364c35fff970f898c6", + "0xa6b035de5681d17a9ce065d4757d7be96dbd6ae7becb4a7c5403ae47030678af", + "0x4d20b9f93b3bdbd13a048a18f8ec07bfff6680c2c1902580634862f2f0e4e0ec", + "0x46aec261df803c89b8eb44e0f6352cac4a68395e80b77872c3ae3ffd8aa01413", + "0x495fbfaf336c2ee7b5a570d1bb20fe49841a8936fc037e41d8a2d088f0320088", + "0x1219a96768c675a3d925f8d187236f200aecfb10e33beea76ae6c746d57376fc", + "0x91b03b4b135e58aca58a5fbbb9080688a1af85e24662562756d4343e89e3d58b", + "0x8bbf8de235f2ca26d6658266a98a38bb0e6f4bea56972b511e366f3990379884", + "0x5005f522a9221e57d343546b4fd4b933e08ddea22c37c4a84546dc93393a62f5", + "0x89fbf20985590897fdbedb1664e64e1d76c96493d466d526cb291cb853a9b36b", + "0xf1cc32db22e673706a841139912b00de022174ee6a26a20d92a0f8a329871d7b", + "0x5945fc6f88897ff9f40561ea7e9b1a8324d38d51e1cfdcc953e5893b78807f91", + "0x6440f9b692ffb5301db8c3c32df6d7dafe5afd46ef9501de84f239ff12dfdaea", + "0x9a22ec25ef09b01d48330a740e727e2a2185ad4b6ee5fd3afddf7bd53d8e609a", + "0x8732f20ac65dd4717cb09272ff294049cbc7fed8d0f0023f4d720b8de40fb097", + "0x7f2fa30b337bb1c525d024ce55f2a935d39f854b020c0b4fca06eaa0f0eb8d99", + "0x1f74c18426f1df51841ca048318a13c3dc11903c7157a082df220f381d36222e", + "0x5ee929bf24541624dbbbf21dc3b3e52a4930f672542c197db35c42cb3103d9f3", + "0xfd7a14972384f51048bc42d5e4a08188b2e0c93e314fa022c2fb4aa3af5f5599", + "0x2669532085d80848b06ca734863e7f34f3bf194ccd1c8f34e14ea6a06afcd860", + "0xe0ae008d7db3a986266766f10548d5bd7d2157e21b2869b0a353bbf2b7be4fa9", + "0x8cad2069a7737bfe9b1fb81dc3dfb6feee60ef1b21f4eae322e05b357f7ada0a", + "0xa3bf64b2eef8c6317cebbe904030047591fe3f4a95a825ce9394d778816ffa0e", + "0x9dc9f0594ccf1ad886bcd0cf81d2caff402369751678c59bf8f7de24178fff8b", + "0xbb2aa11a9d2bc9e2d1e369b24a56221606d29ef5babffc7917d313458a1b97e5", + "0x1eb3bf33ff2c30e5d895e4e3e13c400c05e167398a4db4eccef90bdf15e29c22", + "0x2a059b54315b8a3116816610b3707ffd182abd40f5095ee68931a2f4768be170", + "0x34ac0eb35b506eed449e654ff6954522aeefe29c0f22631963c2cb83197031c0", + "0x0ff9cbbccab9f1dbf04151116c2d14f5c96e52d87c1e50f095dd3f1d840ff19f", + "0xd67d2d4ddfa2de16fb911cce076a4bcce0760cd94b7514a83e9c61ef86db85b1", + "0x371285b0261c3ff4cb1f3e629f9a9a94796b436d1c8afb425f1f71f5fb1bf235", + "0x22335780cd39c11a9c845918852f50a09fa3048979b3fe1d748652674b05b3e1", + "0x085ddf8df0066269e28f3b8ea53a8e3580fe7e11e55e6588a7e2009736bab664", + "0x50275a15d39b5bc3ee911f02bccb67caa5daa50d3da810c63922dfba6865fb46", + "0x5686765b9af2a612416b90f9e5d53a68b56321fbdd732ffcb8a25f7e2e6a17d2", + "0x7e53bdb76023259d7b1a2d1c17f870396611c954ab25c2db8049a445742f0830", + "0xa6260cbc5bb3a0d3cba7e6d1cddbd9cbddb2684e8b405af9a2e309f8789d5341", + "0x40434cc010536852ef39b1bd2a03692ed15bea4dc7485c83aa71a970c9b035fd", + "0x7ac24e3010f76a39fad7eab1d1d912c8e25e9f6a8ca6130e30d67e2fec5a4989", + "0xc9cebdda7f43a44d7f98b3e0c533fdb0a16e827b9b825e351f15c49c67f76bb0", + "0xdb87873eaa09abfeae4be73f9ff56beaa3f629b66c1b816ae29f5368a7273db7", + "0xf548c7b2198b7fae1ba400048a9510d71293b82edc37ed9080cc49a6ab94e459", + "0x661912017fc23499a45413a53f75566fc8a2e01e1409ae425766367288cb34ac", + "0x07b91a9d1056ea8ef3d197393bd4e14b14d806b756eb0ab63a964fd5a37d0f25", + "0xd4e53084ede2487c8981fcbd1a70779842932b805052eea81658f540a4b615c9", + "0xbbacc98f886573b4e78a30e19245df2e11e358d6d60c7db35ea18e03c74b8064", + "0x0b4b78ee67746fc79d62433e12ddb2789b8c6c8fe74b2b725b37170107e1d06d", + "0x23aa786920d46b98b411385586e9535beeddf1a9e555137f1e8940080184f788", + "0x08ed20fb9906529fbd884cc48706df937b0d85d186e6f1e8a2487148c85ab3a7", + "0x66d1ae2d98cc9d0e8bc21877769a79a0a8e210fe57d7312ffce1d8ec17fba998", + "0xb723de2aae1142cbf47709489e1141e6473c8ce7ccccc27f9aa679bcd62abf82", + "0xe83ac82aa680938b48ba5c03600d0281662d92fbb09e87a747549b194c00a30d", + "0xaebd682f1c6a5ee251f0e15030f12e10fa8c363c7fee6157f7b2a98212345f1b", + "0xf3cc841c639456a532a6141d38ea0225a6e53d783d74b6487c9115fe856aec6f", + "0x81f74fe5a7a78038b24a9f3edde4d525646b694bc167ad3cf5d66ad12cd720e2", + "0x381aa9890d6b99971a4ad92b9e329b659d64144c115c835d02481627a6abab4b", + "0x48583b8f4ca38cb1b60ee43ae44185c0896d07c749533a148980e4f57d6aeff8", + "0x884303185d244316cb5ddbac8abe7afff2976430bc1edec41bc3431ed9af35a6", + "0x136385db39c52329c77b198d2880a69e21925d382eec85e7c610d4b4cc2ea367", + "0xf0665c699d8cb45ad5a1735bfda75122e603f554080c52c3274d9564d57dd6e1", + "0xe937633003a99bec71353ba47f0ec31c3dcb69ae9826f730e11567f81e3b9816", + "0x244de10a5c5c2a1a3b0b84795e6a700c76e40f832ded5f3476cac1e3b79b303c", + "0xb8d786f7afd2edc2d3883f83026832783d1324fcae13cfca724056d04a5e4921", + "0x78bb514605cdef4dd3c90a99542051dee56a6f5b333b1e31572dab68abf09ed4", + "0xe6d626f81924c547d697ea0e7229b6acb0baf094023674c9779be02660a02d47", + "0x06dc75a27abb8770a4d4f0eb4dfbd37633faf06d9a87f0a97622fda31b199654", + "0x9d39bff0924b19689ef9dfc18c58acd1fa70795a9d134b206cfef0a7edec7961", + "0x996f83c2753b5e4d70f84e82c5cefe6b80b5456d89f48bd0ad6178ed27624364", + "0x8e9002d7989f127ff6e1566674e52e040e76e8bb26f4bfe0a190950431cbb095", + "0x0545fb8fc14c4a86973ab9f1e686248d6c5481f07994f1b6dc0818ff8ae4a8e0", + "0x88ef0c31a9d687bcb9b9fcfef4b7346d42efe8d5bb1246c9035cdc46ba20e62e", + "0xba7b6a4222e42681a7a6649229a425dc79f994724216ef7991b099d5727fbb11", + "0x6404b80d5c1659694c4987083940f8f349be9e0d96f7e34e4b577ba1d67a40c8", + "0xc40f8b507256af07afa9723fab15c3c3a2511dba128c356b218154b302fec9d3", + "0x71127f381f647c98d74e366c366c540aa5e384cb4dac7069b1a7c6dfbeef3d41", + "0x4d3f8926e27ed4276f4f597db2bd1bf24d99a7391674aaf3cd0978bea629a008", + "0xb99378fbc1e92d1e8c233f3db1d102ddcb344912dec81e9b9c9c6ac1174e2040", + "0x308aecebc810754aca4127d2e654a85e3ef0178f9922ccee533e6ddc6fa17966", + "0x294017a4e2a1ee97a47f75b9e25df1d22bc2df29eb96e12d01b23edf24b45d53", + "0x94558c74d35789cc2bdd3b2e7ce003be0da1a81aabb485ee9b2dce43512d6a92", + "0xcfbc746bee5b81188bef011d8835c28489cda965f6e3501ce239b8bfc0ce44b6", + "0x4c7a9d3ba01c912fe559040cb6711e19e46e1e73ed4cd0799f16eab9392cc7e5", + "0xa65558349507bf05fd3e9852e549f62ede41d745a60e62abc3a56271586f2707", + "0xdc0b35bfcd4f92539ca5209b2bc50e66eca777e6e7d413dd77bcfc390cd5a316", + "0x2893bc6247ae750a995c32d2e7b268e919d51397d8542c1789109704daf9bcd1", + "0x73cebcac3e16ef10d7bea8293ab13942fa9a1d09c67458fea109b40235a884a2", + "0xbc4f2d9876d0013c058fe0deee9800e75e3bd9a5ac1e6652fc5cf3bbfdc9b070", + "0x6ea34d8cfe84110a2d46dd58395957142ecbe713edfe518eec53e1e7f8902941", + "0xc4bd665423a3c9dc5f7e3164af22905897a21d5a117ed817faad5b5693c02b4e", + "0xd85d8c3e0bea39016d2c09c035b933b9c2dc5c56d0eb1d6b9a981fad85387085", + "0xa97e783dc101f19cb23fac07320c865665f40c13efafd9d47a1c4e1699606075", + "0x5a292b488af5f4c6d8c5a5b9adf2d18ed3528ff0c63652ea95bd5327e028d0b0", + "0xaedade9f7c8fede0afe0be19f341a04469a127c75e128093928980631a907de9", + "0xc8abdd4fd3e7407f56776e461b3cf24b41bff4341ea4b0a3ca84b148caff146d", + "0xe4685e7b34456ae851ed62d75a82bb76a5ea752b67f01acd180665e282a21195", + "0xb1e420b9fc93d779fde10d68e3e9ae448854be7df0362e87f6f26440ffae2aa5", + "0xce414ad5e4c2140c82f9087e2a1192d40afca9d4f6d9d77818e488677e50d98d", + "0x75339f4f254071dd9d4a945ed04a45ab33b91888bda9d6d38ec1a40459aaf910", + "0x0e6dcb22a5b859bf61a59c6557f9a9bb36724a6003106e4343f85a5108e3583d", + "0x8f30abbdaa9e041b71c1d1a048ca36cd67fc417d8d37e52003033f0e9097f193", + "0x6a84b1ad4384ebc079f8262c2e505fd5276048366473d7937435ca372bf7e75b", + "0x0bfe6d80eabeeb4118f485315173eba177dc750b8b1e16908c43c9fbaf0d1cc8", + "0xfaba5c7c0fee21a789d700f4cff54e35f23786150b4ac61bd80ca832c77f763a", + "0xdfd9eb218548b1d2fdaa5c637b59a8ee26d2061e721814d6e931ae9fb028dd83", + "0x5ff65ef02f8dc8069443df6ae4e26fa4e09656979eec8b0fad0c3a68ce1df447", + "0x2429e66b12783bfb2384f388fc8bb594d764384165464c4b60a7819bf4ff0d63", + "0x742769956aef30c4d5aa5b2cc0f4bd8f939d0b03cf951680a8f888390ac113a3", + "0x51c557f9320aecf0aaa1a75c7f3ec78c7a0e8c762668261216fabd48cecdc305", + "0x0115f4fa348e051b8488838eb5d418e4214cb065d5fed461897f2ea805c55a40", + "0x9e237af93d36ed6b7a8d7a5800cd5e14765decdc78f1c03440367d722ef77f7a", + "0x86a0bd73dee6c2801b31a3614a7da29d932c766aba9579e2f65e55d597675a38", + "0xc8e7b4052a5d88fee5df91eff2fcfe0f28823021e4c7b953d4264e12da6bf84e", + "0x0844a6503f9904623cc2620a168b451ff3071eaef7c6137d01c193776e354406", + "0xc5dd54966aa80f32ad94d5ffd7bb9ac7ef78435e5e6ed4bf3307af3b9690fb69", + "0xeeea2ec17a89f4a4f5df4f3663597cf60018c80c8f02ace25ec973fecb3142cf", + "0x4a011688ccd4b4b631631823bf78387f3044935cf09a0538451540f8099e8033", + "0x17d75889dd087977db39da13b918ee9e0fa89432a6730b6d87b20af7212b3e47", + "0x5b17cebe1f9ff1901d27497b472ee1d8d1f2974f6e354d9b6d2cf60b542e9850", + "0xdf6b35b8917fb4a329019f595fc8a8ed043094f69fce53cf25713b62eee12aa0", + "0xe4dba47ca5e497aeb8a3162092ba55b8693a89ec95446b5ac547ea7bbe1d3dd7", + "0xc676a66efd658406785df1b5132e048d915fbb482d2eba628b8c8effc3f94caa", + "0xf931b1cbf7812339072e2a947e85cb02ff97297a2b1e5b07754e082caa4ef509", + "0x33a6d5d2c6f50d12fd3da5882cc7ae52a3763fa41c863dedf387c06b2053eb13", + "0xb86c187a83c72f94e0bb008907fa6de29f9e1b192db988f77be6084515c94a67", + "0x8797912315d18270feb851e213fae6ffb9c37f382bfbf636396f2cc894f4129f", + "0xfc19517767b1669261883f8be9634ac15c68f6ae266040b715661d7cb01ac7e8", + "0x05446487b2f5080500bd6a80e36e4d3e7b613a438393b7c937cff3e825459d70", + "0x6ecd931a9843438251ff307b8b1f4302260de59157ca07e6d85972d05ea95fe4", + "0xb91d5efb0e751cb3ebbd24112cbda376f4eb7ad5e464c03186a93bba4b7d602a", + "0x6cb2fb51669631659dc8a1db6e52a77df3f8c66664f94ddac0bbb0ce43928621", + "0x75ca2a774877db1412883e3da943d1e2183a68a33d5964966fbc90bb0ec9e824", + "0xedba00768634109c66444c8db57d888d9e6ce42558293f6a23735ebfeffdcd75", + "0xdc60d8a80d749802df843c50e302e68a9e514aad9d43c6b0ce2454bcf6cfe8b8", + "0xc15f1d012a3792dacfc0b420ab1a6e3487a2df6e21c930d0a14ae905db9669f5", + "0xb7435a4968d24e6930851b7fcdae33096a3ba0e230889d86ab8f90ac2a7d5297", + "0x7914e5d872ed69611ac3a10209ffc5fefcb38c8ccf564b6512bc989ae95792b2", + "0x4a716b386f3da2aed0babe8292720e18bb92e55ce7679095743d1b740d697953", + "0x37ccc4dd2333348bc3e976ec4f570bbc511d76903d7bc9437c477dff4e63bb42", + "0xde3a6f4a387cf78dc63f2bf7f4eea18868b85abefb17e6d505b48cb09194a009", + "0x55b64b69b00c46385488c16d7817c5e81006b9a51889e5cdb2c32b7c9a4feff1", + "0x1e9e701ef313384832feb969252839b1ff4aaae277ef338561779c84f9c37b95", + "0x12e0a5796e735f4842856b65123986c2030565f539b39ea747f922c5fc03ccd3", + "0x61c89368bc7ac74ffd1ec44ee995b3db68191f57eefa6952d9233e5e9c6b60bb", + "0x3059ea102456b82919b637d3b538b5023435532036135d908727dcb900df186e", + "0x4c3a183c65e5ae082eb70d02245c7503cd107a9ed88368a49ce285c39c408531", + "0xc5474990ba1ea187b25527285be035a319dc209c770f85edd74831b8e0a334ef", + "0xbd2d03f5b8c3db183db0406da52d1da718722ab693c308274eeca73a187f411c", + "0x18b084dd6a1dea14f723e66b3ff0a4f7443b1e2f75102a18731856bdf8083a20", + "0xb382e9f817eff322c266b7a9f049d89ffffd6679891d0dc112cced1fa9f99b88", + "0xfdd73b0b331149f19fd10ae36f6b36f9c606d9c7a1e2f691723d3666224a18e0", + "0x4863141f0719e2e680dc3ef0ff4b653754b3c03dd7100352df6a258b8dd5706d", + "0xe723ffbe55d9bdc2fbdcfdcad4607b8de877a164df77e7e05a83f0e4d83eb85b", + "0xdc810ff9074fdd3775a88d85c2e8927dea227875c58c7fb5566f38f6488392a8", + "0x774fb725fcd97b11814a16bea69138ea116b73083fda7645bc65c51f4a819266", + "0x83880cc19b589492426547c6d58dd68a115b571cbe5acf5ff10fb8597c441aa4", + "0x9f7e00ddea20834dff9f34ae46d8bbda756bfd986fb589b0c2bc86ed459636d9", + "0x254f85226184761f26112118c2ef55579c733f630f2957698347d51f166255d8", + "0xeaf894baa7be3f2380eb45263b88f21e2e2e3b83c46b19f00ceab99d60ccc09f", + "0xdaa9f376cae86d5b033542cec806ae1d99f6ecb9782ce28db67d6c1a40409b87", + "0x15d002f40378d87b40bfbca9490077cc7499a1388aab2862502a0bddb91dbd58", + "0xd289a431a680f31f12f3b312753e3d058b2496a985b6d04ba6e734cb8bd91b36", + "0x2c310b010ea8e9e49445de60807302a1eab9422e05cfe444e1f8c1452445eb65", + "0x29126fa71b142c307aa0da1073a778ce671367b3f38efb1bc288f1944db098b9", + "0x70f68698699b897cb03f6591a82b496ceba50ddf322cfe106b4aafa6b46be137", + "0xb144cef201499639497a37909cdccada285a2d153d88c079b43e9d11df554d84", + "0x8a505a1647e870e0e83847cb2acc48c87bc6bc8168c6016ae0b51e2094bd3892", + "0x6caeb16232f5c1b116da04279e734a2fadd158c92a75b2f1a9a1a480cd5bb7f2", + "0x75a39e091c302a01658f7a3be2a25c5b6113367c515ef84302561fe944e83edf", + "0xff494293c659126587d496644275a55d65a89d661e9afe9cc02fb077447f3f6d", + "0x1d15d1c8cf05f50b6859fd4174616255bc69ce65bf1d0725246a5299f42b3779", + "0xfa1688bef4f00e35c727b246c303ee74908d39c27c96242e3dc43bb7bb0cba33", + "0x14cb9fa28869142a71854fe51babbdbb01819cd781dc04adc77ddd6850dccc18", + "0x9695982bfb6913fc1e57c7910df4e7b22a6e9933018f0fe73a177c63609adfee", + "0x40c4cd35210cc0a2ddbc450754d182421205a3edb2d957efb39ff5bb8eef8517", + "0x55348cb193e0b8dd1ead19ad6b993417de12d804aff532619340922542c1ce49", + "0x45d7aa4f6e056b58b025fd28b39eb1a6df6d19ca895f1d705a7ad60f5416d4d5", + "0x398cc2c9add8233e655f6d7afd30e40969a351b434f71b99908306d33c912281", + "0xda81ba81fe002d230d119b5afccf7d0237e7adc7337e813d6ec0a28843ca0625", + "0xb66c544e92b32d0628618f4018fa9de6632bd85587e89cbca98ee46615ec91b6", + "0xdcab26d03dadbba947389eafafb96c0706ec64a77459d842a32f9bbdaceb94e8", + "0xa28d2080acb86f11cab46295cf94ba8191ceac9028d5dae65090d64fb93c476f", + "0x8890f41f8a9f8af2294ee88fb451147c773a6da10bcfeb01fd3218884ca08935", + "0xd7a03d6919d4a25c229c5ea9184e944a609272baa0aa23edc9cfc61c3908ef7c", + "0x2da5bb5616b8d389e43c4a941db7e84174c096ec972ff000799cd324613a9f76", + "0x0849fdf089f5764f2ed3aa53d317927983adc489ce44b845b94f3fd0302f132c", + "0x9904885344ddd7bbe9827ce33e1a560881e13615d3e5e5901471934f7b04074a", + "0x0fb2fc7aa97751f64713da758273d02c94c9171f0170a1cb2ddc3786de2b37db", + "0x400975d18aa62d76029db3c4817d96448465adee36f530731218f1180c9a7cdb", + "0x548f86b242cced4474aebef09438f0658c0443af56ca9924ece31ed9aebca3e0", + "0x4c7e668c1646961d7236100423aa83591b513b6bb218e00ece79723bdff29b77", + "0xe5f52493bc940d929eb027247fba74f5ae68fb4af2e6feeb61d9533ae245c147", + "0x9d9e92185d65eced764d9a332ada4f17357a69b79576784e91474ed26d3dc831", + "0x9c037be359c8f11e138f87d6631cd31f6c6724047a9f92394e73c2b7c892ebe1", + "0x0993a940d28293ba4d701ec7bd8a9c024aa35f997e8d5681c9bc9c34a280413a", + "0xb7dcf710ba60a6f29eecf0b7df3cefe292aab5f6f186143671f7e9e15c8dd0b8", + "0xa5873e0db289e9ac59bd09778828b8a93913b4613aafaf8bf6b5b2e9cdbc91a5", + "0x2699d2744ac82416a85df765c4441686a8dc899fc90664fd6cb4d42ea1bfa70f", + "0x7666f82ad8d0b794b0450f9b95090c581772f4bebf5d7794c33a9eaba823106a", + "0x435c6bc2c64a2008e7bd3ecb98b69942a472b8b742ee5ddd8a4172b363319e69", + "0x136c3618a26829ab3cd24f4a18b344f8fae282353928f9d2b042bef6ac4ce967", + "0x8d2fb27b98af54eeee7e48dfcbf5000e92387921824c386855ec9bbfdc409b16", + "0x5e7b2d58a07ca9c12f0ee57404d5a6fc857256c470c020bf2ebfd83d2f635a10", + "0xa0643884fd145e1c7fc7ff49aa0670d1aa123fd949fecea5c2b73cd8c7f6fb65", + "0x40ab63894fdecb8e6bc71ee9ff62e0608b72e0d49a1d9a5c1473441821089a82", + "0x1f122cf8a4851bb6dd5ecd6b53d61548d42fe672220b3f9ac52448df18398f3d", + "0x2e1b58d008c8d80f12b54d8fbcaa8fe20088bed67d78465b41969f20f1bf2341", + "0xb2bff184e404be5a022b98dd04fb0f34f56197edb5c64900264ba9245afd3a07", + "0xf6333df7002f589e571f939fe3c6a1270867971cae04a1e8366a57cec78254e1", + "0xee34d54c40ef603cb8a4cc8f8c585f1050540ae60f9dc55a8db1931f44d50d3c", + "0x08ee5b97e66a5cdb5cf828fc1fb8f94ac6be2cd36b94d191385554b1da8284ed", + "0x3bf106806567f2f6e7b179559df51a71b5e3a525a71450a89ee01082b6323d3f", + "0x24a571db61b90f252acb4d3685c60c7245b5bbe70044d1814bddbeb3fb38ce1e", + "0xe2b7c64f2a89df1e61a7a5bcabe945555c906eec1427a5b31a1b6b22dbf423f4", + "0xc3bd4c375e31ed9cf73da7795b53cf37d78e604b0e25a2c1f1e92a344b691e8d", + "0xbeae1bdfb3f051da74449a74055f5053f101b5560b526a0d5b89932429d1b2f0", + "0x8c01823b41a9f7bdbeeb2bf755beb9f8e7e55e855759c3866b23024ad11a810b", + "0x4412fa13f83c6efcb68cbecec06abeb88ac3ab73ed3ba24e66de2bf8b16bf773", + "0x2baa43e104a25d79b3d8fd128c7c9659fe8f0f7fc1f77a818e7c7c735a60addf", + "0x1fd27edb9145ba15a69d77be6901b42135bb337ef4c99688ab6808b98cf1032a", + "0xb0ac66a2bf55bac6a2ffa2fc51bfd5aeeae847d33eb598e317ca9b01ab2edb16", + "0xc42027e865465c19d6458404c5db51c0e3f4a2346b2d7ebf823139b44a5b11e6", + "0x3a8853af8ece1daa2d6f724eb06610483375b0408811c9384df7dc0239c8dd40", + "0xe9419f2c466fffa8bdbfe24dc6cbe971c45735bdc448d704349ac333f1eadb0d", + "0x56c7459285df61ce68cfb3c76e63297006204c37e4fa247125663bfec82e1aa8", + "0x8684a6dbe6d74e3f32604517613fcf5cbdb53cda6cd2552bc3b8876ab2b6f9f2", + "0x8289ecd3d4ad58a845b3a6118a5a9ded71c89ec0352e226ff26490ee9d1980ea", + "0x91def919b21e0fe3b4f1d979097ab096b9e118c530a69d8837209ecafe04f655", + "0x5134751053068f736461591ccdf285fe4bb7dfc2c72c06464390b75de07bca91", + "0x5be1eab9070f0f04518e93e84ccc665224c35537c4ce1829669493c0357d4438", + "0xb10b30d6a272d5348bfe0dcccb209c2f62ce9c47e972fdc850878b5dd33b4700", + "0x22448ba3257f7b62ade1a50c93318684b7d0e8af0d8e16a10b0c1274df6db80f", + "0x89e3ba2174156a21ba794d8fef5e1bf3f24c1d2f5008eb99e8f5b1bb9cb0916b", + "0x51cd1b1e6b61787ce569c776bedcae8e393c6a28da2820edaaaebeeb4e424109", + "0x25b8425978039bcd976507924ff7d609948b268529527ce274feff6b43757a17", + "0xc585e0998941ca2260431dbae640fde6795cb519c8a49b3939d1f4f81d23fa6d", + "0xd8dd72480139f21404d7456212ffb61f5e3ddc5902ff4a3152f80727cea6834b", + "0x1a959742df084fea7436599236452a5a0a25fb4acc2c1f95416b83c6fcb10a94", + "0x6929c5dc161d31dcd79bd4fdf3e147e913a98baefbf7b45195f10e3b8f92b873", + "0xa70b0262f3e45eb55f735ef1219e3cb0e02d47c1cbd4dfdbe61507a96b2b45fc", + "0x38e4706e43b28ed99629ab0f458257d015120a503c56537f5b1c26113ae2ea34", + "0x94d3b6eb7ae2c6d611c289ea78f914b8a4085c0860e73442fc5fec1e9c692a31", + "0x4dddccdb1235711fd18a51bfe8bbec86b6e1f0011c267ca1308bc7de76328e02", + "0xa2e8cdb8d05d04d04b2e4fd92631d97d36da10602b9081098de8c64b9f0e6997", + "0x633754501370b61b6a89b253a96c19bba1717e539bea3f6f628519c93ea64ca8", + "0x7be08951dc0714ec09e929602d1f5ba3daf509ccc7918722b201a85e5d6a3094", + "0xb258da6cdf55b8df38e2c285fd8531dd9bed21a7cd0ea19f45895d389b52ed09", + "0xf6c01265b3388b9324b2306c88993178af7968315491b615c49eb840ed3a87f3", + "0x4e17785f9709a70775692bb7358980c183eb63f9ee14304e37484fc3d208fd02", + "0xaf208ae1db4a0f7313302f132349c24be4516c5bf2fa120afed37d499f145b16", + "0x488a93a71b0b16365e122f4a137fe53712c301ea62b80ab818061d0b57613c69", + "0x024099c94492c8ec89f7c6928e8b2eb52dc9dabdf50215c59be78d95c96a8dfa", + "0x0fc13aab78aae553541dd0e9a10160ac4403077e35f24cd1d4426650f230cfb3", + "0xab5f3c46e0e9827c8a7c79608ae5829e433b21ecbd2c6484233eb476c2c7ab09", + "0x65ce4423b3163c550b4a37f7e3523632d579f94a315719ca4505f6dca28385d9", + "0x317f013c3a7e9948520a1160bbca1a786af2912ebf8b2a52861c7d0df7fed08a", + "0xe9f5f7a0e49c8a1fbdab284c31c8009de796e6e0195763e1e147ca9201892dd9", + "0x07b4e6d2c5007a71fa99c67f25e98cd7e7422c76f5041a46f145aa832e861fea", + "0x3d0213e819bb0dc7d408a846625073bc4d957f757aa651716d7bdce17425c6a5", + "0x23ce42822b8a4d0be074fef3e3dbd4764080c901d3d2c19e201386f3fb65a7ae", + "0x639b75e1a6b0e63ef81d2ec540a3bfcebfa56698bf053daa9bc18da30ff1348c", + "0x41eb1cbf743bfdeb0997657cb77a806e0cebe425609b5a2f544f760a6d723be2", + "0x025e581f8a9dfc7a96def50f281885a55198646b2464f054d356a0efcc0feb80", + "0x429faa4bfdaa83c0d45f67894958758635c2e1a78ec3b63376da7e3237bfbb41", + "0xaf1c2ef24fa153637fdc2d67b1ffaa599b9a09fcf00086d20cc7c2d054d0aa91", + "0x8d28de3166d0f226fcd89899c622d7f43fa20b6ea4eeb81976c5a08ddf09e5c4", + "0xd6befb28c9dfd0c738797b15e237bfea883bf513b07c575259dd5a4f2c930692", + "0x1ef2170c922c4b149c888a1df7f3050e3f46b8ac1f0224f802771a0e8d38cfd4", + "0xd052117f2b8ac75d0446ab5d0e76b50a510f7482e65d0a6427a3d6873fbfe7e6", + "0x53408808bbe0893decb31a82c9716f56e93034d2a11d055fe71f5286e971e1bd", + "0x1a1122d7112ad6c06ed06d7cf20a71fc3654f66cc0606e6725bcbaa0ae190f7a", + "0x1a55ff08504dce5ddd7a238eae153ce48971a6bd38d7a3dca060138996ccf1d6", + "0x2ce13ad2378c450200eca23f756c06071f3e612b2b9c73e1c6c501ff4c02b1f5", + "0x35f144ede85fc609a19a5748ab1a3a5fb2988bf6f78f8210c16febf929dba561", + "0x1df10cd4195b0904b792aeec7d5723d1d150386bd04b2f5f0df5deadf3c85ff6", + "0x5c7a6f272a83f6bab673609a539f31d7c67c67fafea6d3034e07ece1362a829d", + "0x7d668480e1d312a5362a3c5e8f885c1b2de095aa46891bff34592ab157ac230f", + "0x6162f3d46eaef20b59d1a491f74f9eb14b724a840d8d023ebc16df8fb775e7f3", + "0x5963e212267c43898316f3e1112f4834e7a271ea685f2388edbe888e97e38b7f", + "0x2731e65738446fde914975f713c57a8a8f4a125281d575c3a583a5dd36e0214f", + "0x3cf5ee7469fbf7063c7fa552dea1d0251841644e689dfe63e548e2dd0bfe2eb4", + "0xb28f87b5129aeb448bcab637389a294c87d8070fa18681eaab06278ea4178fe3", + "0xcf22ca62643b004a97845a72d50d8f686151aba153f68a596a1bb90e9c42c45d", + "0x64ebae35e39f00c73e11e3956ab4e7df723aeabbc3fe46b671ad5b54ed6a2cb2", + "0x42e2aa81b708f8dafbce1c10cebd49f8fe1a5c00ed9157beacca685f067ba692", + "0x443d868a7f7996ff6a05c986a637fc4ec1b64fdedc2c61447eef73546ec015f5", + "0xdeb3882ccc243aed58e3544b3f6ac9ddbb32bb26881f84b0e70ce0ab6ce80c16", + "0x6af064aa512f4834dd0e6e8b19bbb9046eaed604ae79f0ab8d872f2e3809ba6f", + "0xbf6e3dcf16b37125eff5e29429e48a890615ca887c6fc3ff05299b7432b6e470", + "0x735cde6d3129f769abd894615b22062f78e86087e3a0d2c2e80cc2d77d3b9e1b", + "0x6877f34a9fbfda060fcfb08ad55c23ceafd9c223ba860a0634ac1b8f2e89782b", + "0xd9189dc462222c2f14c11f63de4ab424d61bb83a83146d62df952e87a3e5da36", + "0x720eac89876cc9a772da7974d5e439b67f67ddc9baa3a9452cd4b74015a3e2ba", + "0x89824ae17ccab48a435b8c36320b18be8557a9dc44fa6fb2c3febb3087b481e5", + "0xe7d412126456b86597bc9aa0745dd13e8f057a79e8a547c1d478abd16bd28a07", + "0xc23a9160da1875e9c7d628f94d414a4db4aa2f5c4100e226484de948ffcf4b76", + "0x45b1b602c91d00a3abc8e567db3b17f75ad500da30b2c51c03767900495e361d", + "0x9caca224c29960f1d44b46ddcfbcc076e690f436f3f19980a0565af929402792", + "0xcdbc9adaddf96f8480c73360b4f06be947a420cb842cad3600b3645879d42c26", + "0x5f2cdc3d2a8bcfe0631c4f981cb69079342dacc4d564870f5574dfb1febb7c9a", + "0xdd004991aa02fd318fbdd65c14c5c333955b66e0e5f529896bff742d7a5adc34", + "0x4731042530e21dd524a9b599bc7d8824b7da45130f7f7702c9266fd6f5f5fb6e", + "0x966fbcc1576acc365efbb2ebba6dccb57cd211bd42bb10fecbac7577e38393c2", + "0x26dd365d2cb06f1430e28437aa350c21ce97e431f730e03bbc1ea734dd5b6139", + "0xd3ca1121c409364a6ac8295e790950ba94a91a9f161029e3c95f852ed3de405f", + "0x05cd39c1ddfec076c18da28f240551b1e78d930d4cb2eed4e749d37a8ca1e361", + "0x88b7084cf72b284e93c63729d3874ec3a805ea586b44e04d1ef31036d4d327ac", + "0xb54478d783008c30c6acc897d1e9e491ecf26c89fe88c1ec33a3b89534229876", + "0xb8dd2933944c78a8fc14a76ea4b140380ec751cabf3915e5a448145745b501dd", + "0x41ac0a58ff0aebca682eed3ec85b477a3ea81694e1492d90e5fc4ed663ab4c54", + "0x4a06d54cdc1be23a75c5240467745b8fa305c633ce75ed1cc54d6d02970f456c", + "0x259f8ae459874dc723fa5e3e34a918c98a88c0a3fe929d82055fd91b1bb05d2e", + "0x051be91ea29b718a7add99265046ef67873dbaef9a3155e1554c338717d515d4", + "0xedea3275ff9986281eb6d60cc5102ac7b839c20ad883db87d39e31a0a29dc114", + "0x11ddef1858c9ec82278078136e684305bcb7536faf9cfb57221b80ae25b429c1", + "0xa64006de9bb27c090e0ff1b5ea8796ec172baa7f27d73fbfda57584d00b254d3", + "0xa0189ea7fedbb90640f118b8967ce54accd3a7a9fbe09522c7a273d5b34fcc08", + "0xf4265ed608aa4c1c25a3ceacf4370ca9406280dfbf7db8a7f7516d3a1779fbdc", + "0x01669f3a9ccb892e5723a4ad5a91d3c1fd28abb8144e660f1c56bd456ab71463", + "0xa973b694b857005fb9671fd35ce6b5b9dc76b81f42d3bae64d80d04fd20d76df", + "0x43eb3c5d577726e616b2e32c82fc2280873432f14590a5f64dd804ffb8b0ba89", + "0x74b185addfe02130f2deaae75f43ae86e99704482c8a5b37b391271710692407", + "0x4a843bb52f67d924c656d669362b6746c0ea612a5fd354fe22541b28f2fbbe52", + "0x75c8cd349d00f09b0e6256ccde9e2695a5c5f6024b48a6215b9cd7b3cede2ee5", + "0x43a6d15e6839c6344cd10011354b25b480a3263262de2a358dc7e93c8ce0a0f7", + "0x0f74441a9c3ce76a08ed1ba535f8d84d57a7e8fc899bb5da529a23fa70a28dc8", + "0x2df1b7e2facc06bb29e451c799439ff4299f36982923ccc02aa2f9e07a77dd39", + "0x5ad0d3c266f944b8eee43ad41ffc0d60f16f287c7fbe151ff9e1ebda0b679ee6", + "0x825822586285b4fd8f0ab5d8c4a61da4e91aa922017ea02fc5630ab10ed06042", + "0x8a03470224323a36447c0e28ab363e972928cbd70a9ee49708f913f2381d077d", + "0x43f53515812eaf21872072725410d1da0fb4d6a115625f87c742fbcb993c44d7", + "0x2af1f3aa474800409875b50901a003987a7a8281028b6b5d6e28044ff6fde529", + "0xa3685feb85e5323f1e77c300246f0c34f8c0eb65f5422ffab434df4484a4324b", + "0x6f9924a114f18b63f8460b5691b0e9b987a239e58699496a68766493eb9f9d1e", + "0xb56e27045264eab13a2361ccd8e2517d495ae8291bf00a0bb3fed8508881a153", + "0x8edbe71b1dd1b1728904ec4a721fec0e2d729a3a2f29775141110586efd679d8", + "0xa1cf3bf7cb6af61e6f3faa2826c4962901b00dc6cf548323ec4c6710d3f59132", + "0x95c272c1a208abfc724bdae6a5775629f57598912b522446dadcb5dafbb69696", + "0x4883d4a7c6282329772b78fbec671893caf2faf6bc0fe455d2911b5360ec27b7", + "0xc1ee5e4cce9f2a0975d346c98c354439818eef689ecab30d235ff6bbe4cce844", + "0xf6fa578114e682895cb1c0382aff2d3edf004effb53cb25ddcfdf8be62222b3b", + "0x4918b3e71c42a9209b8ebee1a99b4e36ac02ff60ba6921b2908aedc9a7585c36", + "0x7a5a799a59c3993bde318668639598408cab463cf14aed9884f9e11a4d5aaa19", + "0x00c5d806dd3daeeb5ed171516e967f1ec965352aa5b34ec41c87fcaadb7b11b7", + "0x679f9e1e8e6b064368a3d56fbfe6f97b30e30893f47252aa6a7d8237d989d12c", + "0x04c1e83db856e2da525ce0a529c36adb93838a06f7d95627e2d994dfa878e493", + "0xa12c381979fc25acd5c356efc0549c5dbd460db5442e2663c432ef63232ae31e", + "0xc4e1da3c2ad442bd0fdcecc641a5ae1efa2aa7201bd65e0bc1e4b00b0e799238", + "0x105f340886d8ce3555dfc3a9d863421cda925522b21baebd5dc27870d83d8b23", + "0xf5d919622d4c48ec64ef2e883264bb2aa856c2bb4e752d256042d3930e017c88", + "0x74d6e9e473d5b1cd37c6ab834425af7656f4c8e1b6568880c2e9f0260a401dce", + "0x5597681758fa83f8693d1b559101836e0bdc927193585f890b9a384e8ff9fbd6", + "0xaaa6f541d94a945f1ec7e393575ab408cd642f84dde8b0aa7f8430c19cd4bcfb", + "0x3260ed182f22d860e2b625533c808851589f2e41e55076f55b5cfc1f4341b537", + "0x459fe6b554f1ef48f468e61e8ff8b9d25427aa7f77ab2b6b14f630aebdb611e1", + "0xa84089150b7cf977942f5c82db37787316fa6f4940ac9eb06f4643b29ad17fea", + "0x25cd2c9ed7ba5e33babcf1afc091b79e06adf05de370d089646cb801129b9457", + "0x04d61067ba7fba6ed30cb4fe9a40bcbb8e2782b187d8d6a0e37766a6c01fcdb0", + "0x5fc3f13afefc4b831b54c523ab256e780a4ba9fac52fb7dbba4f862ba44b9c1e", + "0xfc2679b65b13464cb3816807021e38ffa4e0bacf572747f8c046bc96a4739be0", + "0xc9e9598936eed048b87882f886c008e52cbc98bf54c8c39928fa779b96e1744b", + "0x9c067fd47dee866de589129dc58d7e8c098f9e9833e325926f7d655694f35bd5", + "0x18c678f0c0c1b29f5ff5a83d2468667f1a8aea2dcaa128360958ef5d67f0de3a", + "0xfadb813be9a88e50c4ea921c6a0ba6c031f024fb99b7d6a93b8cf1ea5f995856", + "0x15b67bb4a517850355aecc0e79b5582f3bf3790fbb81bfbcd632dcafbaed487f", + "0xe3ad603dd8539011480396f7551ae590d25cbcca85fd0475fc7949307af009a5", + "0xe61be68bf57656076b8b638237cbd31bf3a0692e225b81694bcfe2183e0e2f3d", + "0x13fc0b2b85420475d413301b244a82c015e768a95f1f3240240a633301357197", + "0xaff7d809372ae06ed5abfdbfc7584c1b731fc2444ac0cfcdd0e0d12d919585a8", + "0x1c16cd293f5688f7d77a767195f36a75a1a62b886a00e581d57b6370cbec0989", + "0xc9b5271fa2bb8192b1e2f8f304477f9fba0010f3e6eacf9cfff8b7a5a77f37d7", + "0x8b887ec9f6fab09f1f5d3a9e001a807654fb49be354cf3b0f705a80c048b5b97", + "0xe4b637a114758ea5484dfae511a5f0d88a184c83e275366cfe82cf1b35c42ae5", + "0x38b9a537c5cf522f99ada24f759b200b6045cb9997f05ea2f09c54a554cdaa4e", + "0x27b4c2fc7d585a0fbcddcbc77dfa0444cb1e915b303f91fba43b9b3a95281902", + "0x1a4de326e3538a53a958a8055ca6adf756e6e9f93976627d112b8343bd445c52", + "0x9b369fea35bd85dffb10a24f9bb0074f411899e3d505a1549938c4c1bf80111a", + "0x4888ecb1b51dc5d4faf8ad987501b298985eb5814d0b8055d00bf34d940884eb", + "0xc063a2893a30fbc55bfd4395db9d8854a4c900f726af26cb5d1905f7d9dd6a65", + "0xae493057cb0f7a43a6477aa1e7d1e62406d6028f8d35ce4d0fcd4e309376e911", + "0x116288e2a06404aa3dd63eca83992b6d74b47bf0b45a795ebce730e76b78ce4d", + "0x3c22d9c7ee98226ba96ace7f7c019a1703ef292033ac253381a8a18c2fdc347f", + "0xecfb1e3a21cf817dc12ba477128dc494a61762b50e67b9aac2e69964fcf08251", + "0x586eff30542d02ec75cae827877e97d665fef3fc367eac461ec58475b32e0ac5", + "0x0a3944ead5ce6674361157bc5a434342b4790a6f648e9729073afd02729d683b", + "0x3fd7eee2a25ffedac4442b6e60cc95d654f42351cfd646b821c00d0c64fa0e54", + "0xca89d185428c8056e82feff16a21ce5effc6cfcd23ebc4e112d9a5bf92fe8d02", + "0x020513017d2e98ffe7d52c07074fe4f4a6e77ee285623eed269203295a9f3616", + "0x8596ca7f91be1ab40c026b00a54a9d2e41e7ec479c197af6abdee3c4bef94a1b", + "0x7455f7f237ec777303ed925caf869cc73c044da6d59836ebc65050cdce20a862", + "0xf2761788609c45098d080e6852b9ddf8a966f8a5776da9cd021538e11f84c081", + "0x4cd1bdb39facd85e2260d74f182adc4859ac26ff7d1254108111f60ad3c0f4f8", + "0x428b1167eb9dd51624d22256637ad2dbbfe2549077069bdab23dde71c21c244e", + "0x004752875df306fb127c07bc528646be044e7aff6a42b9f8508dd6d379528246", + "0x6400285ad904ca915b47b7259e9d0d96c7dccd5b4e57c4884f03c22aeff271f0", + "0x5766c8b8f8edf43b0a1d732396124cc629eb2faeb8246bf37f56956d0d4ece9a", + "0x7462364f2782dbdacdb63ed9ad7997218c3617296a92232cbc22dddcc2dfad3a", + "0xa92894f0d3b92a92a600950da4308cf22d02c4bdeafde724221a4df6367f071f", + "0x530b781fb432211530f407c93a0da55d97f7816103dd236d35a5416852c0dd92", + "0x709ce3219758a439bae296a980ee12fd3241ec07fb5f5f7d4c69c96f379fda1f", + "0x247299713beb0522b1d4b3810830f4a39c9d86dd11cae19a23996771107f8ecb", + "0x81520ebe99b2944cc3f4e7235fdac6afddd9537ca5ce8299ae65191241d404e4", + "0x6042dfa21ffff40bd0974974b56367be8430f6b6123ea583e36b4124c5f29d08", + "0xdcfd4655c6221d55fad4cef35b1331b40b176fda7fb6c11db7d5cc04187b4882", + "0xbb260bb4aeb3af6deb85051d1748cebb7530217cc8260ccdef741ff2d598dc22", + "0x3be72c045f8ceb904d36dcc39bee464ba632402add4183ad31af06e919be2881", + "0xa59c464c149d78f5999fa5ca418ce226310b77e2a6b65eed2ceba9cb163f176e", + "0x211c6bfa31fa5634f909063f9f69cae230eac9d2ee73a8a6d2c720f237352e0f", + "0x6f4351f85a0ecc56a09411631cabc2fbb23ad70cea80472c807cd23cf62b4fa5", + "0x595919648aca1b0c0ef865851d50cbe0f4f237c3e0122ed6bd423b82b41003d4", + "0x4d8d8faeeb2bb1b649b2797c5c77f80b5c849fae29a173ca8184037b5fc6263d", + "0x1d9484438476411b84dbe20316aea9b58f2785242f6aad39bfadc106b6e80b92", + "0x6fdc8e6a1d473473d96b41db69d5e0f54c8bf336e85c4f4a6e4c8a24f94e89ae", + "0xa775d07b533321d278af6658f3498a66a6d243195e91bdc51567722496275b8c", + "0xf6952f3a1ee19c7bf1033bb9b3f042e831f9b4619f01e23253f4a0b029013f17", + "0xb1b1dff80ec1ebef8234c0dff341d9c698c7654571f2c25161667e4edacf8926", + "0x8320f1f61918ba5d9902c06efb94d6f6cbfe8920438826b6b67b2658bb68e877", + "0x3f3bbff8c2214a0d3698dfed1c9dd8a99123401750ee9544de3d771d6f96bbba", + "0xcd65458c19e6cae7b81dafae385b148914eb6ed976bbede8802562034b670c3a", + "0x3d0b8a8fee8ed214f36fc077878672ecc1ae54695bbbfa152a650c15bc397390", + "0x6ee818200d32c0070dc6b369f6394b25a0bf27a5965f195a3fe1f2cf65438bd3", + "0x9415bd868c4cd0390c37d2e65c3ca154a374381702f128665d90f3dab2fe962f", + "0x68f5a344f33a3aaf6231060312dce5af095880ebc8514eb80ed87999b69fc385", + "0x95ef1dd00f74577ef674316005e24d2400dd5780020c8fcca5f3f119977b4afe", + "0xa3b5480878ad9eded8cba26dea3f80d0b961b9cfb8b44bca5a68eab1afd3f318", + "0xff7b0e331bec7020af8aa904b9ab8c06cc48b7589135db941481420f0a280a42", + "0x1a24b4b3bfab2ba4cd843e1ac7608e49a81727c963400ea9fe3c4545a8521b83", + "0x7f07f91e32a8944b1da25cec3f6770a6c59006beb03d812a7abee86a9754c7cf", + "0x009a4881fc115cf0e4ba01a9e78cd863dcb54f621b2add7db668699629c95f4f", + "0x98699ed254446c76bedc8bb46a34a4542ced2e6ab8e2873aaefe723a9884f2dc", + "0x9e3bff6c2d66c93345136effaa8f2fd70ceb37d321c8bf3e75df06e09b95db3b", + "0x1689b716920f09241e075f61af0f9563bf6ed0ab53ee7b7f04715375d5abe3fe", + "0xfec5f5732f53ffd71664cd52067a1a27a452f42582f077d1d1b60964c7ecd63f", + "0xf7eb9544c668994e209e152cae68d41cdb820ceb71fdfe663e6a4dacc7a0e7bf", + "0x6ee6baacfb04e4552b7a40dd525febf9950afaa8e7dc3d0ed310d3108c92f8c0", + "0x28dbca51eac0bdb53faef12a8029f5bacb2dc3f37fb73c2f2950a82254453414", + "0x44c1e6ed03e301d8135e3908ac28e6068c2aff39901bf9c47788545b146762ce", + "0x1589b485e3ed72a3ad7426a512fa7bc7743295a52c5bd536ba1016200e98ce0c", + "0x4a3b3b514a8b9ecce13517a33098ad0ea50b86be59afbce2d852d5e687b6e660", + "0x9aae3602efedbaed3563dfd9822138f49b482e52c620450db9eb05bce487753b", + "0x92b2598c57f7e21e2d88c24b7a53fd4f2f808a11b9f49f6e196664013ce0a4f4", + "0xfd028c76e9402356958141e99215251f84783ebda9b02026aa151f6e0c9a9bfb", + "0x032a4b576d27c63c75029d008259e0ae303e2483bc5089fa849969345e5acd37", + "0x275d7b842c0891f6b9d699707a8572fd433b2f2f216147650b80416b2f81689c", + "0xba648aa2aaea74758ae39d07c6211b116ab1f6bf3950a301d755f8683f1d2583", + "0x4de576cabea90df466294c60d04d6010d54323ae6f158f9a9bbd815446ff26a1", + "0xb9592ff44325d6b1f79e56111273ea33968ecc88c134b5fe89f99f36f458ce3a", + "0x14a9963e13b5ef4f2e2ef934cc9bb1f45eefb0a08bf422533583e614c560bf22", + "0xdf6f48fa144d89c7d4f22302a60b8b05fc12dc9552538e445addf27cec92f684", + "0xc0e851884860fb3cff32ecb2d978a7c410e83f51f3041e1354c9d2e5ee3e25fb", + "0x20262585f1696078100d070ab9a463816c20244365e735c964697ff05fea5d4b", + "0x4e7874bcf3a58d33b8bd444fab5a45260f1d4544cbc7611a548a77814c086810", + "0x3fb859ffc73e2c9d8af056e435f58ec04f7cd243b50804ba35ca0845efe3e887", + "0xe6e8a8b139b01c725725819cf92cf5e75d5d224db84895b7e7bf4ce479a86745", + "0xfbe9aaa6fe517b155cb2812769f3a0df7ed479ac142134ef9acd01701d4e15f9", + "0x58bb43dd312edcf8d630137a72b5219c04394d0032e1d00546b64fd59a42b6bc", + "0xc1889bbfa8ff4d1c8c2e9bc1f0da2e92d3bd3e1f566fd51b63f39d45a7672a07", + "0x836a90de1df417696627a0a525a71be6e15799fe58c0105c8bb1b88d914170e0", + "0xdfe492f017e71e3c5a6f45040e11744f85209f6c7fdc8ef63f29a5141d8d0cb2", + "0x4e6e62bb0c20d9041325cac14a412657cd501e5ca866156e5fa6721aee661109", + "0xbd0158d63fc20fd32652dbd430b170c6f5676bc8ecd9fb62e0c04bb605b0f5ec", + "0xbb9895aea70a934f732ab3aaa58256f78cff7fa7eb58f6529de4f55af2026ace", + "0x90af79ea726cb9415fce82763fbefcf80f7a5d86baf6685d2f68db0a941ab0fa", + "0xd953d8c1ad85c0d1a475d0dfe67b94901b03e71a7ec6f38055940c59ea41d88e", + "0x256ba01bd7e935f92053ab776201f1058feb53d2ee80a038fcaff1c4ef3dfab6", + "0xfd6ea22008e558fb8b11bcb3b1a23bc013541600d0f165bfa5f5755a067d4f0c", + "0x7c40257d81b592f5c96f2074d346b5351b8459be4a35e4e66d2fc32ebeda5e3a", + "0xc39c01667e00c979fb99e8730477eee4865edce058236efc6cbb1d0031d6142d", + "0x300dd664079086ce538ebad71d697a686f5adec2adf41960ee92865d3686ac31", + "0x15445c7e5ae7f749fc06eb179174ead6e019d4e9540d3232c4aa47cd6b0244a5", + "0x3074cae9439536bf200d58218b122e221b2709652a88f244365d4f25bf6e7f15", + "0x12ae8f4970e6e11c2640a1dd5748c28e3e708c1048d2355199506c8a96aab28d", + "0x82624bbfcebb620fc798b726f40ace38a40e5220b003272488cc4f1c1481b3f9", + "0xa8b409e48d7eb1c412b7807b350c74f42e380f4c3a545ff0894d20ee9cc859f5", + "0x5fca68af96cba1ebe748a2958e10ac935212c8ab711dc6c7c12bf0172278b08c", + "0x3519235ef7895f472b1e3bd958b4eaf1467a7b8816bf20ba0800d9424bd3e413", + "0x0fa939f5f171b4bd043580cdd74f072a06d4038293aeb1d89866e4040d551188", + "0x8c9b3754ee18ebf5e3239a5eab49a9f83b03163ea2e8ee36e5b3d5cc24ed93ce", + "0x2f0d9bd84e845e36ae6b1cb8e12f54cd37cd1b6c796c3289730759e68fc12be0", + "0x95fc4bbd2d7307a02e7888c4e35d57041a5984de5ef1b4b41e39c2e054d9ea16", + "0x5ceee2dcda98a07bfc266a24aae9fb511022bf59230256f234a566233078031f", + "0xbc3f0809c469433018c571b4c630e9142b3d6af106e1e3b0eb011489d2e47ea4", + "0x191fa1c39376e4795fb4429ff49471a950cd8c5c79d6bc88cee4b1eeedd2628a", + "0x1e61c660f768d3aa4b9ae515de82433cffa604ad69136eb5ab1f2d0815d1bf76", + "0x240d19056c393dcbf13265dc7cfe4e6516c346f08ee1427f6044576fa3664c27", + "0x85ac7e22ad8eb609306fedeb02aa858478b992276fef39c03ee6fcccadb4c0cb", + "0x8db969a1df60fb941f1575f05cc9f162408581c7afe7d5912c0f2e0b0ce713d9", + "0x12c60b9d237cc8e050af9a38df3509b85b6ae787ab97e7d613af799e0b7ad8ba", + "0x2677651b282f01c02a10a019b48e593e1bf9ccdb693d38ed1d79187d928585ca", + "0x29607907a175127b0f5081fab2d190f99d3101c53aabd36ee7c104e6c30f88cd", + "0x17db8ce2c3c299b5fd43881306a0f72d74fd66a917331852b8169180c2761098", + "0x19dfacd005a3aca6c69186b35933314663face614510f748eeae9692c4539e5d", + "0xdad044548226d931b0d941f9ba6c96ed91d476e51aeccf2cdf5064e701b74fa0", + "0x11cdb3bacb648e1555fea093e4b7e2a2b57214e5fcd1405fab79eab774b71d3b", + "0xddf1d7754c1e10fdbd6c084aa1bc221bdc2c2691e6d90d691d3af294f823e840", + "0x375663ee26a0de2b404ce552a7a2ba4b693b8e9f8dc5a2009afc6a8cf08397d0", + "0x9a6239688ea9224276a3752de1d34492a4de2a55517f309a2c0fa0ea55774828", + "0x9b4e81380a75233e36df8066cf044610b64853a245a6fc019e482ca97d0e9db8", + "0x97c7787c613ed92de118f3014985ebcded3a07995bb68cd4f4b553a815738716", + "0x02262900f998debf819bb465d9c79d4fb124dafcbda85901a109d46625a568c3", + "0x36175cad721be2df0b9315d20e60aadd6cbc2ecfe206863900f2ade5174ab780", + "0xf338cb8e5d68df17f9b0cf524fac6b2267d9375f19895d4d199d236fa32e340a", + "0x5652d0cf34cd2309fb7ec369d11678cf1e59c53495658b31f7c4daf32e53243d", + "0x06431970f1f3a90e66701570ff0d48f473121d60ea50c3e81fb1761941e7f5ca", + "0x9a33019bef8c2a463fbdd931c4faf7c6287fb1dffd68ecf6937b598c5a67a4a2", + "0xd7bb10d0ea6a67dcb9a7ec32ab2e75e100fcbeed2b7416baa39978ef4738c021", + "0xe8af41037867e7bcc44e5447f5d1a065b0897b38286a13e24fb218217b9ffeba", + "0x9f5ec325bd97bf1009b72689b909865c2c462f60811460ca165f2ea24bc2d447", + "0x96ce7f7a2b0fe13d2fd908aa1714129ae69ba470e2746c5dc4f25624d525d632", "0xc47a9bba2c10a9f6d25b7a9aeed97af19c17da32ab8704e8efc6c528e903ee55", "0x200df5f1a4ac8c28c0d7b610c4a7fb436a5528064284deca1e0ac812c7d7a9ff", "0x599b3c29cf54f08323e0c538cd1424456bff5feee6c76a84e83ef5394de89a31", @@ -1014,6 +1015,7 @@ "0x782de690bdc23a23ded9ccc48292f5060a5dfdd39e16d8501c7b9e8e21f12de3", "0x77c96af20df45cecb241a1ac65e60bdec235bd4225a952c936d362f0dc22da36", "0x779d95a2168b4fc42a2fa8847416eeafd5d4cf8059e707c28f1261335ace440c", + "0x7753137c18b520d01b87216c9b02e64309b0bdde0394c6348657afacdd6cd13a", "0x76c45c1201790fde7c1f7ae826a40bf319385cd9651b3da7f8a0357e5866d881", "0x768a8fb5fe41fb970c20446a7fa9530d6c84da8711e59c27013ae341c6c4e4e1", "0x7649d4906d0228120798a47cda0a9beba06d43aeb6d1bb8c45f5be835f8b6d00", @@ -1330,2655 +1332,2659 @@ "values": [ { "value": ["0x616b958904940c789e104Cb39bd2BFF82427CCCB", "1"], - "treeIndex": 838 + "treeIndex": 839 }, { "value": ["0xb1584a8B7A32FE4573FaF3Bc8013Dbb3D9ae16A5", "1"], - "treeIndex": 1101 + "treeIndex": 1103 }, { "value": ["0xE52Ee356E4320DBC467D72A5e7931C1F24Be2912", "1"], - "treeIndex": 1056 + "treeIndex": 1058 }, { "value": ["0x2ec31068d6451510841578981081124a0f75cC64", "1"], - "treeIndex": 699 + "treeIndex": 700 }, { "value": ["0xB5CC80D2423bf3a47163DdBaBe7A49e0473173Fb", "1"], - "treeIndex": 983 + "treeIndex": 984 }, { "value": ["0xCf2b7c6Bc98bfE0D6138A25a3b6162B51F75e05d", "1"], - "treeIndex": 1069 + "treeIndex": 1071 }, { "value": ["0xebfd96B294c7eb1eF31B856958B1A9287D34Fc4C", "1"], - "treeIndex": 758 + "treeIndex": 759 }, { "value": ["0xb91b3dec63690356bdfc2d664cdae19b3d96e5a1", "1"], - "treeIndex": 804 + "treeIndex": 805 }, { "value": ["0x3C474891be0bA5FA5215D33eAc59B8547cd00DFe", "1"], - "treeIndex": 1033 + "treeIndex": 1035 }, { "value": ["0xC8D46eb7881975F9aE15216FeEBa2ff58E55803c", "1"], - "treeIndex": 1179 + "treeIndex": 1181 }, { "value": ["0x50B73d52a00dD10fEef49a074657285515020320", "1"], - "treeIndex": 971 + "treeIndex": 972 }, { "value": ["0xF23e0D6E328a13De1910D78B6a0D4D1aeFaDDda4", "1"], - "treeIndex": 872 + "treeIndex": 873 }, { "value": ["0x02847216Cf4C32bffBE3653377D57CcA70B00aE7", "1"], - "treeIndex": 952 + "treeIndex": 953 }, { "value": ["0x2179A901c2Fa2f3ebA7C9D7aEE63807384c7B36c", "1"], - "treeIndex": 791 + "treeIndex": 792 }, { "value": ["0x73A5e302aB43D6F9a444c30b23286f0751A261F7", "1"], - "treeIndex": 1073 + "treeIndex": 1075 }, { "value": ["0xa9B1a760b56df3C18A93D596F7851D0d7144C866", "1"], - "treeIndex": 1094 + "treeIndex": 1096 }, { "value": ["0x1aeeaa375b4112f537FaFDEA5AA3BAB0e1257557", "1"], - "treeIndex": 683 + "treeIndex": 684 }, { "value": ["0x64b561B2E08a316574E698C8Bc18a3F8645461E6", "1"], - "treeIndex": 788 + "treeIndex": 789 }, { "value": ["0x08dBD4347AC04A8DC6BC24fa6511A03aBDA3E05e", "1"], - "treeIndex": 714 + "treeIndex": 715 }, { "value": ["0x7549ab7a4453aad643046d60347b1143c3c1cc4f", "1"], - "treeIndex": 1019 + "treeIndex": 1021 }, { "value": ["0xC69aE428f6049e78D445F053D2c1df879C59b34C", "1"], - "treeIndex": 1289 + "treeIndex": 1291 }, { "value": ["0xe8C6cEe0408D8fcb1E09dC13149b6D516c32ff70", "1"], - "treeIndex": 949 + "treeIndex": 950 }, { "value": ["0x40cf8142bCb573c3882d5723D8AB3cc6D11ED68D", "1"], - "treeIndex": 869 + "treeIndex": 870 }, { "value": ["0x6Ee7ccecF5664eF9c3645eB103450319bf291945", "1"], - "treeIndex": 1286 + "treeIndex": 1288 }, { "value": ["0x589A9b567c48d3B2FC208727D41BC78c0746cfcB", "1"], - "treeIndex": 783 + "treeIndex": 784 }, { "value": ["0x73A1d547A12a03fB5aE816bf4a8E6D90d4C02D2A", "1"], - "treeIndex": 1023 + "treeIndex": 1025 }, { "value": ["0xbC0C8761f2b093Ba910cEA4E0C9Ac3700d3BdE73", "1"], - "treeIndex": 1313 + "treeIndex": 1315 }, { "value": ["0x1a8c8ac53eaaced7e667d6eea68eaedb6069dc59", "1"], - "treeIndex": 925 + "treeIndex": 926 }, { "value": ["0xC279F761e8eEcC16954c0c1457523f13aED12edD", "1"], - "treeIndex": 920 + "treeIndex": 921 }, { "value": ["0x674A7E635956AE62bFFb8b0ddDbC7fff86FBeFe6", "1"], - "treeIndex": 873 + "treeIndex": 874 }, { "value": ["0xe0854ff3e73df0f4b421004d7313fdaf8fd5ec17", "1"], - "treeIndex": 929 + "treeIndex": 930 }, { "value": ["0x1f8aeAb0219843C65b4A0A7cC42E69E3e3b97d73", "1"], - "treeIndex": 847 + "treeIndex": 848 }, { "value": ["0xeCD40Ff016c263a06Ebf6958854FEcaDb2622818", "1"], - "treeIndex": 980 + "treeIndex": 981 }, { "value": ["0xc85628409af9001f3e70a73516b7a5cd163d8185", "1"], - "treeIndex": 1005 + "treeIndex": 1006 }, { "value": ["0x8E2ef60Ccf0b6478Baf08f52618A63D09404f267", "1"], - "treeIndex": 1278 + "treeIndex": 1280 }, { "value": ["0xA8327cF803d9851E4eAfDC2669000fd2630a35B1", "1"], - "treeIndex": 770 + "treeIndex": 771 }, { "value": ["0x34c3dc8affba68d772a42d794eae085060f35e04", "1"], - "treeIndex": 855 + "treeIndex": 856 }, { "value": ["0xbcafff4b4e5446fb58708cf298185f3bffc03d2c", "1"], - "treeIndex": 1312 + "treeIndex": 1314 }, { "value": ["0xe0aab54593d19336d77f460f055211892d5f8876", "1"], - "treeIndex": 682 + "treeIndex": 683 }, { "value": ["0x94dBd1af9b88f924a51164C80195C38c1d6029be", "1"], - "treeIndex": 773 + "treeIndex": 774 }, { "value": ["0x490e2fbb7879457868673234a8ffdb1d86fbce4f", "1"], - "treeIndex": 870 + "treeIndex": 871 }, { "value": ["0x598eb27e7564fa83dd03c326e38be38c1a47fc82", "1"], - "treeIndex": 1045 + "treeIndex": 1047 }, { "value": ["0x9c2Dd66C10Ddf7a2e543f1936d123CD8Ffc377b7", "1"], - "treeIndex": 1091 + "treeIndex": 1093 }, { "value": ["0xAA19Dd3FC67ccBbba25ef76d1f8E72989E06f921", "1"], - "treeIndex": 665 + "treeIndex": 666 }, { "value": ["0xeEB8505490728278cC16a9087De853b97b6D67d7", "1"], - "treeIndex": 1125 + "treeIndex": 1127 }, { "value": ["0x2C417b8E154A99f962b3B386313Ab23f99Fa6171", "1"], - "treeIndex": 972 + "treeIndex": 973 }, { "value": ["0xc52e7e835d36745d3b0e8cf5610e3b503507701b", "1"], - "treeIndex": 1022 + "treeIndex": 1024 }, { "value": ["0xE8153E9e32ee62764d4512B89BdA0F712A291D8F", "1"], - "treeIndex": 887 + "treeIndex": 888 }, { "value": ["0x99C8140c30cBFDfAf3454d2E8B21375D9f83e239", "1"], - "treeIndex": 950 + "treeIndex": 951 }, { "value": ["0xE7691BA06eB4a302652d3290e4A89A504b3860fC", "1"], - "treeIndex": 1190 + "treeIndex": 1192 }, { "value": ["0xa342C0cFD847E696399B0c391Fe3375D8Fb732F9", "1"], - "treeIndex": 689 + "treeIndex": 690 }, { "value": ["0xB67a420656e338f1854926649ff74BBA6254700E", "1"], - "treeIndex": 1154 + "treeIndex": 1156 }, { "value": ["0x5f791Fd1f4ec3617a5C80f76FE39409A27AeA8C5", "1"], - "treeIndex": 966 + "treeIndex": 967 }, { "value": ["0x607573032fA3C6113Ad2B864b830b76c09440A77", "1"], - "treeIndex": 1044 + "treeIndex": 1046 }, { "value": ["0x0B6d7ED622124A9B9e5ab041A86648630804fe19", "1"], - "treeIndex": 1160 + "treeIndex": 1162 }, { "value": ["0x9452Db8bc3cBc87b8cb27706AECf95eeAc3E75d9", "1"], - "treeIndex": 1183 + "treeIndex": 1185 }, { "value": ["0x2198a010055D46214c66cc6CaeC4f9Be1FDc0B92", "1"], - "treeIndex": 1137 + "treeIndex": 1139 }, { "value": ["0x020828395e3ca320Ff83BcE697166CC8235082DE", "1"], - "treeIndex": 1268 + "treeIndex": 1270 }, { "value": ["0xef109b4398e3ee1e612f0a2fcfafe63c00d3133a", "1"], - "treeIndex": 851 + "treeIndex": 852 }, { "value": ["0x924D809a508326a204e158E8568ff0F57b115401", "1"], - "treeIndex": 1164 + "treeIndex": 1166 }, { "value": ["0xF21bdF3B8A0B0e6FbFDbf087A6c2D712c37847cC", "1"], - "treeIndex": 799 + "treeIndex": 800 }, { "value": ["0x761b3E92A753B162a7C552615700CF76b806e24c", "1"], - "treeIndex": 939 + "treeIndex": 940 }, { "value": ["0x432c53218a11bed08d238cf84ff547ce4fe933ab", "1"], - "treeIndex": 1187 + "treeIndex": 1189 }, { "value": ["0x62c7db69210cb72fe1f8966c87131e9c0abf7ce7", "1"], - "treeIndex": 894 + "treeIndex": 895 }, { "value": ["0x1025524d214860efD49F6CBcE255242Fa42F87Fe", "1"], - "treeIndex": 904 + "treeIndex": 905 }, { "value": ["0x2696f3039f82aF63C0474ac36d4Ab8b7934c9cC3", "1"], - "treeIndex": 1189 + "treeIndex": 1191 }, { "value": ["0xC9071e64D1C484046908cC149173b32A0EeB9506", "1"], - "treeIndex": 691 + "treeIndex": 692 }, { "value": ["0x1cb1ED0E32825f025b9432c94E6ecA50aF596Aa5", "1"], - "treeIndex": 1288 + "treeIndex": 1290 }, { "value": ["0xaCB51D5383371D31B47Ee111f13553e8580B5842", "1"], - "treeIndex": 744 + "treeIndex": 745 }, { "value": ["0x66fe01302438617343cd5c1022547a5c9f57062b", "1"], - "treeIndex": 766 + "treeIndex": 767 }, { "value": ["0x723c5a83b6b2b5ac1a1ddcc75fd2c484d53e0053", "1"], - "treeIndex": 1003 + "treeIndex": 1004 }, { "value": ["0x0D2a7ad3f3114D225521ec9B722014E6C3dAd1e7", "1"], - "treeIndex": 1148 + "treeIndex": 1150 }, { "value": ["0x904AA398a9E759054c2EF3ae3f51cdbDDf692f34", "1"], - "treeIndex": 1155 + "treeIndex": 1157 }, { "value": ["0x5d8a42c1c8d1b78734f5f3877d9fb1c27f31d1be", "1"], - "treeIndex": 965 + "treeIndex": 966 }, { "value": ["0x977A2fd06F589531F8F0e199aBaa3f715e8A221F", "1"], - "treeIndex": 707 + "treeIndex": 708 }, { "value": ["0x0cD07E6B92ae3FE61fA57941d3F461057450c160", "1"], - "treeIndex": 792 + "treeIndex": 793 }, { "value": ["0x349b90a8be1fd92745dc30c7b61b8623280f05a9", "1"], - "treeIndex": 816 + "treeIndex": 817 }, { "value": ["0xaE29EeC679D4c7838FAF3Bf1c30fa8edEB6d1457", "1"], - "treeIndex": 908 + "treeIndex": 909 }, { "value": ["0x97a9552af7eC74ab719C932E40d7194340C83900", "1"], - "treeIndex": 837 + "treeIndex": 838 }, { "value": ["0xB73aB29Ae0623aF31ae027820FFEb5eE5fD56a59", "1"], - "treeIndex": 1300 + "treeIndex": 1302 }, { "value": ["0x8f364fBE6cE4431a5169F78014FfDBD08957421f", "1"], - "treeIndex": 1162 + "treeIndex": 1164 }, { "value": ["0x1B3f0Fd412309baF6F107320Ec1523226ae212bd", "1"], - "treeIndex": 1047 + "treeIndex": 1049 }, { "value": ["0x4888E5Fb2968Ee0F3505C99743Aa554D0c1f9f60", "1"], - "treeIndex": 1026 + "treeIndex": 1028 }, { "value": ["0x61aab1962798ee45aabf6ae864949b83f9e97d72", "1"], - "treeIndex": 1128 + "treeIndex": 1130 }, { "value": ["0x75A6a228F9AB9c01beFABE7F5D87d8d42338b9A8", "1"], - "treeIndex": 1266 + "treeIndex": 1268 }, { "value": ["0x4dfA53e81d6FEd78015d03f30eF6433DAE601555", "1"], - "treeIndex": 991 + "treeIndex": 992 }, { "value": ["0x40a522034b38d5f46069981433e9b673114eb57f", "1"], - "treeIndex": 731 + "treeIndex": 732 }, { "value": ["0x0a40f6C90a04afF08C5dE786C91d53bC518c254C", "1"], - "treeIndex": 755 + "treeIndex": 756 }, { "value": ["0x00C5eb104e91Be86153dd72dD1C9A45b7dB28B71", "1"], - "treeIndex": 1310 + "treeIndex": 1312 }, { "value": ["0xF9c2FBe8A51eDEcb2CcA8B6778a8e3Ccc0593571", "1"], - "treeIndex": 698 + "treeIndex": 699 }, { "value": ["0x63072959a9d9Ef7F572bDE7207f386D8b5Cab26c", "1"], - "treeIndex": 1234 + "treeIndex": 1236 }, { "value": ["0x99e27746e33c9886f6A3A19336E0aB753F962db9", "1"], - "treeIndex": 772 + "treeIndex": 773 }, { "value": ["0xf48CB9dCD55F0eaD3516a60868F6bFb6f1Ce86d3", "1"], - "treeIndex": 1274 + "treeIndex": 1276 }, { "value": ["0x281c1be0eb4d97b34bb1ace5959b53792ffb07e7", "1"], - "treeIndex": 1243 + "treeIndex": 1245 }, { "value": ["0x6ae9ca4bc999e280c0bc3ef30149d222603953bd", "1"], - "treeIndex": 923 + "treeIndex": 924 }, { "value": ["0xb75FD020a1b82bc96fB62adf739653e7e754F7D0", "1"], - "treeIndex": 802 + "treeIndex": 803 }, { "value": ["0xf136A4ccD982036E3fB6e8B63D0E82DC7BB20588", "1"], - "treeIndex": 858 + "treeIndex": 859 }, { "value": ["0xfa2eAAAC27d4f54AAb1680FAe162543c3dcB031c", "1"], - "treeIndex": 1258 + "treeIndex": 1260 }, { "value": ["0x1b984908c807BC22E1732F2F705e23DdA41a7593", "1"], - "treeIndex": 880 + "treeIndex": 881 }, { "value": ["0xcd0a8bb5ddd927140e2a2e3add0b0eba546519e5", "1"], - "treeIndex": 712 + "treeIndex": 713 }, { "value": ["0x10743eea87e91a8a9da3f2d815d92e86ba577a6c", "1"], - "treeIndex": 1216 + "treeIndex": 1218 }, { "value": ["0x8bD036Ec5Fce5341fdFd3A8c1F108a6820B55D92", "1"], - "treeIndex": 1305 + "treeIndex": 1307 }, { "value": ["0x744b4FfeD79071fdcDC03fdFBF61B639BAef4426", "1"], - "treeIndex": 906 + "treeIndex": 907 }, { "value": ["0xd70559c1A3EA4b435B8b592345Fc4676bAd69543", "1"], - "treeIndex": 928 + "treeIndex": 929 }, { "value": ["0xec17faa8f8bf4f43a62f7ba2b89f162973f07d66", "1"], - "treeIndex": 785 + "treeIndex": 786 }, { "value": ["0x240795B0A85A4508D4dEDfF3D12A42368d157BA0", "1"], - "treeIndex": 871 + "treeIndex": 872 }, { "value": ["0x39ED71268D7596D58Ba4969ed1cB8ff43Bfe373C", "1"], - "treeIndex": 687 + "treeIndex": 688 }, { "value": ["0x6dDcBC9544954dd52B28e83Bb3Ec1c02d5787146", "1"], - "treeIndex": 895 + "treeIndex": 896 }, { "value": ["0x160aE01BbE3EA103Ab3d63FCFA6D04A4267bc7eb", "1"], - "treeIndex": 1031 + "treeIndex": 1033 }, { "value": ["0x27fd40568660de78e7e5eda2ff7c55ff689b9c3e", "1"], - "treeIndex": 968 + "treeIndex": 969 }, { "value": ["0xe60f18fe1c9f5f72c4c823bf672c1c65e48c5996", "1"], - "treeIndex": 1051 + "treeIndex": 1053 }, { "value": ["0x7ca6661ae5e93afb6c5b8434dc279bb1553c095a", "1"], - "treeIndex": 1198 + "treeIndex": 1200 }, { "value": ["0x2E437973EEf4a38Bae8De1eCe6FC74B12a65eC7c", "1"], - "treeIndex": 1298 + "treeIndex": 1300 }, { "value": ["0xd87Ba7167329ED47F53b81DC186044D44C2B2e1D", "1"], - "treeIndex": 1254 + "treeIndex": 1256 }, { "value": ["0xF73A1Ef7Fb53Dda5cC475629972F14480a3B2E1d", "1"], - "treeIndex": 1037 + "treeIndex": 1039 }, { "value": ["0xDACfcDcbB44692D8223003a42f2832bad1B00359", "1"], - "treeIndex": 1223 + "treeIndex": 1225 }, { "value": ["0x7f2d7d2d81e89d372dee78f5e0e4e526c8635715", "1"], - "treeIndex": 933 + "treeIndex": 934 }, { "value": ["0xd778651EAf49AFb2dD334CC157eeD34d357b8733", "1"], - "treeIndex": 1102 + "treeIndex": 1104 }, { "value": ["0x770e53470BBE7a03d19471a58Ad98D5Ba0388B01", "1"], - "treeIndex": 722 + "treeIndex": 723 }, { "value": ["0xa9d3c061dcbfacfe8a52b8093c89267614f0d0bf", "1"], - "treeIndex": 1239 + "treeIndex": 1241 }, { "value": ["0xC9770cd0D9431F3250177Da2757f02864A87ff88", "1"], - "treeIndex": 1067 + "treeIndex": 1069 }, { "value": ["0x5a5c3318281c29eef99179f2b613c00b0fa393f5", "1"], - "treeIndex": 867 + "treeIndex": 868 }, { "value": ["0xc025D7026fDDe8ACBe8f2DA4F7F338bbA95BC0FD", "1"], - "treeIndex": 849 + "treeIndex": 850 }, { "value": ["0x57e29fd91a1fab03942ac1389d9b0ca16fb8026C", "1"], - "treeIndex": 774 + "treeIndex": 775 }, { "value": ["0x3DE5Ee31a5116f24dd3CCB9745c187471FBB8cf6", "1"], - "treeIndex": 794 + "treeIndex": 795 }, { "value": ["0x47d761f841a450c275618c87eb5b75db69661d8d", "1"], - "treeIndex": 916 + "treeIndex": 917 }, { "value": ["0xED334EC7B60C15ddbB3B1200864768eB449A1a6E", "1"], - "treeIndex": 672 + "treeIndex": 673 }, { "value": ["0xebfC0724D2D891326492e87500A931895D4758bd", "1"], - "treeIndex": 1066 + "treeIndex": 1068 }, { "value": ["0x20d673a33fb82C4ceaf1F91e76C1720DDA7ca931", "1"], - "treeIndex": 1015 + "treeIndex": 1017 }, { "value": ["0x3fc0f10029b113a187c5817d35de0f3de2a39ebc", "1"], - "treeIndex": 726 + "treeIndex": 727 }, { "value": ["0xFED66c4c0C79d0ACE410c44c619a1cDbFf931e65", "1"], - "treeIndex": 874 + "treeIndex": 875 }, { "value": ["0x18b420Da3D0e4e9c5da1D207561823715C232079", "1"], - "treeIndex": 759 + "treeIndex": 760 }, { "value": ["0x99F11237a5CAeb22C44dB6063f18c9BBF370291E", "1"], - "treeIndex": 1021 + "treeIndex": 1023 }, { "value": ["0x3219f17138320805Cb6C17555BbEbB54F8ADb4BE", "1"], - "treeIndex": 1265 + "treeIndex": 1267 }, { "value": ["0x463d90025d31da9d1fd0eb51669edeb2a68b0b1e", "1"], - "treeIndex": 1085 + "treeIndex": 1087 }, { "value": ["0x27deE0791881deE7c4e2A5F49Fdc6ed4cF7DDF7d", "1"], - "treeIndex": 992 + "treeIndex": 993 }, { "value": ["0x94d09d1c74763807149746e9bd265721e6527946", "1"], - "treeIndex": 1020 + "treeIndex": 1022 }, { "value": ["0xA3875cF5d001458C1E2F516c98f2994981ED69Fa", "1"], - "treeIndex": 932 + "treeIndex": 933 }, { "value": ["0xb147eacaf85d77f68e30be6090e67851d084e3c7", "1"], - "treeIndex": 1096 + "treeIndex": 1098 }, { "value": ["0x2FAf55a544c5F73666438BC185aeCC9D685E6E3C", "1"], - "treeIndex": 1084 + "treeIndex": 1086 }, { "value": ["0x00A9E0A913b40975b3b30F7e196a9d159E1a1e49", "1"], - "treeIndex": 805 + "treeIndex": 806 }, { "value": ["0x486a2acA683807CDeB4AA73d4Cf94eADC7A9ac13", "1"], - "treeIndex": 1210 + "treeIndex": 1212 }, { "value": ["0xF53F564D7c1ac2875D9bA48aD643C249EcaB3877", "1"], - "treeIndex": 1200 + "treeIndex": 1202 }, { "value": ["0x8dF1379C5661071928576E8136f055DA9610619f", "1"], - "treeIndex": 852 + "treeIndex": 853 }, { "value": ["0x266a78d3c6ee02ac304fef8171d46d145d939b48", "1"], - "treeIndex": 899 + "treeIndex": 900 }, { "value": ["0x23f79785487112f9323673d1e6127340a4b3ea20", "1"], - "treeIndex": 1205 + "treeIndex": 1207 }, { "value": ["0xa52d736277e174973626f92a65e12ca193aaf4fb", "1"], - "treeIndex": 1068 + "treeIndex": 1070 }, { "value": ["0xe080aaffbfeca6108c1cb6e5f74dfe399843fb09", "1"], - "treeIndex": 1064 + "treeIndex": 1066 }, { "value": ["0xe614436af4dce18bb711a46a1eb88c9bd6752f90", "1"], - "treeIndex": 745 + "treeIndex": 746 }, { "value": ["0x74A4Db35E431a6f8371C0Fbabe1dD029cB762Bc8", "1"], - "treeIndex": 1241 + "treeIndex": 1243 }, { "value": ["0x665d7f0b9521141b2d4F7929dd83C14123eF5050", "1"], - "treeIndex": 1192 + "treeIndex": 1194 }, { "value": ["0x53cD242585F72EDD4C92ED3dC4A944AAdACCE413", "1"], - "treeIndex": 709 + "treeIndex": 710 }, { "value": ["0x6aD23fA82Bc63b680F06823E36605Dfe9D828FA6", "1"], - "treeIndex": 1059 + "treeIndex": 1061 }, { "value": ["0xB413f9647FcDd43bF272aDa2512262D217502396", "1"], - "treeIndex": 1117 + "treeIndex": 1119 }, { "value": ["0xe538fa7f300ac3d54f272d26aea43412fd15d013", "1"], - "treeIndex": 814 + "treeIndex": 815 }, { "value": ["0x84df46fbcba64a85941730f714cb5d6f55872b78", "1"], - "treeIndex": 1161 + "treeIndex": 1163 }, { "value": ["0xD62B71294BC545606c09dA4D070785E9e135269B", "1"], - "treeIndex": 918 + "treeIndex": 919 }, { "value": ["0x1E1667F16F725d7fCBFFa707e7E576fc64249902", "1"], - "treeIndex": 1121 + "treeIndex": 1123 }, { "value": ["0xDa6d0eB80629053cb3dc655925f6d73adA09D3c5", "1"], - "treeIndex": 725 + "treeIndex": 726 }, { "value": ["0x1a8eb494c2ceb2241c1572e663ff23211dedf8fc", "1"], - "treeIndex": 684 + "treeIndex": 685 }, { "value": ["0x149569a5e5eff2e7a39ef384bc62fb932cc053fd", "1"], - "treeIndex": 977 + "treeIndex": 978 }, { "value": ["0xb4eE750690b58204Bfe53bc2A6E0f77EC36DEC79", "1"], - "treeIndex": 717 + "treeIndex": 718 }, { "value": ["0x82c6d9ca5c2dca7bd454bc9b45d88212de5037cd", "1"], - "treeIndex": 1247 + "treeIndex": 1249 }, { "value": ["0x130cb2e9645c583e806b5dd2deb061b7f1dc38a3", "1"], - "treeIndex": 671 + "treeIndex": 672 }, { "value": ["0x74d6afbe4126ad32b57924cc030adae9596dab91", "1"], - "treeIndex": 754 + "treeIndex": 755 }, { "value": ["0x53E5c026413AED0a1a82F0cEBDe54De3288cFDE9", "1"], - "treeIndex": 1120 + "treeIndex": 1122 }, { "value": ["0x61af296ef49ac27c25521dd793156837cdfaa472", "1"], - "treeIndex": 756 + "treeIndex": 757 }, { "value": ["0x912123352931671e709Ba3DC036c17251Aca7d26", "1"], - "treeIndex": 924 + "treeIndex": 925 }, { "value": ["0xd2C41cC04EB699bE26546FcbB74815bd68283A6d", "1"], - "treeIndex": 1311 + "treeIndex": 1313 }, { "value": ["0x3bc2bCde4F0c6875Ae591cf6e8365688E90134a0", "1"], - "treeIndex": 806 + "treeIndex": 807 }, { "value": ["0x031c3f0a76308dd054acd484b790c2383ee6d1cc", "1"], - "treeIndex": 1055 + "treeIndex": 1057 }, { "value": ["0x3a3e6bb88266bd06d935811ba1ae3520eafd0f6a", "1"], - "treeIndex": 685 + "treeIndex": 686 }, { "value": ["0x3913ecc1c8e2a97a34f51efbccaab5848081cdcd", "1"], - "treeIndex": 828 + "treeIndex": 829 }, { "value": ["0xDa186dB644Da3446BCF81F9c8e28108249B767BA", "1"], - "treeIndex": 1232 + "treeIndex": 1234 }, { "value": ["0x9B58A215A2F99Cb89B707764cC38Ae95AE6eC01c", "1"], - "treeIndex": 775 + "treeIndex": 776 }, { "value": ["0x63a27217100a2c1c9df370Dbf65E97fE2795344B", "1"], - "treeIndex": 981 + "treeIndex": 982 }, { "value": ["0x407ebda1e27fe0b68636266ef2edbdb45e2ee484", "1"], - "treeIndex": 936 + "treeIndex": 937 }, { "value": ["0xC77c6bf8AB14BB3C391b39AC505e2151cD4b489C", "1"], - "treeIndex": 764 + "treeIndex": 765 }, { "value": ["0xc901a6ee755047F254Cfb2cb0779dEd5395E348d", "1"], - "treeIndex": 842 + "treeIndex": 843 }, { "value": ["0xa4779581661e27A59Fe6444ed4473e72c5dB8f0F", "1"], - "treeIndex": 1007 + "treeIndex": 1008 }, { "value": ["0xC0f8C3EC1b30933A7b7e7dF4Dfa49324b9598eA9", "1"], - "treeIndex": 853 + "treeIndex": 854 }, { "value": ["0x2F01FF5975700cecF113D9bAFCa3f2409BFf4d24", "1"], - "treeIndex": 769 + "treeIndex": 770 }, { "value": ["0x995995c6FE5559ec36292F2e730618dF19f8c5A9", "1"], - "treeIndex": 967 + "treeIndex": 968 }, { "value": ["0xBCa32127AccBeb924490780B82080c54ee15AaC0", "1"], - "treeIndex": 1048 + "treeIndex": 1050 }, { "value": ["0xf605eEE0Ec810eA5084f9E6B6E3994F1293F2540", "1"], - "treeIndex": 811 + "treeIndex": 812 }, { "value": ["0x014682decc5226cdaa86b9108906fbf56f533d37", "1"], - "treeIndex": 1002 + "treeIndex": 1003 }, { "value": ["0x1BfEf10693Dd39A78afD9C90aD9b16A779C4E538", "1"], - "treeIndex": 704 + "treeIndex": 705 }, { "value": ["0xcfb9a538a87c107f579fbbdca184c4e7831fd506", "1"], - "treeIndex": 827 + "treeIndex": 828 }, { "value": ["0xe81b6cBB6ED71C731e16E132b92F117C96F072D2", "1"], - "treeIndex": 1165 + "treeIndex": 1167 }, { "value": ["0x52901c7a466D769Db350a3714d9A8CE1CbBf27Cb", "1"], - "treeIndex": 891 + "treeIndex": 892 }, { "value": ["0x198c34Ab14bBc8312E5A35f6A3f95B5687370B7a", "1"], - "treeIndex": 1012 + "treeIndex": 1013 }, { "value": ["0x281e3d092ece1667141dc6f4f45ce0f72fc81b3c", "1"], - "treeIndex": 1156 + "treeIndex": 1158 }, { "value": ["0x7138483eb4EF5952D53A258F18fd88a6abAd775d", "1"], - "treeIndex": 1283 + "treeIndex": 1285 }, { "value": ["0x1a67dce1adF3f4c6a13c7d75447b5D04840E0Fa5", "1"], - "treeIndex": 985 + "treeIndex": 986 }, { "value": ["0x24Bea75f0423eDfc9dc780804b9c9A2FB787c85c", "1"], - "treeIndex": 1087 + "treeIndex": 1089 }, { "value": ["0x8821612d27a1C6A958a9D6b131BFa8Dd1CA4fc34", "1"], - "treeIndex": 1106 + "treeIndex": 1108 }, { "value": ["0x1fc9efDE651191f61711127ae1f427656105304A", "1"], - "treeIndex": 1097 + "treeIndex": 1099 }, { "value": ["0xc196829c7Ce846b82b40eAa8b5bb31e8D6Dde224", "1"], - "treeIndex": 1144 + "treeIndex": 1146 }, { "value": ["0xb37f40e20E8Db2818ecee0ecDbD48Ef6c88794F0", "1"], - "treeIndex": 988 + "treeIndex": 989 }, { "value": ["0x339a4bF2969ff548AfBdeFd8Fb21aADE69bc97e0", "1"], - "treeIndex": 1175 + "treeIndex": 1177 }, { "value": ["0x69AbA62e098D8215d1e662b57eEC4CC6059DEA73", "1"], - "treeIndex": 1099 + "treeIndex": 1101 }, { "value": ["0x111bB5a704305Da4D3E980d6211badb1Fc064012", "1"], - "treeIndex": 1076 + "treeIndex": 1078 }, { "value": ["0xBAcB35A7f1E19b3E4A40d6b333900839a9447594", "1"], - "treeIndex": 1060 + "treeIndex": 1062 }, { "value": ["0x66d67e220c61df5836da18d55f4f595ac7514792", "1"], - "treeIndex": 762 + "treeIndex": 763 }, { "value": ["0x08C08EDC97fCA5d1BAdeDE6e2776A6Bba58f427f", "1"], - "treeIndex": 974 + "treeIndex": 975 }, { "value": ["0xF82b8318fbE5048ecc4a6F3FA601ce0079671933", "1"], - "treeIndex": 1303 + "treeIndex": 1305 }, { "value": ["0xb911960B52FaEf62e9b10dE3B8efFb8e3C5E5D53", "1"], - "treeIndex": 1260 + "treeIndex": 1262 }, { "value": ["0x341e1B44c08AD9309Ea3F582940A15961357Dc80", "1"], - "treeIndex": 1095 + "treeIndex": 1097 }, { "value": ["0x5730dad2a5f35683ce208ba923631d3a99ac9720", "1"], - "treeIndex": 845 + "treeIndex": 846 }, { "value": ["0x0baB49313f18F2869Bf89b89C7Dd536efeBFd85B", "1"], - "treeIndex": 877 + "treeIndex": 878 }, { "value": ["0x9128c2390659a1b8248f1cb7880ea4b80b197bdb", "1"], - "treeIndex": 875 + "treeIndex": 876 }, { "value": ["0xd848670974109D0122fd2eC492C3783F2ABc157D", "1"], - "treeIndex": 1227 + "treeIndex": 1229 }, { "value": ["0x517A4551c6B2E906DEdC2AD9Da11B9888FDAe4ba", "1"], - "treeIndex": 1181 + "treeIndex": 1183 }, { "value": ["0x65D8EbAA463bA8774C3a39ed4E87218A7532EB04", "1"], - "treeIndex": 787 + "treeIndex": 788 }, { "value": ["0x7494Acaf0a5957281Bbf6D6ae4F97e3FAfce8F92", "1"], - "treeIndex": 1145 + "treeIndex": 1147 }, { "value": ["0x882A4163961D707EfDD75B54dACA7Bf93288C001", "1"], - "treeIndex": 1304 + "treeIndex": 1306 }, { "value": ["0xBe701BE8123D9AAd7206c04D6408985DA1271223", "1"], - "treeIndex": 1296 + "treeIndex": 1298 }, { "value": ["0x20f86bCC7158d26daBFbCB4D2aD31623CDcB053c", "1"], - "treeIndex": 1206 + "treeIndex": 1208 }, { "value": ["0x264DaB3DFC4e6d425AD1DE5085eB807DdBa51Adb", "1"], - "treeIndex": 1259 + "treeIndex": 1261 }, { "value": ["0xa6D4FA2682B60b8f2eE12937ec70ac26e722D3f3", "1"], - "treeIndex": 1036 + "treeIndex": 1038 }, { "value": ["0x0fFE1E2FE7BE75Ce9312AD20538eE2D92720d00D", "1"], - "treeIndex": 993 + "treeIndex": 994 }, { "value": ["0x5d20384C0BfE0BF2081aC51733871f7bF9123E34", "1"], - "treeIndex": 1159 + "treeIndex": 1161 }, { "value": ["0x485f09Ef9fB22a1CAF961Fc5405BD5B2e28ef6A3", "1"], - "treeIndex": 761 + "treeIndex": 762 }, { "value": ["0x7D0777892bb92E40DbDA17742ce0ddd5c1f657c0", "1"], - "treeIndex": 834 + "treeIndex": 835 }, { "value": ["0xC29aeBfebF30cBA49EDaf6CC16611b1fEfB95Cb3", "1"], - "treeIndex": 1114 + "treeIndex": 1116 }, { "value": ["0xEcb9EaC7D2B1ff58D2629467CabEcc8A81EE2531", "1"], - "treeIndex": 1110 + "treeIndex": 1112 }, { "value": ["0x14bE0fcB885A9aA367832406EA6759Db5223502F", "1"], - "treeIndex": 742 + "treeIndex": 743 }, { "value": ["0xc7eD41223d0468D814eFC8424F85D706f9d19d2D", "1"], - "treeIndex": 1081 + "treeIndex": 1083 }, { "value": ["0xD685Da88Eab2FD3055ac03CD1984D8307Bb997cF", "1"], - "treeIndex": 1308 + "treeIndex": 1310 }, { "value": ["0xFde0Cea93881bC1cE9F0e4f44b79C60b76095316", "1"], - "treeIndex": 884 + "treeIndex": 885 }, { "value": ["0xf6144e1FAFfcccF7060EbA3856394eB2FcA84adc", "1"], - "treeIndex": 1221 + "treeIndex": 1223 }, { "value": ["0x870928863E80eB02e3060dffe05533dEa0a5d8F9", "1"], - "treeIndex": 964 + "treeIndex": 965 }, { "value": ["0xc7170C41CeaEdE926801ae60160777954b5c6836", "1"], - "treeIndex": 900 + "treeIndex": 901 }, { "value": ["0x8921F59Bab0052dEaeE29CCD4D9Ab808ebe499aE", "1"], - "treeIndex": 680 + "treeIndex": 681 }, { "value": ["0x7F2a4c5cce3a5ca00aEa9E81b8e156Ae08Fe3118", "1"], - "treeIndex": 1013 + "treeIndex": 1015 }, { "value": ["0xAc43F908718C7bf08eca3490245dcae0aE3d34e8", "1"], - "treeIndex": 1306 + "treeIndex": 1308 }, { "value": ["0x11F83D90aF5b5E3a0740731D7926Ad27803fe220", "1"], - "treeIndex": 841 + "treeIndex": 842 }, { "value": ["0x0C6D7f0beF79fED15a949501b2e6CbE6E9B515A8", "1"], - "treeIndex": 776 + "treeIndex": 777 }, { "value": ["0x587080976e19355a4a57fe306cfe7688573ba8ec", "1"], - "treeIndex": 861 + "treeIndex": 862 }, { "value": ["0x7626a3cbc934fcf8fc957788c6482e3683868254", "1"], - "treeIndex": 1231 + "treeIndex": 1233 }, { "value": ["0xC47AC2f3D5F0bC244e48B7626B1c235f4FDBfE06", "1"], - "treeIndex": 1171 + "treeIndex": 1173 }, { "value": ["0xf9BA8D882B49d7c4bF67FDFC2D8564713E85945b", "1"], - "treeIndex": 1126 + "treeIndex": 1128 }, { "value": ["0xE3976729E8a80E9BEBf3c90ac708A203F4cAD84d", "1"], - "treeIndex": 997 + "treeIndex": 998 }, { "value": ["0x4e9f38742351f19b41603963231f015c2501a5a3", "1"], - "treeIndex": 1046 + "treeIndex": 1048 }, { "value": ["0x02A8c10f6C39A63Cae8c0e984BAaC0427914481A", "1"], - "treeIndex": 1142 + "treeIndex": 1144 }, { "value": ["0xB53D86CAE1dE6c8CDaDD4A59559317C4c98657E0", "1"], - "treeIndex": 1140 + "treeIndex": 1142 }, { "value": ["0x2A184B7aECaBD4d92a26CF4d989558559661c306", "1"], - "treeIndex": 897 + "treeIndex": 898 }, { "value": ["0x73254cC8f2fe472ef81B53A92dEd4293F63D5AB4", "1"], - "treeIndex": 719 + "treeIndex": 720 }, { "value": ["0x447024B90D9cdcd3A33C05b4512490a823e85ebf", "1"], - "treeIndex": 1107 + "treeIndex": 1109 }, { "value": ["0x5AE1980Fffd8444be97e5Aa4b46b49D11be2b7B6", "1"], - "treeIndex": 1034 + "treeIndex": 1036 }, { "value": ["0xD3366317a4Fe27bA0100B48659e05969811bD2dB", "1"], - "treeIndex": 882 + "treeIndex": 883 }, { "value": ["0x7F33aea3786D88AEE80701AF7e1B7d6F074d3C60", "1"], - "treeIndex": 1209 + "treeIndex": 1211 }, { "value": ["0x7989cf8798581BA46d4D0572405A0Adb1a2d0999", "1"], - "treeIndex": 748 + "treeIndex": 749 }, { "value": ["0x9ea4b029404D4B957984b568Bbc07b4a3b98F2b3", "1"], - "treeIndex": 1196 + "treeIndex": 1198 }, { "value": ["0xCEe7540737e33763DC9F929714C48d60c08348b7", "1"], - "treeIndex": 909 + "treeIndex": 910 }, { "value": ["0xe308023816491913f15e3502C8073098687a2417", "1"], - "treeIndex": 915 + "treeIndex": 916 }, { "value": ["0x25bB6CA37385DF923Dc1998D9E944ddD9e259C98", "1"], - "treeIndex": 713 + "treeIndex": 714 }, { "value": ["0x9d4928eB2580077017484B673ceb2c5E9fCB4549", "1"], - "treeIndex": 969 + "treeIndex": 970 }, { "value": ["0x892bb2CDA62B23a728102139aA27Dd9f09D99197", "1"], - "treeIndex": 1041 + "treeIndex": 1043 }, { "value": ["0x7425fdd976742c1D64F897Fb10c9bA5711E4839d", "1"], - "treeIndex": 812 + "treeIndex": 813 }, { "value": ["0x3d25156E75208710117D37Cd448Fb5bff3614E62", "1"], - "treeIndex": 979 + "treeIndex": 980 }, { "value": ["0x991f45376EC0c30679f31deedfAB965be61eE0aF", "1"], - "treeIndex": 1240 + "treeIndex": 1242 }, { "value": ["0x248ae56b53B86d4F1C0F3ecEebb0818E886b9e4d", "1"], - "treeIndex": 1226 + "treeIndex": 1228 }, { "value": ["0x5CA4E238464C839142DE88434544af58a63c3FE2", "1"], - "treeIndex": 1163 + "treeIndex": 1165 }, { "value": ["0x87b5602E9f7e932Fa1F3c2982e9eC1681d6675cA", "1"], - "treeIndex": 1188 + "treeIndex": 1190 }, { "value": ["0x1464bBf08282A9FE94EE0136178FAA04F283ACB8", "1"], - "treeIndex": 737 + "treeIndex": 738 }, { "value": ["0xBdc5434D53E17b596cb7FaDB1f4edA76f2a0ba0C", "1"], - "treeIndex": 688 + "treeIndex": 689 }, { "value": ["0xfaF013dC4e217241Fc0719eCE977EAD89A8AFDC2", "1"], - "treeIndex": 940 + "treeIndex": 941 }, { "value": ["0xD77D0aA1f1Ab7042eacB6b1e3d48f7607fDdc446", "1"], - "treeIndex": 879 + "treeIndex": 880 }, { "value": ["0x1742C82B2C7c060E5cACd2389F31936C8ab4faED", "1"], - "treeIndex": 1322 + "treeIndex": 1324 }, { "value": ["0x5B317bE1872A5FA11b1ebBC07065516E4FAaef03", "1"], - "treeIndex": 1251 + "treeIndex": 1253 }, { "value": ["0x4Bc3DcB08e12eF4E9c38A9c01aCe15F641b05886", "1"], - "treeIndex": 692 + "treeIndex": 693 }, { "value": ["0xe41e23bBc314B153908cE6b09824d3e3eFE9A2e3", "1"], - "treeIndex": 1038 + "treeIndex": 1040 }, { "value": ["0xA5A8cc6642d3075262196467C9CB676e9f3683C6", "1"], - "treeIndex": 674 + "treeIndex": 675 }, { "value": ["0xe2f6D1ceE169B8B90494e551DDaAf8A3d0C4Ccb6", "1"], - "treeIndex": 1207 + "treeIndex": 1209 }, { "value": ["0xCBC3A31a951F4c91D3B5792c2Adc57641cFf633c", "1"], - "treeIndex": 836 + "treeIndex": 837 }, { "value": ["0x072F145971fa65217ABF340A201b795Bf99Fa665", "1"], - "treeIndex": 856 + "treeIndex": 857 }, { "value": ["0x6F0BF88779e02959Fc80d1e73A80DC832EEC4688", "1"], - "treeIndex": 958 + "treeIndex": 959 }, { "value": ["0x48985340229bfCFab86b0C5De1F5Eed91cc551A1", "1"], - "treeIndex": 1124 + "treeIndex": 1126 }, { "value": ["0xc64550ef5f1781e8c497a548e53b44589603E78D", "1"], - "treeIndex": 1122 + "treeIndex": 1124 }, { "value": ["0xd9fd327df84bb551e3f359f23c405e7f79cc4c34", "1"], - "treeIndex": 810 + "treeIndex": 811 }, { "value": ["0x8e1ec2d3b0c006d234190a212704b6e85d623efa", "1"], - "treeIndex": 790 + "treeIndex": 791 }, { "value": ["0x0183349f7d059D53d69033652EBe921d8B05D7E1", "1"], - "treeIndex": 747 + "treeIndex": 748 }, { "value": ["0x7D73bc3fB04F20d58DE526105684BD9D7D1A0BDf", "1"], - "treeIndex": 1272 + "treeIndex": 1274 }, { "value": ["0xCf1ed754F6853b0840b8575c174dbdCd51909D0a", "1"], - "treeIndex": 823 + "treeIndex": 824 }, { "value": ["0x4a0834a733638fef294ea2bb241d3888cf715cfc", "1"], - "treeIndex": 1324 + "treeIndex": 1326 }, { "value": ["0xEA2d1fF3e5F524B080cc609226b019F091113554", "1"], - "treeIndex": 865 + "treeIndex": 866 }, { "value": ["0x86Baf5f5Ee5696BCc71aBb93751d6e3D46Ea47f4", "1"], - "treeIndex": 888 + "treeIndex": 889 }, { "value": ["0x1E56aAaD2661540bEB5dcc92b4BeDaD8975D80C0", "1"], - "treeIndex": 750 + "treeIndex": 751 }, { "value": ["0xf5de2dde6a9694ba171d3760b448e89e7050dfa9", "1"], - "treeIndex": 1203 + "treeIndex": 1205 }, { "value": ["0x86727defBEd7bCFb2F93bAb3d8aD23624e2B0F22", "1"], - "treeIndex": 1116 + "treeIndex": 1118 }, { "value": ["0xD990618a8bB5a80AB37247f8615e393FA23648f4", "1"], - "treeIndex": 1152 + "treeIndex": 1154 }, { "value": ["0x3c777f983158e6ad5ef7a937508c08f8a712c251", "1"], - "treeIndex": 1153 + "treeIndex": 1155 }, { "value": ["0xb07c3607eA7e0bc8f591331D19Cf08804c7b82Df", "1"], - "treeIndex": 1307 + "treeIndex": 1309 }, { "value": ["0x19b58151c2a9edb6164ddf69fa96f9b106f47df4", "1"], - "treeIndex": 716 + "treeIndex": 717 }, { "value": ["0x1672Bc8d5E342048A4B3cd2a5038069414Fa95b3", "1"], - "treeIndex": 986 + "treeIndex": 987 }, { "value": ["0xB6acA8CAa4147ad88FCD05f5F15A2083e192C4ab", "1"], - "treeIndex": 1197 + "treeIndex": 1199 }, { "value": ["0x3ba9ba5b405ccfb85c7c16e929a4f81aec65f318", "1"], - "treeIndex": 1230 + "treeIndex": 1232 }, { "value": ["0xaF28D9A215884b5E0F7c68709877FC205E335BD9", "1"], - "treeIndex": 987 + "treeIndex": 988 }, { "value": ["0x3f71EaccdFdFbEa79c3f357dfb0Db53aaAE3f712", "1"], - "treeIndex": 771 + "treeIndex": 772 }, { "value": ["0x00700406274a017375C465D27F24CCBD51eA3A53", "1"], - "treeIndex": 1218 + "treeIndex": 1220 }, { "value": ["0xfDE0F525D7d029E646F011b87FD0a105f80fD347", "1"], - "treeIndex": 679 + "treeIndex": 680 }, { "value": ["0xA6B6f3f5A880F09aC536af2DFF08D93534ff7930", "1"], - "treeIndex": 749 + "treeIndex": 750 }, { "value": ["0x801D678688C0B5A3eCAa4b06bE2b56ff57E309A6", "1"], - "treeIndex": 1208 + "treeIndex": 1210 }, { "value": ["0x85132deace772ec40b2326da69cce771853cc2f8", "1"], - "treeIndex": 720 + "treeIndex": 721 }, { "value": ["0xd7D26c106285ACA2419F4f9CCFdafa3C765C1c2d", "1"], - "treeIndex": 1264 + "treeIndex": 1266 }, { "value": ["0xe90286618AB09067354139f478eFc0FC874da50e", "1"], - "treeIndex": 886 + "treeIndex": 887 }, { "value": ["0x9D5dC516331Dee44d16a0EDcE1A8206937163D2B", "1"], - "treeIndex": 850 + "treeIndex": 851 }, { "value": ["0x478eDd1F3bd4559B407B8528e1D2166e9627A891", "1"], - "treeIndex": 1166 + "treeIndex": 1168 }, { "value": ["0x74fa7F91Ea3B290Ca00B049F0D048a816B3443cC", "1"], - "treeIndex": 1111 + "treeIndex": 1113 }, { "value": ["0x9505e4f134548dc577edab5aab870ebb8fd2ab26", "1"], - "treeIndex": 728 + "treeIndex": 729 }, { "value": ["0x3FE46d8b26d8084ABCc723FA12b91C13aef21190", "1"], - "treeIndex": 1277 + "treeIndex": 1279 }, { "value": ["0xd4c210871fd8912bdc080b47ef644849f6163d11", "1"], - "treeIndex": 1098 + "treeIndex": 1100 }, { "value": ["0x05407A60F9D4556c1c52422A77d6c6Bd8A9c6AcB", "1"], - "treeIndex": 946 + "treeIndex": 947 }, { "value": ["0x0a4896a6abb9e603fda98ac35e3bc34297a2f964", "1"], - "treeIndex": 863 + "treeIndex": 864 }, { "value": ["0xb59A1f04AfF6fCA59729Ed8f4f534591382c43eb", "1"], - "treeIndex": 1158 + "treeIndex": 1160 }, { "value": ["0xbAa3295A3351DE503c13E6d6cF00396eBE1DD5d9", "1"], - "treeIndex": 1049 + "treeIndex": 1051 }, { "value": ["0xb180a132d8c64c88501f2946ae93b311052e067e", "1"], - "treeIndex": 1185 + "treeIndex": 1187 }, { "value": ["0x43ef7d83943448f3c2dd9cc325b0a949f19a3e4b", "1"], - "treeIndex": 686 + "treeIndex": 687 }, { "value": ["0x1E922DB639CA197014cbd9a815F3D706Bf962eAb", "1"], - "treeIndex": 1147 + "treeIndex": 1149 }, { "value": ["0x7412b20a5B15948954a3de1CaEdD5806AAf9aDA7", "1"], - "treeIndex": 1233 + "treeIndex": 1235 }, { "value": ["0x4d844c3B736916808E1Eff456e4949E376963a28", "1"], - "treeIndex": 995 + "treeIndex": 996 }, { "value": ["0x133dCbdE39418Cff99d10dC3a1515878aBfe4A44", "1"], - "treeIndex": 752 + "treeIndex": 753 }, { "value": ["0x593a10fc2bc453fee3adbbe989e8be43967afde4", "1"], - "treeIndex": 1043 + "treeIndex": 1045 }, { "value": ["0x799179D0Ed9b2715BdF377Ca67Dc11706a23f03a", "1"], - "treeIndex": 1315 + "treeIndex": 1317 }, { "value": ["0xAE3f01c727a685bB7c03722fDA4a3ef306B1C0b4", "1"], - "treeIndex": 1252 + "treeIndex": 1254 }, { "value": ["0x6Eee3b6b9DB311D9F1435Ae28A507a940398b75C", "1"], - "treeIndex": 1204 + "treeIndex": 1206 }, { "value": ["0x24D811AC39b0fD7037e1D501e5f0605CE37B2bb1", "1"], - "treeIndex": 944 + "treeIndex": 945 }, { "value": ["0xaCDEcf79986Db9d509e4F3FF6D55EBa2f4acBcb0", "1"], - "treeIndex": 1074 + "treeIndex": 1076 }, { "value": ["0xfB6E3BadA09A320676cE37056A6FD1390a19Fc9c", "1"], - "treeIndex": 1032 + "treeIndex": 1034 }, { "value": ["0xb1e745e9a67be8ceee1864558e7608021a5ba4e0", "1"], - "treeIndex": 913 + "treeIndex": 914 }, { "value": ["0x3e5e34DEAFC39FF2D08a523C3fCC47065dc784CB", "1"], - "treeIndex": 1214 + "treeIndex": 1216 }, { "value": ["0xd861bC853dDFFCF938cA385caeae4131b16B103a", "1"], - "treeIndex": 938 + "treeIndex": 939 }, { "value": ["0x508D0ed6273F83C1D442C89C8935C4c11Ad4f6d9", "1"], - "treeIndex": 667 + "treeIndex": 668 }, { "value": ["0x577781dDaeC287623273c38f459840b279cF323e", "1"], - "treeIndex": 860 + "treeIndex": 861 }, { "value": ["0x0eF696B2Da7e7c6A3113681ce57344B66BBCF559", "1"], - "treeIndex": 1229 + "treeIndex": 1231 }, { "value": ["0xec2b42a2b501e9b8f639d2b4e17f0e5166035155", "1"], - "treeIndex": 721 + "treeIndex": 722 }, { "value": ["0x408983424Bf7B5bE6e12bb731a26F16C8Bd63eBa", "1"], - "treeIndex": 973 + "treeIndex": 974 }, { "value": ["0x583C21200cb1306280CfD38e56786083D956Cb3D", "1"], - "treeIndex": 854 + "treeIndex": 855 }, { "value": ["0x97675d5d3ffd22401b78ba4c0a34faadd2039250", "1"], - "treeIndex": 911 + "treeIndex": 912 }, { "value": ["0x91c3e2E1A43638aD626C4971F343c457E643c9c3", "1"], - "treeIndex": 1063 + "treeIndex": 1065 }, { "value": ["0xFFdA83BFD8b8c1EdB0A8A89B255cfe87D01a1d92", "1"], - "treeIndex": 1245 + "treeIndex": 1247 }, { "value": ["0x8b92183A022D4dF72B2834e33c4FB7bd0462CD3E", "1"], - "treeIndex": 818 + "treeIndex": 819 }, { "value": ["0xfa2336eCA18b9BC384144Ad7f29E2137EE0564D1", "1"], - "treeIndex": 740 + "treeIndex": 741 }, { "value": ["0xCB53a818042Db647cb01672751B0E4efCa29cF55", "1"], - "treeIndex": 1284 + "treeIndex": 1286 }, { "value": ["0x054becf10c79afa4e60f75b187837be9fb83867d", "1"], - "treeIndex": 795 + "treeIndex": 796 }, { "value": ["0xf8926A177273202755F9Fa930c96285e612375AC", "1"], - "treeIndex": 994 + "treeIndex": 995 }, { "value": ["0xAbD8Cee5a93265fc7D1F9e45f0169294d01B8802", "1"], - "treeIndex": 930 + "treeIndex": 931 }, { "value": ["0x481b1E34fc679b94E78571dE1369D8EBE4bacDBF", "1"], - "treeIndex": 919 + "treeIndex": 920 }, { "value": ["0x71adD64adBB965Bafd01437295968502eB61145e", "1"], - "treeIndex": 1123 + "treeIndex": 1125 }, { "value": ["0x3D1e10eeC9256f832a46F3f8AdaC60c7a80828B6", "1"], - "treeIndex": 956 + "treeIndex": 957 }, { "value": ["0xad9518b0360f417cd60c172ffa5d7b9a1d6d1ebc", "1"], - "treeIndex": 701 + "treeIndex": 702 }, { "value": ["0x64be8D7B2B598cd2Bb09275bC943C3f663e23fb7", "1"], - "treeIndex": 1030 + "treeIndex": 1032 }, { "value": ["0x8FC58267E4b4a4f93e3BE17934db63337676b01d", "1"], - "treeIndex": 798 + "treeIndex": 799 }, { "value": ["0xEc8EDfAe340278B79a9a7Ba58C8f97b36f3739Ef", "1"], - "treeIndex": 782 + "treeIndex": 783 }, { "value": ["0xb6650c5675fdef1498d3965973cd9fe598baf843", "1"], - "treeIndex": 1082 + "treeIndex": 1084 }, { "value": ["0x399b6775b25F98fCb0295a42DE85107514E36697", "1"], - "treeIndex": 898 + "treeIndex": 899 }, { "value": ["0x955d73eD63db714829CAFe740123D035854f8ff0", "1"], - "treeIndex": 831 + "treeIndex": 832 }, { "value": ["0xbb3Fa251c16f9d7BB03aD3896547A93391C6F1CF", "1"], - "treeIndex": 941 + "treeIndex": 942 }, { "value": ["0x98b7F918738bE89D2B91cec0d6Ed695888aaB458", "1"], - "treeIndex": 1320 + "treeIndex": 1322 }, { "value": ["0x8be4491ced884d5c6b1667bd4e20b975e079a469", "1"], - "treeIndex": 1238 + "treeIndex": 1240 }, { "value": ["0xd8C860D789Ec1c6aE9631B680E6555F25Bc28331", "1"], - "treeIndex": 1061 + "treeIndex": 1063 }, { "value": ["0xD24aB99f90532BC217a12bCD644B96517de3B842", "1"], - "treeIndex": 1297 + "treeIndex": 1299 }, { "value": ["0x07B4cfa4e6d65F7A689390951a4fEA8A6583de92", "1"], - "treeIndex": 917 + "treeIndex": 918 }, { "value": ["0xA6Be47CAfFD637a13FB723C936e6AF495F0c9945", "1"], - "treeIndex": 1089 + "treeIndex": 1091 }, { "value": ["0x88a45767F348BC66D9e83ebf8A8ACec7d7e3d24e", "1"], - "treeIndex": 700 + "treeIndex": 701 }, { "value": ["0x43cb33e6f2bada9d359e31d42b7da5ee848100a9", "1"], - "treeIndex": 786 + "treeIndex": 787 }, { "value": ["0xd37f5756D70d826d47DfF516B1021Cc52BeA66B5", "1"], - "treeIndex": 1054 + "treeIndex": 1056 }, { "value": ["0xcf991e3f8414a8949967d51550683852d47f88f2", "1"], - "treeIndex": 1169 + "treeIndex": 1171 }, { "value": ["0xB32c7a9D7c57d196628074549767F73280Fa0f23", "1"], - "treeIndex": 1077 + "treeIndex": 1079 }, { "value": ["0xd957fcdb8fd06866aa4e2e38c128be655d5eddc0", "1"], - "treeIndex": 1194 + "treeIndex": 1196 }, { "value": ["0x0aa5c17737fa41ec5078032e353497754c520fe0", "1"], - "treeIndex": 999 + "treeIndex": 1000 }, { "value": ["0xc60188ebfcbfc4f0771ad9c2ebc02ed5c58f1aed", "1"], - "treeIndex": 807 + "treeIndex": 808 }, { "value": ["0xa47dcc127bd2487b01477d8e381dced5de5e5033", "1"], - "treeIndex": 1135 + "treeIndex": 1137 }, { "value": ["0x48707199060302639ad0d4bbe9225954326bd007", "1"], - "treeIndex": 822 + "treeIndex": 823 }, { "value": ["0x01b86AEEbCD1Ff94aC1195cFc8FD9e39dB24db45", "1"], - "treeIndex": 1270 + "treeIndex": 1272 }, { "value": ["0xefB1b61DAc569aC6E8A7B860967978976DB4561d", "1"], - "treeIndex": 1141 + "treeIndex": 1143 }, { "value": ["0x63b3b70e0162e19D5239cb1864E2E4eE6C60b61d", "1"], - "treeIndex": 829 + "treeIndex": 830 }, { "value": ["0x8cd11d507defb717a596e381be860ed1331eb516", "1"], - "treeIndex": 1195 + "treeIndex": 1197 }, { "value": ["0x407e138a1c800c469e207b811a2964a3f5cf8853", "1"], - "treeIndex": 1042 + "treeIndex": 1044 }, { "value": ["0x658472DA56EB30F30EA001C6896DD5BF3CF23b19", "1"], - "treeIndex": 1168 + "treeIndex": 1170 }, { "value": ["0xa6c885ba8b5b5e69cBC38E8fa5cbceE569777A79", "1"], - "treeIndex": 960 + "treeIndex": 961 }, { "value": ["0xad80ae3a70189ef34bcd8cff931974477d16fb6e", "1"], - "treeIndex": 1318 + "treeIndex": 1320 }, { "value": ["0x68D1BaC05bf08E8c6db979f4b6024cBcB188DE93", "1"], - "treeIndex": 1050 + "treeIndex": 1052 }, { "value": ["0x82b4037eB07B81136B0acf8Dd72866C58a60A893", "1"], - "treeIndex": 1244 + "treeIndex": 1246 }, { "value": ["0x334b7950B87166F67d72Ff93e6a9F577B3963938", "1"], - "treeIndex": 1178 + "treeIndex": 1180 }, { "value": ["0x862d3e1185754f98d64912c129f380209e4b14d6", "1"], - "treeIndex": 1104 + "treeIndex": 1106 }, { "value": ["0x42F4dc5707AC046e0E1c606e56d262D7D9A56A57", "1"], - "treeIndex": 1109 + "treeIndex": 1111 }, { "value": ["0x1951164a1cc60BbBe5996922997255A56761CA14", "1"], - "treeIndex": 982 + "treeIndex": 983 }, { "value": ["0x74799311F1BDd1dB053440D91aed281726b76797", "1"], - "treeIndex": 961 + "treeIndex": 962 }, { "value": ["0x68599057d850c6f99b05fe3b2fb6f4900e9596eb", "1"], - "treeIndex": 1103 + "treeIndex": 1105 }, { "value": ["0x60b4dFD79162664307c5CF697e649513D6428cd2", "1"], - "treeIndex": 1100 + "treeIndex": 1102 }, { "value": ["0x26a79FEacb76f2dCC8305C24Cd007a47b48Fb875", "1"], - "treeIndex": 1052 + "treeIndex": 1054 }, { "value": ["0x327cD3aeEa33ccf35689687a20c5dB935aa96C89", "1"], - "treeIndex": 910 + "treeIndex": 911 }, { "value": ["0xa7A7a115a827FDEAbb6c0729409d068bD82401FF", "1"], - "treeIndex": 883 + "treeIndex": 884 }, { "value": ["0xc07d659f3e1c727df7bea64e0ddc0c03f7a9c0fb", "1"], - "treeIndex": 934 + "treeIndex": 935 }, { "value": ["0xb6c2b662e4e9388349e7015f2b9b7a2f878d706c", "1"], - "treeIndex": 1257 + "treeIndex": 1259 }, { "value": ["0x43b0506f6b000327153b055c7e630f67be4096b7", "1"], - "treeIndex": 901 + "treeIndex": 902 }, { "value": ["0x00f884b294766d858db5c7cf70a806820a8d15f0", "1"], - "treeIndex": 662 + "treeIndex": 663 }, { "value": ["0x72A363e15676ec9B2Ba00c2f62dBDb8f1B1bd1B2", "1"], - "treeIndex": 1248 + "treeIndex": 1250 }, { "value": ["0x111222965183438ac14042548e20aE48E443f2f9", "1"], - "treeIndex": 1290 + "treeIndex": 1292 }, { "value": ["0xE65F1CCC3Ba766a1436625A408E2358B7d3eC482", "1"], - "treeIndex": 732 + "treeIndex": 733 }, { "value": ["0xbe137fb6a4872fC2c830A56280de3134872bcdE1", "1"], - "treeIndex": 1024 + "treeIndex": 1026 }, { "value": ["0xcc72ffa1f471360dc6964fe6b9e2907d7ca55c28", "1"], - "treeIndex": 1237 + "treeIndex": 1239 }, { "value": ["0xb412262d43118a498e7a884b5ac0fa4bfaf8daaa", "1"], - "treeIndex": 789 + "treeIndex": 790 }, { "value": ["0x5cA3A5c09c556a508940b9bFb08c7DaF4d8bcec1", "1"], - "treeIndex": 951 + "treeIndex": 952 }, { "value": ["0x443ff33b53fda8c55d9d9019bb52509dcc24209b", "1"], - "treeIndex": 718 + "treeIndex": 719 }, { "value": ["0x009B64175634D39B1FE81f97270f516544F04307", "1"], - "treeIndex": 1174 + "treeIndex": 1176 }, { "value": ["0x70619d577548faa0E11c1feDa79Bd4347503715D", "1"], - "treeIndex": 1211 + "treeIndex": 1213 }, { "value": ["0x1a84333ad6371f1dac13dcf5477dccce771c7655", "1"], - "treeIndex": 1130 + "treeIndex": 1132 }, { "value": ["0xD3Bd3A596CeEE552D4e81fa9B6Eb2eAF090d03B7", "1"], - "treeIndex": 664 + "treeIndex": 665 }, { "value": ["0x8a10C1906f1Da22FA37B69A8058dB04dBf403089", "1"], - "treeIndex": 970 + "treeIndex": 971 }, { "value": ["0x72c07C4980bFa0995942d375d9092F1f6876ba00", "1"], - "treeIndex": 1173 + "treeIndex": 1175 }, { "value": ["0x10b490cf79f478ff90a994c7a4105af8d73cbc56", "1"], - "treeIndex": 800 + "treeIndex": 801 }, { "value": ["0x55cbfdfe4f98b759944aee681ce63febc03bd4fa", "1"], - "treeIndex": 1138 + "treeIndex": 1140 }, { "value": ["0x9d5fc106ef22538b3cb7f0428cfa04b9a3083151", "1"], - "treeIndex": 815 + "treeIndex": 816 }, { "value": ["0x3ede3dD0b09Ea347aa120B9813B0730Dd11e8dFB", "1"], - "treeIndex": 784 + "treeIndex": 785 }, { "value": ["0x627AE166a9491a2D6327db8058065ff7aaF25a1E", "1"], - "treeIndex": 693 + "treeIndex": 694 }, { "value": ["0x2fa14daad079c26cd5293d6bb3de90ef2c637b2a", "1"], - "treeIndex": 963 + "treeIndex": 964 }, { "value": ["0xfbd035252548d095e2184507a8c4ef8fde37ebcf", "1"], - "treeIndex": 921 + "treeIndex": 922 }, { "value": ["0x946c8b755e0f448a09172a7e985e96935954a221", "1"], - "treeIndex": 1093 + "treeIndex": 1095 }, { "value": ["0x959F5C4Fa5b60Fe1Aa99C1C060657d8abBF9C3Bc", "1"], - "treeIndex": 833 + "treeIndex": 834 }, { "value": ["0x3B27515853608532599DE505F4E79b0EbB5e4B56", "1"], - "treeIndex": 793 + "treeIndex": 794 }, { "value": ["0x14d18d87424b73c1a1d91a2759eab88f44fbe32f", "1"], - "treeIndex": 820 + "treeIndex": 821 }, { "value": ["0x9538d52c3682f807f3cd27e1573bcefa8a0d0884", "1"], - "treeIndex": 896 + "treeIndex": 897 }, { "value": ["0x28d81c0660d627083e430497f299edff5cfabe76", "1"], - "treeIndex": 1256 + "treeIndex": 1258 }, { "value": ["0x24897A16C70da3E438083545eFb795aF49AB1f53", "1"], - "treeIndex": 779 + "treeIndex": 780 }, { "value": ["0xad062b56501042d97d2c26def7aff6b5ff966ee9", "1"], - "treeIndex": 708 + "treeIndex": 709 }, { "value": ["0x1e712E83acc07470FBEd55934de94b5DAAEc97f7", "1"], - "treeIndex": 1172 + "treeIndex": 1174 }, { "value": ["0x2a7ddcf6c76331ff70f0c2b4a7a57ca50bd5cb73", "1"], - "treeIndex": 1219 + "treeIndex": 1221 }, { "value": ["0x77Da9d6B211d6AE719D0fE348743065e5532da0c", "1"], - "treeIndex": 1253 + "treeIndex": 1255 }, { "value": ["0xcbb3fbf562a93006eddc83ae86fb6152968abacc", "1"], - "treeIndex": 1011 + "treeIndex": 1012 }, { "value": ["0x3Eb73235225F0a4C8e7612ED3C0eb93f947CFE80", "1"], - "treeIndex": 959 + "treeIndex": 960 }, { "value": ["0xf34bf8635ce2a93f3cd4021e17ffbbb1a5eedd3e", "1"], - "treeIndex": 1276 + "treeIndex": 1278 }, { "value": ["0xd921b08b862a346463024b4cfa201923593033f0", "1"], - "treeIndex": 1242 + "treeIndex": 1244 }, { "value": ["0x51601cdd21bdfe246da02a2645de145c085b7722", "1"], - "treeIndex": 1136 + "treeIndex": 1138 }, { "value": ["0x1a196188342bd1523fe23d41defc459c09190559", "1"], - "treeIndex": 1009 + "treeIndex": 1010 }, { "value": ["0x6c02c390ed91d717e1d1da61e85559f3b6251997", "1"], - "treeIndex": 727 + "treeIndex": 728 }, { "value": ["0x8655290Cb24CbD4dD90d0d8EB77404cf2c300d2f", "1"], - "treeIndex": 1191 + "treeIndex": 1193 }, { "value": ["0xF29942f2C6AD54b53Ad536d9A3201aa9D25355bD", "1"], - "treeIndex": 821 + "treeIndex": 822 }, { "value": ["0x46c940ac083b5637b9a27efa6ec81fa7485300c7", "1"], - "treeIndex": 1213 + "treeIndex": 1215 }, { "value": ["0xfbe30bb0dac58e8a10493f0c04f521c96925c29e", "1"], - "treeIndex": 1149 + "treeIndex": 1151 }, { "value": ["0x4591c0d02cb8b7c70a697e5e9d3df2fdb4316961", "1"], - "treeIndex": 1224 + "treeIndex": 1226 }, { "value": ["0xD513aA3cB6B3Ba62b0E7FF1BB86c7b1A409e9C51", "1"], - "treeIndex": 1282 + "treeIndex": 1284 }, { "value": ["0xaeadc04e3c357de9e49d238d7d5628ee30612da7", "1"], - "treeIndex": 1280 + "treeIndex": 1282 }, { "value": ["0x869276ef1fca605ac1b816796dd41ec4a52ec8c8", "1"], - "treeIndex": 1018 + "treeIndex": 1020 }, { "value": ["0xa6ee6741836b87571a907de94ef5bcfa8a2b2fbe", "1"], - "treeIndex": 673 + "treeIndex": 674 }, { "value": ["0xf155f68aaefb6607a893fbb870d95fb161adc7a6", "1"], - "treeIndex": 978 + "treeIndex": 979 }, { "value": ["0xCF3Eb886D2EeF460Cb64525EBed7DaE0840044A6", "1"], - "treeIndex": 1301 + "treeIndex": 1303 }, { "value": ["0x59389cb3f680fe74b801b8452c1d1db9f6d68cd2", "1"], - "treeIndex": 738 + "treeIndex": 739 }, { "value": ["0x7559f5d17dd93df1b8bfaae7b5091380392bbbea", "1"], - "treeIndex": 694 + "treeIndex": 695 }, { "value": ["0x70a1c7d12a0f59ca8bc233d50cdc1b16053c4f14", "1"], - "treeIndex": 914 + "treeIndex": 915 }, { "value": ["0xf9aa47a4647398a45a41ced6cac4c8fc8c0f3d9b", "1"], - "treeIndex": 1228 + "treeIndex": 1230 }, { "value": ["0x2c3e1f5e6d4f9072216991b2a684df1ee93033ce", "1"], - "treeIndex": 1072 + "treeIndex": 1074 }, { "value": ["0xF08c6cbC8bcd68D5A6Ec8498f911d45a9C8035F9", "1"], - "treeIndex": 780 + "treeIndex": 781 }, { "value": ["0x8A1572d4edD4D28dBe9B0dFA22641Dd26Bb60B96", "1"], - "treeIndex": 1057 + "treeIndex": 1059 }, { "value": ["0x425400d9642aeac4e8b88e0447552ffdc6fad752", "1"], - "treeIndex": 902 + "treeIndex": 903 }, { "value": ["0x6c50686cb8024C23F76d723b533110580DC629eE", "1"], - "treeIndex": 840 + "treeIndex": 841 }, { "value": ["0xBD73cF5baf12F120Ee3f6C4ad82df9a12649e578", "1"], - "treeIndex": 1131 + "treeIndex": 1133 }, { "value": ["0x93BBF2b1Ffe750FAD9a83384e6C4fBcA01401B03", "1"], - "treeIndex": 1212 + "treeIndex": 1214 }, { "value": ["0xE712D64e2d9C5280d6cB319B20654859cC06Bb9B", "1"], - "treeIndex": 885 + "treeIndex": 886 }, { "value": ["0x0f8D1999000Fb5093008344B2D73407c9fB71337", "1"], - "treeIndex": 1202 + "treeIndex": 1204 }, { "value": ["0xB80970A96c6B49e1678Aa147Eb83c1aA0a3818b8", "1"], - "treeIndex": 753 + "treeIndex": 754 }, { "value": ["0x8f4EA9ad88DB773e4a086884EBBf0Cf813915D38", "1"], - "treeIndex": 1182 + "treeIndex": 1184 }, { "value": ["0x7b63B3037D37751bb25c067552f44b25Ff453702", "1"], - "treeIndex": 1299 + "treeIndex": 1301 }, { "value": ["0xa9c178D179C2EeD40e60C425d76e354973B3DbBd", "1"], - "treeIndex": 797 + "treeIndex": 798 }, { "value": ["0xb16f17769b03AC0997c100A344E6d81d3Bc1f0C0", "1"], - "treeIndex": 668 + "treeIndex": 669 }, { "value": ["0xE37FdAfE569461fe4998598838b06597D9ADeC21", "1"], - "treeIndex": 889 + "treeIndex": 890 }, { "value": ["0xc8d81C03F98a4656Fe7f3bF32B9A9ee0BD6c8903", "1"], - "treeIndex": 962 + "treeIndex": 963 }, { "value": ["0xE5F87e969D10e2d3Bc497671BAc5729fE9Ab1521", "1"], - "treeIndex": 809 + "treeIndex": 810 }, { "value": ["0x9B61a616d18562D7B667Ed83c8Ad5d9e1B00080E", "1"], - "treeIndex": 678 + "treeIndex": 679 }, { "value": ["0x17ED40E78492538e1A0101CF9d60105b7629C414", "1"], - "treeIndex": 1267 + "treeIndex": 1269 }, { "value": ["0xf9305317843951711c6579C2997C5d8Dc542e6B5", "1"], - "treeIndex": 696 + "treeIndex": 697 }, { "value": ["0xe0b11855eb530c36a323f92e93c299ad93922d0f", "1"], - "treeIndex": 1025 + "treeIndex": 1027 }, { "value": ["0x48cc3c16d414f6eb616e78fe0354f1baeb254de9", "1"], - "treeIndex": 1075 + "treeIndex": 1077 }, { "value": ["0x6b23333bc26215e88a87489e1021e9f62f5399d1", "1"], - "treeIndex": 666 + "treeIndex": 667 }, { "value": ["0xd777edffaf1eb956159419f087b6666b09be2bac", "1"], - "treeIndex": 948 + "treeIndex": 949 }, { "value": ["0x5bc0cc50aa58a851a7f5ecfb32f0d9cd495cfbf6", "1"], - "treeIndex": 830 + "treeIndex": 831 }, { "value": ["0x7b75bc70b928472856047fdef0d08d5b5816aefd", "1"], - "treeIndex": 730 + "treeIndex": 731 }, { "value": ["0x2c3474bfe64cd9748be69d24c30cc91639265e68", "1"], - "treeIndex": 943 + "treeIndex": 944 }, { "value": ["0xfEBded7dF0b739564Dcb218B4e673f0918528B8d", "1"], - "treeIndex": 866 + "treeIndex": 867 }, { "value": ["0xF08576f40D74A3D0A6f7709a1e3f603DEAc39f05", "1"], - "treeIndex": 1028 + "treeIndex": 1030 }, { "value": ["0x97cb91642902ef48709bEcA1236813495FceEB71", "1"], - "treeIndex": 905 + "treeIndex": 906 }, { "value": ["0x26f128ca082cc1C28670000E6274f275723C8f1e", "1"], - "treeIndex": 1273 + "treeIndex": 1275 }, { "value": ["0x381B0A70687c60bffeEa61d2FE1B9B340C506F71", "1"], - "treeIndex": 1151 + "treeIndex": 1153 }, { "value": ["0x6905435fa2e1cB31972bb0F0bFF16F5744A91876", "1"], - "treeIndex": 669 + "treeIndex": 670 }, { "value": ["0xF906D4C20f46AA7b54c79A730332371EF420cc0e", "1"], - "treeIndex": 803 + "treeIndex": 804 }, { "value": ["0x88193fc66f2cab15e03add807d11adc08b5352df", "1"], - "treeIndex": 1115 + "treeIndex": 1117 }, { "value": ["0x41AfDc422831dCCC8505762c75E69da983B83F92", "1"], - "treeIndex": 705 + "treeIndex": 706 }, { "value": ["0xf2177e53db73cdaa0bd15d891d3d3378a4098376", "1"], - "treeIndex": 819 + "treeIndex": 820 }, { "value": ["0x79de94f7db2800b4d8a56fd8a5becef416bbd02b", "1"], - "treeIndex": 931 + "treeIndex": 932 }, { "value": ["0x5743e93ab23a457150724ca18d9a0e35b17cc8fc", "1"], - "treeIndex": 1016 + "treeIndex": 1018 }, { "value": ["0x137331ed7e7C9fffFb24f738C6D0Fb52BEdD97F9", "1"], - "treeIndex": 1201 + "treeIndex": 1203 }, { "value": ["0x6F69F79cEA418024b9E0acfD18bD8DE26f9BBE39", "1"], - "treeIndex": 743 + "treeIndex": 744 }, { "value": ["0x102f468314e062958c2ff7555a62356f505c1d1e", "1"], - "treeIndex": 1006 + "treeIndex": 1007 }, { "value": ["0xc6cfeDaAA225Bb433E00d762FE898707a3c077aD", "1"], - "treeIndex": 1008 + "treeIndex": 1009 }, { "value": ["0x52dbD5AeA5D61A4f7Fb760CFDc431Fbe3dC531A7", "1"], - "treeIndex": 724 + "treeIndex": 725 }, { "value": ["0x41955ab7d12f9f6c03de972b91d9b895d9c2eaf8", "1"], - "treeIndex": 1215 + "treeIndex": 1217 }, { "value": ["0x28e15b0eb947333fbc71a83f4a20c2a95acccf6a", "1"], - "treeIndex": 890 + "treeIndex": 891 }, { "value": ["0x6beEF2B2fE00FDDCa12A8CDA2D4B00435b0ba3b6", "1"], - "treeIndex": 868 + "treeIndex": 869 }, { "value": ["0x8C26CC23c671be30c6f701417FBC153B6998fF68", "1"], - "treeIndex": 1080 + "treeIndex": 1082 }, { "value": ["0x38016c4Dadd92c0C74B5EcE7A9B4AB859777B81A", "1"], - "treeIndex": 690 + "treeIndex": 691 }, { "value": ["0xfDc2B224cc1fd65d6cdCcDd896510A7d89aF81c3", "1"], - "treeIndex": 778 + "treeIndex": 779 }, { "value": ["0x34b5f399cc5a1dd491666c9866941fb8e8d09746", "1"], - "treeIndex": 1001 + "treeIndex": 1002 }, { "value": ["0xdb27D37572eA22A7c2b82D15101d6CABdb0b6F74", "1"], - "treeIndex": 734 + "treeIndex": 735 }, { "value": ["0x33CC5926289066C0bc7080e3eF133Cf761D527bD", "1"], - "treeIndex": 733 + "treeIndex": 734 }, { "value": ["0x0990cC53F3503281737a57E3FD4fa09aaa63f8e2", "1"], - "treeIndex": 675 + "treeIndex": 676 }, { "value": ["0x18AEB8064beCa45C264342EF13355DF535F8Fa37", "1"], - "treeIndex": 864 + "treeIndex": 865 }, { "value": ["0x3aBfC7FFA744edc456D361Be957f972D1BaC4991", "1"], - "treeIndex": 1127 + "treeIndex": 1129 }, { "value": ["0x2c79aC9f76c3310B59D4C5E3FD214a73AEC68553", "1"], - "treeIndex": 703 + "treeIndex": 704 }, { "value": ["0xaD5116D1f9F3D2816935b0Df95a58750745eB308", "1"], - "treeIndex": 1294 + "treeIndex": 1296 }, { "value": ["0x026C9072199156739837Ef6e2cCEF2A23D554DAF", "1"], - "treeIndex": 844 + "treeIndex": 845 }, { "value": ["0x3635B3d38B971ED37b17E6E1Ac685Af87bc8d930", "1"], - "treeIndex": 843 + "treeIndex": 844 }, { "value": ["0x563153823D702516F92fc24edD9358D6973f60F9", "1"], - "treeIndex": 881 + "treeIndex": 882 }, { "value": ["0xC5440A5e857102620Bd2E7B1C28895f4D99934c0", "1"], - "treeIndex": 1017 + "treeIndex": 1019 }, { "value": ["0x45a5c8a2ea84f48537a74e2e8f96790c90a0046c", "1"], - "treeIndex": 1250 + "treeIndex": 1252 }, { "value": ["0xbB05E34C2315DfFb3a2e5EA345C489d3e190eb32", "1"], - "treeIndex": 984 + "treeIndex": 985 }, { "value": ["0x875FB048e3b6A5d2dcA69c5e29D730f4040d50aa", "1"], - "treeIndex": 1293 + "treeIndex": 1295 }, { "value": ["0x5e11534344b8c1fda947b37dc57b8734232a6b1c", "1"], - "treeIndex": 1220 + "treeIndex": 1222 }, { "value": ["0x8dC24f29bB67BAd92A90dFB7aB58c702B4Bd73f1", "1"], - "treeIndex": 1113 + "treeIndex": 1115 }, { "value": ["0x7535B9c39d66Fa6cC0b67c74E1F6dFBfe917a4a2", "1"], - "treeIndex": 945 + "treeIndex": 946 }, { "value": ["0x0edeF718166D6B239f965229C8Dd306ea52626E4", "1"], - "treeIndex": 957 + "treeIndex": 958 }, { "value": ["0x68647DDA6e001B620d36A6472e975f6405262C7f", "1"], - "treeIndex": 1271 + "treeIndex": 1273 }, { "value": ["0xC3F8E3b3808d2e33b06abFB8731b88948E1f2b8b", "1"], - "treeIndex": 1319 + "treeIndex": 1321 }, { "value": ["0x27e15abc9644c11bdad575748f7839e6783acdd5", "1"], - "treeIndex": 1039 + "treeIndex": 1041 }, { "value": ["0x260dB26a5D85E9e6983257e8Af71A60e95873d6b", "1"], - "treeIndex": 1263 + "treeIndex": 1265 }, { "value": ["0xBF222CA2Ef5126afFe94EA72903764D52cD12642", "1"], - "treeIndex": 808 + "treeIndex": 809 }, { "value": ["0x033485Ae1cce7a1Fbc9024469062Fa5a9E7c0799", "1"], - "treeIndex": 1129 + "treeIndex": 1131 }, { "value": ["0x4170AeF5c413915bafdc1980dC2f62c501559132", "1"], - "treeIndex": 1053 + "treeIndex": 1055 }, { "value": ["0x3265A39fa1bDD28b9029568208e3cb4639Adbf3e", "1"], - "treeIndex": 876 + "treeIndex": 877 }, { "value": ["0x112F5c6B85D5dF1594DE75E5Cc655dD011e61d78", "1"], - "treeIndex": 781 + "treeIndex": 782 }, { "value": ["0x7a3e92078919273318e3396c92E477E7373fef79", "1"], - "treeIndex": 1092 + "treeIndex": 1094 }, { "value": ["0x2cf8bd93c36dc34d35208fe7a598a13e7783c69a", "1"], - "treeIndex": 729 + "treeIndex": 730 }, { "value": ["0x520c7792f2343c7A5c9F230bD39C565918Fcf215", "1"], - "treeIndex": 1235 + "treeIndex": 1237 }, { "value": ["0x899B2d61a5943Dd2452cbc9Ff5d158c63a2275dd", "1"], - "treeIndex": 813 + "treeIndex": 814 }, { "value": ["0x51D0A5CBe5666ad3EEe303f0d16FcDe9C5Cd3009", "1"], - "treeIndex": 1314 + "treeIndex": 1316 }, { "value": ["0x44aa0725a9D7F7b2F86DB37F667E5a3E11388CBc", "1"], - "treeIndex": 1086 + "treeIndex": 1088 }, { "value": ["0xCC546bAA3cA03C25294a901608049d5E045FBFA2", "1"], - "treeIndex": 1281 + "treeIndex": 1283 }, { "value": ["0xcE727050002F2a1398E819328fa501D952a05aAC", "1"], - "treeIndex": 893 + "treeIndex": 894 }, { "value": ["0x7d7337FcDefe5771e3280f25c3Ba670700E8560c", "1"], - "treeIndex": 1134 + "treeIndex": 1136 }, { "value": ["0xFaDd3C023e295FDBA31fc2b57770029318960beD", "1"], - "treeIndex": 765 + "treeIndex": 766 }, { "value": ["0xbA55BDbF959DF826dA6c35487eB15FaD2164662d", "1"], - "treeIndex": 922 + "treeIndex": 923 }, { "value": ["0x01fd2245a54411819011550b1c8799814aa2cc0b", "1"], - "treeIndex": 711 + "treeIndex": 712 }, { "value": ["0xE6e7A811aC96c93cd6b555C2aD4430121321f41B", "1"], - "treeIndex": 1309 + "treeIndex": 1311 }, { "value": ["0xe8142000ef4dad30b1b84705b32fdd8d906366d9", "1"], - "treeIndex": 1058 + "treeIndex": 1060 }, { "value": ["0x94365edc741d589320602ce66677B5ddB64d3687", "1"], - "treeIndex": 955 + "treeIndex": 956 }, { "value": ["0x3df6c1D54ad103233B3c74a12042f67239d69f70", "1"], - "treeIndex": 736 + "treeIndex": 737 }, { "value": ["0xa195AF9e11997c4852929f89225894dD5F4E1418", "1"], - "treeIndex": 1078 + "treeIndex": 1080 }, { "value": ["0x09E102414813d84519c21e03C32001b123cD58C9", "1"], - "treeIndex": 892 + "treeIndex": 893 }, { "value": ["0x380b5F11406AAd00D3398f838089D9d43FcDAbf8", "1"], - "treeIndex": 1040 + "treeIndex": 1042 }, { "value": ["0x2E92072fd9e6189E07FE977CC35Cb72DDfa1111E", "1"], - "treeIndex": 670 + "treeIndex": 671 }, { "value": ["0xEF6BF72663897B1993f680519c1EC7962893D00F", "1"], - "treeIndex": 681 + "treeIndex": 682 }, { "value": ["0xbC8f491D5c7cbd999b1E742D645acDB77a017ef3", "1"], - "treeIndex": 1316 + "treeIndex": 1318 }, { "value": ["0x13c0c1F31368C39297F3fAd4FB6bbb9C96bbC988", "1"], - "treeIndex": 1150 + "treeIndex": 1152 }, { "value": ["0xbd40A797140f36e608b41390E669F11E79DE4b6D", "1"], - "treeIndex": 1287 + "treeIndex": 1289 }, { "value": ["0xc6adE353C837ebA0CB2a85419B7aB50e59eb2A95", "1"], - "treeIndex": 1236 + "treeIndex": 1238 }, { "value": ["0xaA26fC5AeAfd9E17b8e5A3fFc6E5041b12137105", "1"], - "treeIndex": 935 + "treeIndex": 936 }, { "value": ["0xA9Cdc432A3d1a1A5F43b353950389790be640b4A", "1"], - "treeIndex": 1108 + "treeIndex": 1110 }, { "value": ["0xaa3cD95439557cAfD4498aAC4a9489E39Be98AA5", "1"], - "treeIndex": 942 + "treeIndex": 943 }, { "value": ["0xcb7329E0b62F79634c0e8EAD7cE46108564f2F0B", "1"], - "treeIndex": 1249 + "treeIndex": 1251 }, { "value": ["0x0f49efe399584b13f9d0f77198319ed030ac3f20", "1"], - "treeIndex": 937 + "treeIndex": 938 }, { "value": ["0xBea1771efeD9D4a80D6cE19Aedb70e56Dd739B49", "1"], - "treeIndex": 1186 + "treeIndex": 1188 }, { "value": ["0xD7efAE6e8e0556eBb5E77A499a34FCe6a4D8c722", "1"], - "treeIndex": 1323 + "treeIndex": 1325 }, { "value": ["0x34BEB2e3660624A94504A8C9e5c8aA29fBD14E31", "1"], - "treeIndex": 990 + "treeIndex": 991 }, { "value": ["0x78d3C01365B196aC94Ec0754Ef0ee051572bBbdD", "1"], - "treeIndex": 751 + "treeIndex": 752 }, { "value": ["0x049808d5EAA90a2665b9703d2246DDed34F1EB73", "1"], - "treeIndex": 976 + "treeIndex": 977 }, { "value": ["0xCD7f6b72049C3b54416f9F26392cB271e74ca3FD", "1"], - "treeIndex": 1291 + "treeIndex": 1293 }, { "value": ["0x7565DEdDCB83a14B185eb9520914bB918cDfE983", "1"], - "treeIndex": 1170 + "treeIndex": 1172 }, { "value": ["0xb3eb1838512d6172911505edafee3a6535d69e34", "1"], - "treeIndex": 817 + "treeIndex": 818 }, { "value": ["0x94507bc0C3fa6483F84453D8DD85AA1617e0d88F", "1"], - "treeIndex": 1083 + "treeIndex": 1085 }, { "value": ["0x89b0fB6eb9d83e6E50915ABa19B92fc80a58f065", "1"], - "treeIndex": 927 + "treeIndex": 928 }, { "value": ["0x3676828AdDB128eCD9F51D49Ca5b5F755607662e", "1"], - "treeIndex": 1000 + "treeIndex": 1001 }, { "value": ["0x00bCD13eF3cD3D835Db9Ab66f8F440101295A82d", "1"], - "treeIndex": 735 + "treeIndex": 736 }, { "value": ["0x85893cc28f86c3138e1e3f888b16466e8accafc6", "1"], - "treeIndex": 1176 + "treeIndex": 1178 }, { "value": ["0xca93c1c564bf5a4e8dcca65ce80fbdf66990927d", "1"], - "treeIndex": 835 + "treeIndex": 836 }, { "value": ["0x904B8C6696Df18dBb88Dc810075c16805e03E909", "1"], - "treeIndex": 1317 + "treeIndex": 1319 }, { "value": ["0x7e1A81D62f762a4232300f3f68A23Cff376B06Bd", "1"], - "treeIndex": 1193 + "treeIndex": 1195 }, { "value": ["0x8cf36632D7305619EB6b07c532Ad4DD0971F6282", "1"], - "treeIndex": 832 + "treeIndex": 833 }, { "value": ["0xF637978800670ba2a978501D86f73442e108f946", "1"], - "treeIndex": 1105 + "treeIndex": 1107 }, { "value": ["0x893E7C3d5fb639d0964A16037f7E1b5Ab595dBe8", "1"], - "treeIndex": 676 + "treeIndex": 677 }, { "value": ["0xbf47F68f0Cf07Ab56180D25D083ce73Db66AbCC9", "1"], - "treeIndex": 702 + "treeIndex": 703 }, { "value": ["0x9898C676b550110dB42240Ed11Cae6A8Cf8Ccb48", "1"], - "treeIndex": 989 + "treeIndex": 990 }, { "value": ["0x373250CCe67642B3fDa31B172150C8Cf10376B88", "1"], - "treeIndex": 767 + "treeIndex": 768 }, { "value": ["0x896b2797442e7066f2e46959a0B32398999fCC0d", "1"], - "treeIndex": 998 + "treeIndex": 999 }, { "value": ["0x64897dBB52C2BFa0Ae107101b4983f365fb9a390", "1"], - "treeIndex": 768 + "treeIndex": 769 }, { "value": ["0xee7028E9C5240d77876efBAC5acD0E7cE2012b19", "1"], - "treeIndex": 1090 + "treeIndex": 1092 }, { "value": ["0x97Ba60ccd56b319096cf3f0Cb3429114a0A184E5", "1"], - "treeIndex": 1255 + "treeIndex": 1257 }, { "value": ["0x9BD48e08E3444B30113812acd52458b35C33803A", "1"], - "treeIndex": 706 + "treeIndex": 707 }, { "value": ["0x9BA7053384784B3D2949803b83F2520572CB5452", "1"], - "treeIndex": 1269 + "treeIndex": 1271 }, { "value": ["0x11BDd3E134A0c3dC242b7b9d399896b3587a8daC", "1"], - "treeIndex": 1010 + "treeIndex": 1011 }, { "value": ["0xc6571c2FB66825F13b7751b1c334810D397618Eb", "1"], - "treeIndex": 1177 + "treeIndex": 1179 }, { "value": ["0x3961a7966F6E8eA422CaF1362530d3F5c2D778CA", "1"], - "treeIndex": 1275 + "treeIndex": 1277 }, { "value": ["0xa2DE0B80D24C3Bc37A9F6C44683fA51d67852c38", "1"], - "treeIndex": 1199 + "treeIndex": 1201 }, { "value": ["0xa7F343a7C53f3A852a7Ae51F5E62b4D9b0594336", "1"], - "treeIndex": 859 + "treeIndex": 860 }, { "value": ["0x0c4E0544F0eCfdF4387B45E44d2F45d26aE65D02", "1"], - "treeIndex": 1295 + "treeIndex": 1297 }, { "value": ["0x217A94e97287659bD9288862BA28C2f02cc5A4d1", "1"], - "treeIndex": 1217 + "treeIndex": 1219 }, { "value": ["0xFE67648A6b97751D7931E73b74a5b65917BDB06a", "1"], - "treeIndex": 1302 + "treeIndex": 1304 }, { "value": ["0x84924bfFabFC9601D22bAEe4cF4911b40AD41664", "1"], - "treeIndex": 739 + "treeIndex": 740 }, { "value": ["0x5e81c5F7fAB13D3708ABb8679cbdBF863E09409c", "1"], - "treeIndex": 903 + "treeIndex": 904 }, { "value": ["0x90edD7024Dd948892Cdd063FEF6EcC167bEa2304", "1"], - "treeIndex": 1070 + "treeIndex": 1072 }, { "value": ["0x4B2F6D3A23bADb60c8405d50289eF3daB9109936", "1"], - "treeIndex": 1112 + "treeIndex": 1114 }, { "value": ["0x1314ba5224256A2092869e91098f101BF1182934", "1"], - "treeIndex": 862 + "treeIndex": 863 }, { "value": ["0xe1dbD2c71ded411DB6Ce029785E9bA9c1Ae0c801", "1"], - "treeIndex": 695 + "treeIndex": 696 }, { "value": ["0x82584A2e294fC67C390f059227490DA7390dF331", "1"], - "treeIndex": 824 + "treeIndex": 825 }, { "value": ["0x24d697503CEDA3e33c6Cd9cDCf769702f32b5974", "1"], - "treeIndex": 848 + "treeIndex": 849 }, { "value": ["0xb9E500CF14b355f50217f1a89040DF1765C5E70e", "1"], - "treeIndex": 996 + "treeIndex": 997 }, { "value": ["0x79fb4ebdd543d0927b809b1e8f552f1bf74dec65", "1"], - "treeIndex": 954 + "treeIndex": 955 }, { "value": ["0xd6d965bd7f73fb1de3060c09483a14601d5317d8", "1"], - "treeIndex": 1014 + "treeIndex": 1016 }, { "value": ["0x8eea53fc41b248af0cb8dc72ec17eb2caf9f32c0", "1"], - "treeIndex": 1065 + "treeIndex": 1067 }, { "value": ["0xe5f7c6e25ff2f6496de5c08f02e6d4fb5fce23c9", "1"], - "treeIndex": 1118 + "treeIndex": 1120 }, { "value": ["0xc19603c6b2b3f64afeffd30c4580428317c1a692", "1"], - "treeIndex": 1029 + "treeIndex": 1031 }, { "value": ["0x81abbcccf44b3102c0cd8159c1ab8b295849df23", "1"], - "treeIndex": 1285 + "treeIndex": 1287 }, { "value": ["0x6026dcf4a4146bad240066c670b62c831e94dc1a", "1"], - "treeIndex": 760 + "treeIndex": 761 }, { "value": ["0xc74796ea4d76333e38638bb2cb8ddfe0bffaa749", "1"], - "treeIndex": 926 + "treeIndex": 927 }, { "value": ["0x38de4b9714640d7d86160f4bfd45d9e796c0fe49", "1"], - "treeIndex": 796 + "treeIndex": 797 }, { "value": ["0x55792e1f0a41d3af8b6d41dfdcf24651aa80fa1e", "1"], - "treeIndex": 777 + "treeIndex": 778 }, { "value": ["0xc66fadffeb6da3b9a7fa3c71130f881e3a9b13fb", "1"], - "treeIndex": 1261 + "treeIndex": 1263 }, { "value": ["0x812b6cd80f38bdb8078043609c55f8b55fa7eab4", "1"], - "treeIndex": 825 + "treeIndex": 826 }, { "value": ["0x7152cd3891d5b80ca162bbb807e2d4310c084207", "1"], - "treeIndex": 715 + "treeIndex": 716 }, { "value": ["0x00b824a7aebd7ab7cfd5fafa470c690f0dba7cb6", "1"], - "treeIndex": 677 + "treeIndex": 678 }, { "value": ["0x9b437ee080d4d8c579ff947d86319e59b2f7b1ee", "1"], - "treeIndex": 723 + "treeIndex": 724 }, { "value": ["0xcd922764c55c4156c9e03e815aedc35dc263700f", "1"], - "treeIndex": 1139 + "treeIndex": 1141 }, { "value": ["0xc56993491eb1fa12c17863f922a8393de8ab4413", "1"], - "treeIndex": 746 + "treeIndex": 747 }, { "value": ["0x9a1c6e462961422168b4d958cff3344ea7430507", "1"], - "treeIndex": 1225 + "treeIndex": 1227 }, { "value": ["0xda65d415cc9d5ddc2a08bdffc996750755fc3cf0", "1"], - "treeIndex": 1143 + "treeIndex": 1145 }, { "value": ["0x9753a6122349933f933c0fe6200e67bbb1199c09", "1"], - "treeIndex": 878 + "treeIndex": 879 }, { "value": ["0x14b35ea598a18e171a8f1e724c356f83fb4a0f18", "1"], - "treeIndex": 826 + "treeIndex": 827 }, { "value": ["0xe4557a032c75bf2ea06a8212e36f18f60e7ee7ac", "1"], - "treeIndex": 1279 + "treeIndex": 1281 }, { "value": ["0x6dff0c088cfb81ecaae1aef739219f1ec1bd0bc6", "1"], - "treeIndex": 741 + "treeIndex": 742 }, { "value": ["0x1714859bc91dee08c2355251cd3a13784152aadf", "1"], - "treeIndex": 1133 + "treeIndex": 1135 }, { "value": ["0x503a47280852033dcdbdd113663ff9e6e7a0a338", "1"], - "treeIndex": 1180 + "treeIndex": 1182 }, { "value": ["0xbefaadd4a558637646a7f0697022e1f767c7b491", "1"], - "treeIndex": 763 + "treeIndex": 764 }, { "value": ["0x773674eba65277e47faa2bf4fd2e3fa6c2f01228", "1"], - "treeIndex": 1146 + "treeIndex": 1148 }, { "value": ["0xb1e745e9a67be8ceee1864558e7608021a5ba4e0", "1"], - "treeIndex": 912 + "treeIndex": 913 }, { "value": ["0xfac906b02e9e1f54c5b9f891db5e8fe428889448", "1"], - "treeIndex": 1321 + "treeIndex": 1323 }, { "value": ["0x0ef7871ea3ef1952621c389598386368896ccd8b", "1"], - "treeIndex": 663 + "treeIndex": 664 }, { "value": ["0xaea29c04e32ebce118ea8cee975a3317190cccdd", "1"], - "treeIndex": 1184 + "treeIndex": 1186 }, { "value": ["0x71e18c339795799fe56aaf3d5c9bd4dc93be2842", "1"], - "treeIndex": 1292 + "treeIndex": 1294 }, { "value": ["0x4e7a933b61999dcc712e056cf94595591958eda6", "1"], - "treeIndex": 710 + "treeIndex": 711 }, { "value": ["0xa56bf93a4bc592d446f3712c0db17b4e33e14b71", "1"], - "treeIndex": 846 + "treeIndex": 847 }, { "value": ["0x8337478ae2e798230624dcb3bec342fddc6248a0", "1"], - "treeIndex": 1246 + "treeIndex": 1248 }, { "value": ["0xa63dddb69e6e470bf3d236b434ef80a213b998a7", "1"], - "treeIndex": 1167 + "treeIndex": 1169 }, { "value": ["0x081a919a2e2e43eedfc6a618b76be5a2381adc00", "1"], - "treeIndex": 1132 + "treeIndex": 1134 }, { "value": ["0xd202a56c5e7ba279431e43d945c5cc6f68d083b7", "1"], - "treeIndex": 1062 + "treeIndex": 1064 }, { "value": ["0x9782f2b0878d97ed2d79b38cbbc494c6bd3999a8", "1"], - "treeIndex": 1119 + "treeIndex": 1121 }, { "value": ["0x38c596da5aa8fe9f91eaf30c431dffccc09394a6", "1"], - "treeIndex": 947 + "treeIndex": 948 }, { "value": ["0x56706f118e42ae069f20c5636141b844d1324ae1", "1"], - "treeIndex": 1071 + "treeIndex": 1073 }, { "value": ["0x2019aa6811c84c7cc4df4fe0f3f3914631aae315", "1"], - "treeIndex": 1035 + "treeIndex": 1037 }, { "value": ["0x69aa0361dbb0527d4f1e5312403bd41788fe61fe", "1"], - "treeIndex": 907 + "treeIndex": 908 }, { "value": ["0x90b285c1bbddb36fbfc363773d6689975cccdbfc", "1"], - "treeIndex": 953 + "treeIndex": 954 }, { "value": ["0xdee983c30a123f1798437ead4587dd87cb96dcda", "5"], - "treeIndex": 1262 + "treeIndex": 1264 }, { "value": ["0x418edf05d862ec3d591cb16f7e2efa88de8f2b00", "1"], - "treeIndex": 1004 + "treeIndex": 1005 }, { "value": ["0x02e725b7e99091bd4ccbf15228384e160ecdf78f", "1"], - "treeIndex": 801 + "treeIndex": 802 }, { "value": ["0xa0fe02a5078922fe067b1c4d69b4d7c722ed78d9", "1"], - "treeIndex": 975 + "treeIndex": 976 }, { "value": ["0x388a519241457b90e1349e342dca1fb093b50378", "1"], - "treeIndex": 757 + "treeIndex": 758 }, { "value": ["0xa693670efa475ad547c29d67d9d9bd6d8d1b3c34", "1"], - "treeIndex": 1088 + "treeIndex": 1090 }, { "value": ["0x0efadbe8328a1a07bb3ddec22f69f88adb61b8b4", "1"], - "treeIndex": 1157 + "treeIndex": 1159 }, { "value": ["0x7bb998a98f60811dea7df9048134e14dc3a38f97", "1"], - "treeIndex": 839 + "treeIndex": 840 }, { "value": ["0x507B96026abF97845b68b605ED82BAc8FaFb23ff", "1"], - "treeIndex": 1027 + "treeIndex": 1029 }, { "value": ["0x082087d48cA764Bb1A5848b56869C1edd4407aC9", "1"], - "treeIndex": 1222 + "treeIndex": 1224 }, { "value": ["0x3C75b7d9C82924E668368f512309FBfA4f1d7480", "1"], - "treeIndex": 1079 + "treeIndex": 1081 }, { "value": ["0x0e440bd9798ad22cb8fd6f1a433f2f16e8786770", "1"], - "treeIndex": 857 + "treeIndex": 858 }, { "value": ["0x89172e6ecd0f83E0B31dA700f022E39ddD891D0c", "1"], - "treeIndex": 697 + "treeIndex": 698 + }, + { + "value": ["0xa400ff8a4ba8bf0b2e46c692aaf48650e186487b", "1"], + "treeIndex": 1014 } ], "leafEncoding": ["address", "uint256"] From 70af856fbea254361940b627a71db2d990baa87e Mon Sep 17 00:00:00 2001 From: taiko-bot <160625009+taiko-kitty@users.noreply.github.com> Date: Fri, 13 Sep 2024 03:33:48 -0700 Subject: [PATCH 13/56] chore(main): release taikoon-ui 1.3.0 (#17932) --- .release-please-manifest.json | 2 +- packages/taikoon-ui/CHANGELOG.md | 13 +++++++++++++ packages/taikoon-ui/package.json | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c1028f9226..01d63b9782 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -10,6 +10,6 @@ "packages/snaefell-ui": "1.1.0", "packages/supplementary-contracts": "1.0.0", "packages/taiko-client": "0.36.0", - "packages/taikoon-ui": "1.2.0", + "packages/taikoon-ui": "1.3.0", "packages/ui-lib": "1.0.0" } diff --git a/packages/taikoon-ui/CHANGELOG.md b/packages/taikoon-ui/CHANGELOG.md index ed3027bc8f..39697bdcb0 100644 --- a/packages/taikoon-ui/CHANGELOG.md +++ b/packages/taikoon-ui/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [1.3.0](https://github.com/taikoxyz/taiko-mono/compare/taikoon-ui-v1.2.0...taikoon-ui-v1.3.0) (2024-09-13) + + +### Features + +* **taikoons:** updated whitelist ([#18082](https://github.com/taikoxyz/taiko-mono/issues/18082)) ([e340c10](https://github.com/taikoxyz/taiko-mono/commit/e340c102f0537d1b1531806f4164d18976bae503)) + + +### Build + +* **deps-dev:** bump @sveltejs/kit from 2.5.7 to 2.5.21 ([#17901](https://github.com/taikoxyz/taiko-mono/issues/17901)) ([7a32ac4](https://github.com/taikoxyz/taiko-mono/commit/7a32ac40a654521c82cb3ff5b6f5af87d0a915a4)) +* **deps:** bump @web3modal/common from 4.1.11 to 5.0.11 ([#17876](https://github.com/taikoxyz/taiko-mono/issues/17876)) ([6ac4eb0](https://github.com/taikoxyz/taiko-mono/commit/6ac4eb0141be1bc3332da6ff63e8bebd9c00e326)) + ## [1.2.0](https://github.com/taikoxyz/taiko-mono/compare/taikoon-ui-v1.1.1...taikoon-ui-v1.2.0) (2024-07-04) diff --git a/packages/taikoon-ui/package.json b/packages/taikoon-ui/package.json index d8a56e97e9..cad577cca0 100644 --- a/packages/taikoon-ui/package.json +++ b/packages/taikoon-ui/package.json @@ -1,6 +1,6 @@ { "name": "taikoon-ui", - "version": "1.2.0", + "version": "1.3.0", "private": true, "scripts": { "dev": "vite dev", From f8775684f32f46f04e8bc8a416f7e2bacfb32530 Mon Sep 17 00:00:00 2001 From: Roger <50648015+RogerLamTd@users.noreply.github.com> Date: Sat, 14 Sep 2024 02:20:46 -0700 Subject: [PATCH 14/56] docs(docs-site): update docs for hekla ontake (#18090) --- .../node-operators/deploy-a-proverset.mdx | 46 ++++++++++++++----- .../node-operators/node-troubleshooting.mdx | 2 +- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx b/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx index 9f0a582794..faaa76a344 100644 --- a/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx +++ b/packages/docs-site/src/content/docs/guides/node-operators/deploy-a-proverset.mdx @@ -25,19 +25,21 @@ This guide outlines how to achieve this with separate EOAs running prover and pr 1. **Clone the Taiko monorepo** - The [Taiko monorepo](https://github.com/taikoxyz/taiko-mono) contains the scripts for deploying your `ProverSet`. + The [Taiko monorepo](https://github.com/taikoxyz/taiko-mono) contains the scripts for deploying your `ProverSet`. Checkout the latest stable release. (Use `protocol-v1.9.0` for Hekla!) ```bash git clone https://github.com/taikoxyz/taiko-mono.git cd taiko-mono/packages/protocol + git checkout tags/{release-tag} ``` ```sh git clone https://github.com/taikoxyz/taiko-mono.git cd taiko-mono/packages/protocol && git config core.autocrlf false + git checkout tags/{release-tag} ``` @@ -54,6 +56,10 @@ This guide outlines how to achieve this with separate EOAs running prover and pr ROLLUP_ADDRESS_MANAGER={ADDRESS} PROVER_SET_ADMIN={ADDRESS} forge script --chain-id {CHAIN_ID} --rpc-url {YOUR_RPC_URL} --private-key {PRIVATE_KEY} --broadcast script/DeployProverSet.s.sol:DeployProverSet ``` + + The script should print your implementation and proxy address with the log: ``` @@ -91,7 +97,7 @@ This guide outlines how to achieve this with separate EOAs running prover and pr 6. **Deposit your tokens and run your proposer + prover as usual!** - If you've followed the instructions, send your TAIKO/TTKOh to the ProverSet proxy and begin running your prover and proposer as usual. Do not send it to the contract directly! Use the `depositBond` function. + If you've followed the instructions, send your TAIKO/TTKOh to the ProverSet proxy and begin running your prover and proposer as usual. Send the tokens to your ProverSet contract, and start proving. If you've set up your allowance properly, there should be no need to use the `depositBond` function, as it deposits TTKOh from the ProverSet to TaikoL1.